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

目录:

1. 前言编辑

Nginx 可以用来作为反向代理服务器,来提供负载均衡的能力,使我们的 Web 服务器,能够水平扩容,从而处理更多的用户请求,但是反向代理服务器又变成了一个单点,当反向代理服务器挂了,整合 Web 服务器就不能被外界访问到,所以我们必须要保证反向代理服务器的高可用。

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

2. 方案规划编辑

VIPIP主机名nginx端口默认主从系统版本
192.168.1.77192.168.1.100pp180MASTERCentOS 7.3.1611
192.168.1.77192.168.1.65pp280BACKUPCentOS 7.3.1611


3. 安装 Nginx编辑

大家可以参考Linux 系统安装配置 Nginx

来给需要的服务器都安装并配置好 Nginx

4. 安装 Keepalived编辑

4.1 在线安装 Keepalived

执行命令:

yum -y install keepalived

4.2 离线安装 Keepalived

4.2.1 下载安装包

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

4.2.2 解压安装

tar -zxvf keepalived-2.0.18.tar.gz   # 解压
cd keepalived-2.0.18/
./configure --prefix=/usr/local/keepalived   # 编译
make && make install   # 安装

4.2.3 安装过程可能出现的问题

prefix 指定安装的目录,编译过程一般都不太顺利,会报各种各样的错误,基本上都是缺少编译环境问题。

image2019-8-4_20-12-9.png

可以看到缺少openssl,按照 Linux 系统安装配置 Nginx 中的方法安装 openssl 即可。

4.3 将 Keepalived 安装成 Linux 系统服务

因为没有使用 Keepalived 的默认路径安装(默认是/usr/local) ,安装完成之后,需要做一些工作复制默认配置文件到默认路径。

mkdir /etc/keepalived
cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/

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

cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
ln -s /usr/local/sbin/keepalived /usr/sbin/
ln -s /usr/local/keepalived/sbin/keepalived /sbin/

设置 keepalived 服务开机启动

chkconfig keepalived on

4.4 修改 Keepalived 的配置文件

路径为/etc/keepalived/keepalived.conf

4.4.1 MASTER 节点配置文件

! Configuration File for keepalived
global_defs {
 ## keepalived 自带的邮件提醒需要开启 sendmail 服务。 建议用独立的监控或第三方 SMTP
 router_id pp1 ## 标识本节点的字条串,通常为 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 ens33 ## 绑定虚拟 IP 的网络接口,与本机 IP 地址所在的网络接口相同, 我的是 ens33
 virtual_router_id 33 ## 虚拟路由的 ID 号, 两个节点设置必须一样, 可选 IP 最后一段使用, 相同的 VRID 为一个组,他将决定多播的 MAC 地址
 mcast_src_ip 192.168.1.100 ## 本机 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.1.77 ## 虚拟 ip,可以定义多个
 }
}

4.4.2 BACKUP 节点配置文件

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

需要注意的配置说明:

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

2)script "/etc/keepalived/nginx_check.sh" ## 检测 nginx 状态的脚本路径

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

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

5)mcast_src_ip 192.168.1.100 ## 本机 IP 地址

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

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

5. 编写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 

6.启动 Keepalived编辑

systemctl start keepalived

7. 测试编辑

1)同时启动两台服务器,测试keepalive master主服务器是否拥有VIP虚拟IP
预期结果:
a.主master服务器拥有VIP
b.能够通过VIP访问相应的nginx及下面相应的文件 
2)关闭keepalive master 主服务器的nginx ,查询是否会通过脚本关闭keepalive并释放VIP
预期结果:
a.nginx关闭,keepalive根据脚本自动关闭,通过相对于端口也无法访问
3)启动 keepalive master 主服务器,查询VIP的拥有情况
预期结果:
a.master 主服务器抢占VIP,因为权重的配置比BACKUP的大 
4)同时关闭两台服务器的nginx,测试访问情况
预期结果:
a.相应的端口关闭,keepalive主动关闭,相对应的访问项目不了