现在主备是正常的, Keepalived服务关闭会自动切换到backup, 那么要是Nginx挂了呢
136模拟Nginx停止
./nginx -s quit
此时HA明显还存在, 但是却无法访问了
编写脚本检测Nginx
进入Keepalived配置文件夹
cd /etc/keepalived/
vi check_nginx_alive_or_not.sh
编写脚本内容
#!/bin/bash
# 用于检测Nginx进程
A=`ps -C nginx --no-header |wc -l`
# 判断Nginx是否宕机, 如果宕机, 尝试重启
if [ $A -eq 0 ];then
# 启动Nginx 为了防止pid问题, 指定配置文件
/usr/local/nginx/sbin/nginx
# 等待一会再次检查Nginx, 如果没有启动成功, 则停止Keepalived, 使其启动备用机
sleep 3
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
# 终止 Keepalived进程
killall keepalived
fi
fi
添加执行权限
chmod +x check_nginx_alive_or_not.sh
这个时候浏览器还是访问不了的
手动执行一下脚本
./check_nginx_alive_or_not.sh
nginx已经被启动, 恢复正常
在Keepalived配置脚本中增加监听, 让Keepalived自动去循环check..这个脚本
vi keepalived.conf
修改后的配置
! Configuration File for keepalived
global_defs {
# 路由ID, 当前安装Keepalived节点主机的标识符, 全局唯一
router_id keep_136
}
# 检测Nginx的进程
vrrp_script check_nginx_alive {
# 检测脚本
script "/etc/keepalived/check_nginx_alive_or_not.sh"
# 每2秒运行一次
interval 2
# 如果脚本运行成功, 则升级权重+10, 如果配置为-10, 那么脚本运行失败权重-10
weight 10
}
# 计算机的节点
vrrp_instance VI_1 {
# 节点状态, MASTER代表主节点 BACKUP代表备用节点
state MASTER
# 使用ens33网卡
interface ens33
# 虚拟路由ID, 保持MASTER和BACKUP一致
virtual_router_id 51
# 优先级/权重 100 谁的优先级高, 在MASTER宕机后, 谁就能成为MASTER
priority 100
# 主备之间的心跳周期 1秒
advert_int 1
# 认证授权, 防止非法节点的进入
authentication {
auth_type PASS
auth_pass 1111
}
# 追踪Nginx脚本
track_script {
check_nginx_alive
}
# 虚拟IP
virtual_ipaddress {
192.168.247.140
}
}
修改完成后重启Keepalived服务
systemctl restart keepalived.service
此时140是可以访问的
手动停止Nginx
./nginx -s stop
还是可以访问的, 此时Nginx一旦停止就会被Keepalived自动拉起, 如果拉起失败, 就会结束keepalived, 自动切换备用机, 实现7X24小时不间断服务