
Nginx的主要用途有反向代理,负载均衡等,无论它作为哪种用途,Nginx本身也需要高可用来预防单点故障,Nginx的高可用可以通过搭配Keepalive来实现。

安装keepalive
#yum -y install keepalived
//修改配置文件:
#vi /etc/keepalived/keepalived.conf
#systemctl restart keepalived
#systemctl enable keepalived
主机
global_defs {
#notification_email {
#acassen@firewall.loc
#failover@firewall.loc
#sysadmin@firewall.loc
#}
#notification_email_from Alexandre.Cassen@firewall.loc
#smtp_server 127.0.0.1
#smtp_connect_timeout 30
router_id NGINX_80 #这台keppalive主机的名称
}
# 健康监测nginx
vrrp_script check_nginx {
script "/etc/keepalived/check_nginx.sh" # 设置检查nginx是否存活的脚本位置
//在vrrp_script模块中,如果不设置“weight”选项值,那么集群优先级的选择将由Keepalived配置文件中的“priority”值决定,而在需要对集群中优先级进行灵活控制时,可以通过在vrrp_script模块中设置“weight”值来实现。
}
#心跳监测mysql
vrrp_script check_mysql {
script "/etc/keepalived/check_mysql.sh" # 设置检查nginx是否存活的脚本位置
}
# keepalive 热备组配置
vrrp_instance VI_1 {
state MASTER # 配置当前keepalive为master角色
interface enp7s0 # 网卡名字,必须和实际网卡名称一致,默认是ens33
virtual_router_id 85 # VRRP 路由 ID实例,每个组的id是相同的(属同一个组内) , master和slave保持一致即可 值:0~255
priority 100 # 优先级,备服务器设置 90 值:1~254 越大越优先
advert_int 1 # 指定VRRP 心跳包通告间隔时间,默认1秒
authentication {
auth_type PASS
auth_pass 1111 # 设置keepalive的master和slave之间简单的秘钥认证
}
# 设置keepalive虚拟IP地址
virtual_ipaddress {
#<IPADDR>/<MASK> brd <IPADDR> dev <STRING> scope <SCOPE>
#192.168.31.240/24 dev ens33 label ens33:0
192.168.0.85/24
}
track_script {
check_nginx
}
}
备机
global_defs {
#notification_email {
#acassen@firewall.loc
#failover@firewall.loc
#sysadmin@firewall.loc
#}
#notification_email_from Alexandre.Cassen@firewall.loc
#smtp_server 127.0.0.1
#smtp_connect_timeout 30
router_id NGINX_110 #这台keppalive主机的名称<<<<<<<<<<<<<<<<<<<<<<<<<<
}
# 健康监测nginx
vrrp_script check_nginx {
script "/etc/keepalived/check_nginx.sh" # 设置检查nginx是否存活的脚本位置
}
#心跳监测mysql
vrrp_script check_mysql {
script "/etc/keepalived/check_mysql.sh" # 设置检查nginx是否存活的脚本位置
}
# keepalive 热备组配置
vrrp_instance VI_1 {
state BACKUP # 配置当前keepalive为BACKUP角色<<<<<<<<<<<<<<<<<
interface eno1 # 网卡名字,必须和实际网卡名称一致,默认是ens33<<<<<<<<<<<<<<<<<<<<
virtual_router_id 85 # VRRP 路由 ID实例,每个组的id是相同的(属同一个组内) , master和slave保持一致即可 值:0~255<<<<<<<<<<<<<<<
priority 95 # 优先级,备用服务器95,主机100 值:1~254 越大越优先<<<<<<<<<<<<<<<<<<<<<
advert_int 1 # 指定VRRP 心跳包通告间隔时间,默认1秒
authentication {
auth_type PASS
auth_pass 1111 # 设置keepalive的master和slave之间简单的秘钥认证
}
# 设置keepalive虚拟IP地址
virtual_ipaddress {
#<IPADDR>/<MASK> brd <IPADDR> dev <STRING> scope <SCOPE>
#192.168.31.240/24 dev ens33 label ens33:0
192.168.0.85/24 #<<<<<<<<<<<<<<<
}
track_script {
check_nginx
}
}
添加nginx健康监测脚本
#!/bin/bash
A=`ps -C nginx --no-header |wc -l`
#如果nginx没有启动就启动nginx
if [ $A -lt 1 ];then
#重启nginx
/bin/systemctl restart nginx
if [ `ps -C nginx --no-header |wc -l` -lt 1 ];then
#nginx重启失败,则停掉keepalived服务,进行Vir-IP转移
#/bin/systemctl stop keepalived
exit 1
else
exit 0
fi
else
exit 0
fi
//最后给执行权限
#chmod +x /etc/keepalived/check_nginx.sh
可以有多个虚拟ip不同的网卡,如下

验证生效
