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

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

相关推荐
LI JS@你猜啊5 分钟前
Elasticsearch 集群
大数据·服务器·elasticsearch
watl011 分钟前
【Android】unzip aar删除冲突classes再zip
android·linux·运维
团儿.27 分钟前
Docker服务发现新纪元:探索Consul的无限魅力
运维·docker·云计算·服务发现·consul
赵大仁1 小时前
在 CentOS 7 上安装 Node.js 20 并升级 GCC、make 和 glibc
linux·运维·服务器·ide·ubuntu·centos·计算机基础
vvw&1 小时前
Docker Build 命令详解:在 Ubuntu 上构建 Docker 镜像教程
linux·运维·服务器·ubuntu·docker·容器·开源
李白你好1 小时前
家用无线路由器的 2.4GHz 和 5GHz
运维·网络
苹果醋31 小时前
React系列(八)——React进阶知识点拓展
运维·vue.js·spring boot·nginx·课程设计
我要出家当道士1 小时前
Nginx单向链表 ngx_list_t
数据结构·nginx·链表·c
冷冰鱼1 小时前
【问题实录】服务器ping不通win11笔记本
运维·服务器
wayuncn1 小时前
web服务器之云主机、物理机租用、服务器托管的区别
运维·服务器