23-Keepalived配置Nginx自动重启,实现7X24小时不间断服务
Keepalived配置Nginx自动重启,实现7X24小时不间断服务
现在主备是正常的, 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小时不间断服务