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

文章目录


简介

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

所以我们可以通过配置健康检查机制来解决这个问题

配置过程

前置环境请看

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

主机名 ip 服务 虚拟ip
ngx1 192.168.10.11 nginx+keepalived 192.168.10.111
ngx2 192.168.10.12 nginx+keepalived 192.168.10.111

创建健康检查脚本

复制代码
vim /etc/keepalived/chk_nginx_port.sh
\ 复制代码
#!/bin/bash
nginx_count=$(ps -C nginx --no-header | wc -l)
if [ $nginx_count -eq 0 ]; then
    echo "Nginx is not running"
	systemctl start nginx
	nginx_count=$(ps -C nginx --no-header | wc -l)
	if [ $nginx_count -eq 0 ]; then
		systemctl stop keepalived
    fi
fi

简单解释

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

赋予这个脚本执行权限

复制代码
chmod +x /etc/keepalived/chk_nginx_port.sh

更改keepalived配置文件

复制代码
vim /etc/keepalived/keepalived.conf
\ 复制代码
global_defs {
   router_id LVS_DEVEL1
}

vrrp_script chk_nginx_port {
  script "/etc/keepalived/chk_nginx_port.sh"
}

vrrp_instance VI_1 {
    state MASTER
    interface ens33
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        192.168.10.111
    }
    track_script {
        chk_nginx_port
}
}

重启keepalived

复制代码
systemctl restart keepalived

这个是主从的配置,所以从端不需要配置健康检查

如果是双主配置,另一端同理

结果测试

ngx1停止nginx服务

复制代码
vim /etc/nginx/nginx.conf

随便添几个字母,让nginx起不来就好

重启nginx

复制代码
systemctl restart nginx

可以看到会报错

查看ip

复制代码
ip add

可以发现虚拟ip已经转移

到ngx2查看ip

复制代码
ip add

可以看到转移过来的虚拟ip

访问虚拟ip

也是ngx2的web页面

其他服务同理,更改脚本内容即可

相关推荐
lin张7 小时前
mysql
linux·时序数据库
m***11907 小时前
Ubuntu 系统下安装 Nginx
数据库·nginx·ubuntu
YQ_017 小时前
ubuntu22.04及以上,安装中文输入法
linux·运维·服务器
一周困⁸天.7 小时前
K8S-Pod资源对象
linux·容器·kubernetes
python百炼成钢7 小时前
45.Linux I2C 驱动
linux·运维·服务器·驱动开发
k***81727 小时前
使用Canal将MySQL数据同步到ES(Linux)
linux·mysql·elasticsearch
8K超高清7 小时前
超高清科技引爆中国电影向“新”力
大数据·运维·服务器·网络·人工智能·科技
CIb0la8 小时前
Google 将用 Aluminium OS 取代 ChromeOS
运维·生活·媒体
至此流年莫相忘8 小时前
第二版:Windows 服务器上私有化部署 Qwen/Qwen3-Embedding-0.6B 模型
服务器·windows·embedding
last demo8 小时前
Linux 正则表达式
linux·mysql·正则表达式