解决高可用服务器只针对物理服务器的问题
默认情况下 Keepalived软件仅仅在对方机器宕机或 Keepalived停掉的时候才会接管业务。但在实际工作中,有业务服务停止而Keepalived服务还在工作的情况,这就会导致用户访问的VIP无法找到对应的服务,那么,如何解决业务服务宕机可以将IP漂移到备节点使之接管提供服务呢?
第一个方法:可以写守护进程脚本来处理。当 Nginx业务有问题时,就停掉本地的Keepalived服务,实现P漂移到对端继续提供服务。实际工作中部署及开发的示例脚本如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 | [root@lb01 shell]# cat check_nginx.sh #!/bin/bash #Author:Mr.Ding #Created Time:2018-10-05 15:51:54 #Name:check_nginx.sh #Description: while true do if [ `netstat -lntup|grep nginx|wc -l` -ne 1 ];then systemctl stop keepalived.service fi sleep 5 done |
此脚本的思路是若没有80端口存在,就停掉keepalived服务实现释放本地VIP。在后台执行上述脚本检查,也可加入计划任务中。
1 2 3 4 | [root@lb01 shell]# sh check_nginx.sh & [1] 1428 [root@lb01 shell]# ps -ef |grep check |grep -v grep root 1428 1320 0 15:56 pts/0 00:00:00 sh check_nginx.sh |
停掉nginx服务,看IP是否发生切换
1 2 3 4 5 6 7 | [root@lb01 shell]# systemctl stop nginx.service [root@lb01 shell]# netstat -lntup|grep nginx [root@lb01 shell]# ip add|grep 192.168.200.16 查看备节点是否已接管 [root@lb02 ~]# ip add|grep 192.168.200.16 inet 192.168.200.16/24 scope global secondary ens33 |
第二个方法:可以使用keepalived的配置文件参数触发写好的服务检测脚本。
1 2 3 4 5 6 7 8 9 10 11 12 | [root@lb01 shell]# cat chk_nginx_proxy.sh #!/bin/bash #Author:Mr.Ding #Created Time:2018-10-05 16:09:27 #Name:chk_nginx_proxy.sh #Description: if [ `netstat -lntup|grep nginx|wc -l` -ne 1 ];then systemctl stop keepalived.service fi [root@lb01 shell]# chmod +x chk_nginx_proxy.sh [root@lb01 shell]# ls -l chk_nginx_proxy.sh -rwxr-xr-x 1 root root 192 10月 5 16:10 chk_nginx_proxy.sh |
在keepalived.conf文件中配置如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | [root@lb01 shell]# cat /etc/keepalived/keepalived.conf ! Configuration File for keepalived global_defs { notification_email { acassen@firewall.loc } notification_email_from Alexandre.Cassen@firewall.loc smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id lb01 } vrrp_script chk_nginx_proxy { #定义vrrp脚本,检测http端口 script "/server/scripts/shell/chk_nginx_proxy.sh" #执行脚本,当nginx服务有问题,就停掉keepalived服务 interval 2 #间隔2秒 weight 2 } vrrp_instance VI_1 { state MASTER interface ens33 virtual_router_id 55 priority 150 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.200.16/24 dev ens33 lable ens33:1 } track_script { chk_nginx_proxy #触发检查 } } |
测试接管结果
1 2 3 4 5 6 | [root@lb01 shell]# systemctl stop nginx [root@lb01 shell]# ip add|grep 192.168.200.16 在备服务器上查看接管结果 [root@lb02 ~]# ip add|grep 192.168.200.16 inet 192.168.200.16/24 scope global secondary ens33 |
当停掉nginx的时候,keepalived会在2秒钟内自动停掉,VIP被释放,由备用端接管,这样就实现了即服务宕机也会进行IP漂移,业务切换。
******************************我也想难过的时候到海边走走,可是我的城市没有海。******************************
分类:
Keepalived
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY