自学内容网 自学内容网

nginx+keepalived健康检查案例详解(解决nginx出现故障却不能快速切换到备份服务器的问题)


简介

在我们通过nginx+keepalived实现高可用后,会发现nginx出现故障的时候keepalived并不会将虚拟ip切换到备份服务器上其原理就是nginx和keepalived是两个独立的服务,Nginx的故障状态不会触发Keepalived本身的故障转移机制。
所以我们可以通过配置健康检查机制来解决这个问题

配置过程

前置环境请看

链接: keepalived+nginx实现高可用的案例详解(主从模式)
lvs和nginx的配置都在前置环境里

主机名ip服务虚拟ip
ngx1192.168.10.11nginx+keepalived192.168.10.111
ngx2192.168.10.12nginx+keepalived192.168.10.111

创建健康检查脚本

vim /etc/keepalived/chk_nginx_port.sh
#!/bin/bashnginx_count=$(ps -C nginx --no-header | wc -l)if [ $nginx_count -eq 0 ]; then    echo "Nginx is not running"systemctl start nginxnginx_count=$(ps -C nginx --no-header | wc -l)if [ $nginx_count -eq 0 ]; thensystemctl stop keepalived    fifi

简单解释
这个脚本的作用是监测 Nginx 服务的运行状态,并在其未运行时尝试启动它。如果 Nginx 启动失败,脚本会停止 Keepalived 服务。

赋予这个脚本执行权限

chmod +x /etc/keepalived/chk_nginx_port.sh

更改keepalived配置文件

vim /etc/keepalived/keepalived.conf