nginx集群系列(二):结合keepalived+循环监测chkn.sh脚本实现nginx集群间的故障自动转移

艺帆风顺 发布于 2025-04-02 64 次阅读


一、需求背景

     nginx 版本:俩台服务器同版本v1.25.3

    Nginx-Master:192.168.1.137

    Nginx-Slave:   192.168.1.138

    虚拟IP(用户实际访问IP):192.168.1.50

    俩台服务器均已安装keepalived服务,且虚拟IP测试可以正常访问,在此情况下,需要实现当一台nginx服务宕机后,自动切换到另外一台服务器。

    /usr/local/src/nginx_check.sh脚本没有生效,需要重新设置监测脚本。

二、编写监测脚本chkn.sh(主从都要配置)

脚本内容如下

#!/bin/bash
while truedo if pgrep nginx > /dev/null then # nginx进程存在,启动keepalived服务 systemctl start keepalived.service else # nginx进程不存在,停止keepalived服务 systemctl stop keepalived.service fi sleep 2done

保持后台运行该脚本:nohup sh chkn.sh &

三、验证配置情况

1、nginx与Keepalived服务关联关系验证。

在俩台服务器上,终止nginx服务,发现keepalived服务随即终止;

开启nginx服务,则keepalived服务随即开启。

    证明该配置已经生效。

2、模拟服务器宕机验证。

    关闭master主机,随即很快发现keepalived切换到slave主机:

    再次打开master主机,则可以发现依然切换到该主机,因为该主机权重值较高。

四、开机自启优化

    将chkn.sh脚本加入到开机自启,实现开机后自动监测nginx和keepalived服务。

    vim /etc/systemd/system/chkn.service

# chkn.service
[Unit]Description=chkn serviceAfter=network.target
[Service]Type=simpleExecStart=/bin/sh /etc/keepalived/bin/chkn.shRestart=on-failure
[Install]WantedBy=multi-user.target

重载系统服务列表:systemctl daemon-reload

systemctl start chkn.service

systemctl enable chkn.service

systemctl status chkn.service