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

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


一、需求背景

     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