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小时不间断服务

posted @ 2022-09-06 18:55  彼岸舞  阅读(173)  评论(0编辑  收藏  举报