历史版本2 :Keepalived+Nginx部署方案 返回文档
编辑时间: 内容长度:图片数:目录数: 修改原因:

目录:

1. 概述编辑

Nginx 可以用来作为反向代理服务器,来提供负载均衡的能力,使我们的 Web 服务器,能够水平扩容,从而处理更多的用户请求。

但是反向代理服务器又变成了一个单点,当反向代理服务器挂了,整合 Web 服务器就不能被外界访问到,所以我们必须要保证反向代理服务器的高可用。

而 Keepalived 是一种高性能的服务器高可用或热备解决方案,可以用来防止服务器单点故障的发生,通过配合 Nginx 可以实现 Web 前端服务的高可用。

2. 方案规划编辑

注:VIP 为虚拟 IP ,不被占用前提下可自定义。

VIP服务器 IP主机名nginx 端口默认主从
192.168.5.200192.168.5.249
ethan380MASTER
192.168.5.200192.168.5.103
localhost.localdomain80BACKUP

3. 外网用户方案编辑

3.1 安装 Nginx

两个服务器上安装配置 Nginx 。具体步骤请参见:Linux系统安装配置Nginx 

3.2 安装 Keepalived

两个服务器上安装 Keepalived 。

执行命令:

yum -y install keepalived

3.3 设置 keepalived 服务开机启动

两个服务器都需要执行下面语句。语句如下所示:

chkconfig keepalived on

4.png

3.4 修改 Keepalived 的配置文件

路径为:/etc/keepalived/keepalived.conf

3.4.1 MASTER 节点配置文件

! Configuration File for keepalived
global_defs {
## keepalived 自带的邮件提醒需要开启 sendmail 服务。 建议用独立的监控或第三方 SMTP
 router_id ethan3 ## 标识本节点的字条串,通常为 hostname

## keepalived 会定时执行脚本并对脚本执行的结果进行分析,动态调整 vrrp_instance 的优先级。如果脚本执行结果为 0,并且 weight 配置的值大于 0,则优先级相应的增加。如果脚本执行结果非 0,并且 weight配置的值小于 0,则优先级相应的减少。其他情况,维持原本配置的优先级,即配置文件中 priority 对应的值。
vrrp_script chk_nginx {
 script "/etc/keepalived/nginx_check.sh" ## 检测 nginx 状态的脚本路径
 interval 2 ## 检测时间间隔
 weight -20 ## 如果条件成立,权重-20
}
## 定义虚拟路由, VI_1 为虚拟路由的标示符,自己定义名称
vrrp_instance VI_1 {
 state MASTER ## 主节点为 MASTER, 对应的备份节点为 BACKUP
 interface eno16777736 ## 绑定虚拟 IP 的网络接口,与本机 IP 地址所在的网络接口相同。
 virtual_router_id 33 ## 虚拟路由的 ID 号, 两个节点设置必须一样, 可选 IP 最后一段使用, 相同的 VRID 为一个组,他将决定多播的 MAC 地址
 mcast_src_ip 192.168.5.249 ## 本机 IP 地址
 priority 200 ## 节点优先级, 值范围 0-254, MASTER 要比 BACKUP 高
 advert_int 1 ## 组播信息发送间隔,两个节点设置必须一样, 默认 1s
 ## 设置验证信息,两个节点必须一致
 authentication {
  auth_type PASS
  auth_pass 1111 ## 真实生产,按需求对应该过来
 }
 ## 将 track_script 块加入 instance 配置块
 track_script {
  chk_nginx ## 执行 Nginx 监控的服务
 } #
 # 虚拟 IP 池, 两个节点设置必须一样
 virtual_ipaddress {
  192.168.5.200 ## 虚拟 ip,可以定义多个
 }
}

3.4.2 BACKUP 节点配置文件

! Configuration File for keepalived
global_defs {
 router_id localhost.localdomain
}
vrrp_script chk_nginx {
 script "/etc/keepalived/nginx_check.sh"
 interval 2
 weight -20
}
vrrp_instance VI_1 {
 state BACKUP
 interface ens192
 virtual_router_id 33
 mcast_src_ip 192.168.5.103
 priority 90
 advert_int 1
 authentication {
  auth_type PASS
  auth_pass 1111
 }
 track_script {
  chk_nginx
 }
 virtual_ipaddress {
  192.168.5.200
 }
}

需要注意的配置说明:

1)router_id ethan3 ## 标识本节点的字条串,通常为 hostname 。

在服务器中使用语句hostname可得出。如下图所示:

1641974851329444.png

2)script "/etc/keepalived/nginx_check.sh" ## 检测 nginx 状态的脚本路径,无需修改,参考本文 3.5 节。

3)state MASTER/BACKUP ##说明主备。

4)interface eno16777736 ## 绑定虚拟 IP 的网络接口,与本机 IP 地址所在的网络接口相同。

使用ip a可得出。如下图所示:

注:主节点配置文件中该值为主节点网卡号;备节点配置文件中该值为备节点网卡号。

1641974942332551.png

5)mcast_src_ip 192.168.5.249 ## 本机 IP 地址。

6)priority 200 ## 节点优先级, 值范围 0-254, MASTER 要比 BACKUP 高。

7)virtual_ipaddress ##虚拟 ip,即VIP,可自定义,可定义多个。

3.5 编写 Nginx 状态启动脚本

两个服务器上都需要编写下面文件,根据实际情况修改 nginx 路径。

编写 Nginx 状态检测脚本 /etc/keepalived/nginx_check.sh (已在 Keepalived.conf 中配置)脚本要求。

#!/bin/bash
A=`ps -C nginx --no-header |wc -l`
if [ $A -eq 0 ];then
/usr/nginx/sbin/nginx
sleep 2
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
 killall keepalived
fi
fi

赋予文件权限:chmod +x /etc/keepalived/nginx_check.sh 

3.6 启动 Keepalived

两个服务器都执行下面语句:

systemctl start keepalived

3.7 效果查看

注:节点上有虚拟 IP 时,可通过虚拟 IP 访问相应的 nginx 及下面相应的文件。

1)使用ip addr语句,可以看到虚拟 IP 192.168.5.200 绑定在了 MASTER 服务器上面。如下图所示:

1641973992565967.png

而 BACKUP 节点上没有虚拟 IP 。如下图所示:

1641974146900091.png

2)使用systemctl stop keepalived停掉主节点的 keepalived 服务,备节点上有虚拟 IP 。如下图所示:

1641974581124305.png

4. 内网用户方案编辑

4.1 步骤说明

内网用户无法在线安装 Keepalived ,与外网用户方案不同点在于 3.2 节,其他步骤相同。

4.2 离线安装 Keepalived

两个服务器都需要做下面步骤。

4.2.1 安装步骤

1)下载安装包。访问网址:https://www.keepalived.org/download.html 并下载 Keepalived 的安装包。

2)解压安装。

将安装包上传到服务器某个文件夹下(文档示例为:/wendy),进入安装包所在文件夹后,进行下面操作:

cd /wendy
tar -zxvf keepalived-2.0.18.tar.gz   # 解压
cd /wendy/keepalived-2.0.18  # 路径根据实际情况修改
./configure --prefix=/usr/local/keepalived   # 编译
make && make install   # 安装

4.2.2 将 Keepalived 安装成 Linux 系统服务

1)复制keepalived.conf文件到/etc/keepalived/下。

mkdir /etc/keepalived
cp /wendy/keepalived-2.0.18/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/

2)复制 keepalived 服务脚本到默认的地址:

cp /wendy/keepalived-2.0.18/keepalived/etc/init.d/keepalived /etc/init.d/
cp /wendy/keepalived-2.0.18/keepalived/etc/sysconfig/keepalived /etc/sysconfig/