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页面

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

相关推荐
戒不掉的伤怀8 分钟前
【Navicat 连接MySQL时出现错误1251:客户端不支持服务器请求的身份验证协议;请考虑升级MySQL客户端】
服务器·数据库·mysql
超喜欢下雨天8 分钟前
服务器安装 ros2时遇到底层库依赖冲突的问题
linux·运维·服务器·ros2
搬码临时工14 分钟前
小企业如何搭建本地私有云服务器,并设置内部网络地址提供互联网访问
运维·服务器
old-six-programmer33 分钟前
NAT 类型及 P2P 穿透
服务器·网络协议·webrtc·p2p·nat
tan77º1 小时前
【Linux网络编程】网络基础
linux·服务器·网络
风口上的吱吱鼠1 小时前
Armbian 25.5.1 Noble Gnome 开启远程桌面功能
服务器·ubuntu·armbian
18你磊哥1 小时前
Windows 本地安装部署 Apache Druid
运维·debian
笑衬人心。1 小时前
Ubuntu 22.04 + MySQL 8 无密码登录问题与 root 密码重置指南
linux·mysql·ubuntu
IT成长日记2 小时前
【Docker基础】Docker数据卷管理:docker volume inspect及其参数详解
运维·docker·容器·volume·inspect
ldj20202 小时前
Jenkins 构建过程常见错误
运维·jenkins