首页 > 其他分享 >keepalived的状态不断切换的问题解决

keepalived的状态不断切换的问题解决

时间:2023-02-09 16:34:52浏览次数:48  
标签:状态 Mar nginx Keepalived keepalived 53 nginx02 vrrp 切换

转载自:https://blog.csdn.net/weixin_43515220/article/details/104959814

=================

 

笔者在搭建nginx+keepalived架构的过程中,发现存在keepalived的vip不断迁移的过程:master down了之后,vip一会迁移到backup上,一会迁移到master上,或者在backup上一会存在一会消失。

就这样的情况笔者做了下面排查。

先介绍下环境:

master和backup都为CentOS Linux release 7.7.1908 (Core),均不开启防火墙

master IP: 192.168.218.131

backup IP:192.168.218.132

VIP:192.168.218.140

通过keepalived执行脚本检测Nginx的情况,若Nginx挂掉了,keepalived也会停止

Nginx的配置其实已经没有问题,关键是keepalived

下面是master的keepalived配置

! Configuration File for keepalived

global_defs {
# 接收邮件地址
notification_email {
[email protected]
[email protected]
[email protected]
}
# 邮件发送地址
notification_email_from [email protected]
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id NGINX_MASTER
}

vrrp_script check_nginx {
script "/usr/local/nginx/sbin/check_nginx.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.218.140/24 # vip for k8s master
}
track_script {
check_nginx
}
}

 


下面是backup的keepalived配置

! Configuration File for keepalived

global_defs {
# 接收邮件地址
notification_email {
[email protected]
[email protected]
[email protected]
}
# 邮件发送地址
notification_email_from [email protected]
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id NGINX_BACKUP
}

vrrp_script check_nginx {
script "/usr/local/nginx/sbin/check_nginx.sh"
}

vrrp_instance VI_1 {
state BACKUP # BACKUP
interface ens33
virtual_router_id 51
priority 90 # 优先级小于master
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.218.140/24 # vip for k8s master
}
track_script {
check_nginx
}
}

 

下面是keepalived中的执行脚本check+nginx.sh,已加执行权限

count=$(ps -ef |grep nginx |egrep -cv "grep|$$")

if [ "$count" -eq 0 ];then
systemctl stop keepalived
fi

 

排查

在master上手动pkill nginx之后,检查nginx状态,nginx已经停止

但是再检查keepalived的时候,keepalived还是正在运行

笔者先是在backup上查看系统日志

vim /var/log/messages

Mar 18 23:53:46 nginx02 Keepalived_vrrp[1365]: VRRP_Instance(VI_1) Sending/queueing gratuitous ARPs on ens33 for 192.168.218.140
Mar 18 23:53:46 nginx02 Keepalived_vrrp[1365]: Sending gratuitous ARP on ens33 for 192.168.218.140
Mar 18 23:53:46 nginx02 Keepalived_vrrp[1365]: Sending gratuitous ARP on ens33 for 192.168.218.140
Mar 18 23:53:46 nginx02 Keepalived_vrrp[1365]: Sending gratuitous ARP on ens33 for 192.168.218.140
Mar 18 23:53:46 nginx02 Keepalived_vrrp[1365]: Sending gratuitous ARP on ens33 for 192.168.218.140
Mar 18 23:53:48 nginx02 Keepalived_vrrp[1365]: VRRP_Instance(VI_1) Received advert with higher priority 100, ours 90
Mar 18 23:53:48 nginx02 Keepalived_vrrp[1365]: VRRP_Instance(VI_1) Entering BACKUP STATE
Mar 18 23:53:48 nginx02 Keepalived_vrrp[1365]: VRRP_Instance(VI_1) removing protocol VIPs.
Mar 18 23:53:51 nginx02 Keepalived_vrrp[1365]: VRRP_Instance(VI_1) Transition to MASTER STATE
Mar 18 23:53:52 nginx02 Keepalived_vrrp[1365]: VRRP_Instance(VI_1) Entering MASTER STATE
Mar 18 23:53:52 nginx02 Keepalived_vrrp[1365]: VRRP_Instance(VI_1) setting protocol VIPs.
Mar 18 23:53:52 nginx02 Keepalived_vrrp[1365]: Sending gratuitous ARP on ens33 for 192.168.218.140
Mar 18 23:53:52 nginx02 Keepalived_vrrp[1365]: VRRP_Instance(VI_1) Sending/queueing gratuitous ARPs on ens33 for 192.168.218.140
Mar 18 23:53:52 nginx02 Keepalived_vrrp[1365]: Sending gratuitous ARP on ens33 for 192.168.218.140
Mar 18 23:53:52 nginx02 Keepalived_vrrp[1365]: Sending gratuitous ARP on ens33 for 192.168.218.140
Mar 18 23:53:52 nginx02 Keepalived_vrrp[1365]: Sending gratuitous ARP on ens33 for 192.168.218.140
Mar 18 23:53:52 nginx02 Keepalived_vrrp[1365]: Sending gratuitous ARP on ens33 for 192.168.218.140
Mar 18 23:53:53 nginx02 Keepalived_vrrp[1365]: VRRP_Instance(VI_1) Received advert with higher priority 100, ours 90
Mar 18 23:53:53 nginx02 Keepalived_vrrp[1365]: VRRP_Instance(VI_1) Entering BACKUP STATE
Mar 18 23:53:53 nginx02 Keepalived_vrrp[1365]: VRRP_Instance(VI_1) removing protocol VIPs.
Mar 18 23:53:57 nginx02 Keepalived_vrrp[1365]: VRRP_Instance(VI_1) Transition to MASTER STATE
Mar 18 23:53:58 nginx02 Keepalived_vrrp[1365]: VRRP_Instance(VI_1) Entering MASTER STATE

在日志中可以看到,backup一会切到BACKUP状态,一会切到MASTER状态,根据提示,切换的原因是存在一个优先级为100的主机,比backup的优先级90要高

在这里笔者觉得很奇怪,优先级为100的那不就是master吗?

master的keepalived优先级没有因为Nginx挂掉而发生改变

在网上查阅了一些优秀博客之后,得到以下信息:

keepalived的vrrp_script执行后异常退出,可通过weight -int 的形式降低keepalived的优先级

于是针对笔者的实际情况,做出以下修改:

# 修改keepalived的vrrp_script:/usr/local/nginx/sbin/check_nginx.sh
count=$(ps -ef |grep nginx |egrep -cv "grep|$$")

if [ "$count" -eq 0 ];then
systemctl stop keepalived
exit 1 # 当nginx挂掉后,返回退出状态码1,以使其异常退出
fi

 

修改master和backup的keepalived配置:

# 两台主机都在vrrp_script中修改
vrrp_script check_nginx {
script "/usr/local/nginx/sbin/check_nginx.sh"
weight -20 # 脚本异常退出后,使keepalived的优先级-20
interval 2 # 脚本每2秒执行一次
}

 

将keepalived和Nginx的状态复原后,再次在master上pkill nginx

发现vip已迁移到backup上,且不发生原来的不断迁移的情况

下面查看backup的系统日志/var/log/messages

Mar 19 01:05:25 nginx02 Keepalived_vrrp[1417]: /usr/local/nginx/sbin/check_nginx.sh exited with status 127
Mar 19 01:05:26 nginx02 Keepalived_vrrp[1417]: /usr/local/nginx/sbin/check_nginx.sh exited with status 127
Mar 19 01:05:27 nginx02 Keepalived_vrrp[1417]: /usr/local/nginx/sbin/check_nginx.sh exited with status 127
Mar 19 01:05:28 nginx02 Keepalived_vrrp[1417]: /usr/local/nginx/sbin/check_nginx.sh exited with status 127
Mar 19 01:05:29 nginx02 Keepalived_vrrp[1417]: /usr/local/nginx/sbin/check_nginx.sh exited with status 127
Mar 19 01:05:30 nginx02 Keepalived_vrrp[1417]: VRRP_Script(check_nginx) succeeded

...省略部分信息...

Mar 19 01:06:40 nginx02 Keepalived_vrrp[1417]: VRRP_Instance(VI_1) Transition to MASTER STATE
Mar 19 01:06:41 nginx02 Keepalived_vrrp[1417]: VRRP_Instance(VI_1) Entering MASTER STATE
Mar 19 01:06:41 nginx02 Keepalived_vrrp[1417]: VRRP_Instance(VI_1) setting protocol VIPs.
Mar 19 01:06:41 nginx02 Keepalived_vrrp[1417]: Sending gratuitous ARP on ens33 for 192.168.218.140
Mar 19 01:06:41 nginx02 Keepalived_vrrp[1417]: VRRP_Instance(VI_1) Sending/queueing gratuitous ARPs on ens33 for 192.168.218.140
Mar 19 01:06:41 nginx02 Keepalived_vrrp[1417]: Sending gratuitous ARP on ens33 for 192.168.218.140
Mar 19 01:06:41 nginx02 Keepalived_vrrp[1417]: Sending gratuitous ARP on ens33 for 192.168.218.140
Mar 19 01:06:41 nginx02 Keepalived_vrrp[1417]: Sending gratuitous ARP on ens33 for 192.168.218.140

 

标签:状态,Mar,nginx,Keepalived,keepalived,53,nginx02,vrrp,切换
From: https://www.cnblogs.com/hd92/p/17105766.html

相关文章

  • Response案例验证码-代码实现、点击切换
    Response验证码-代码实现packagecom.example.day_14_response;importjavax.imageio.ImageIO;importjavax.servlet.ServletException;importjavax.servlet.Servle......
  • AP2813双路降压恒流驱动器 一切一 MOS切换 储能电源指示灯
    产品描述AP2813是一款双路降压恒流驱动器,高效率、外围简单、内置功率管,适用于5-80V输入的高精度降压LED恒流驱动芯片。内置功率管输出功率可达12W,电流1.2A。AP2......
  • 状态机的概念与设计
    ⭐本专栏针对FPGA进行入门学习,从数电中常见的逻辑代数讲起,结合VerilogHDL语言学习与仿真,主要对组合逻辑电路与时序逻辑电路进行分析与设计,对状态机FSM进行剖析与建模。......
  • 很好奇藤本树创作电锯人时的精神状态
    暗之恶魔,代表人类最初的恐惧根源之一——黑暗。登场时,被腰斩的宇航员被立在道路两侧,上半身双手合十进行祈祷。向未知勇敢探索的宇航员被斩杀,用处于科学对立面的祈祷手势象......
  • POD状态整理(持续更新)
    penddingPod一直停留在Pending状态,可能表示,该Pod不能被调度到某一个节点上------我遇到的一个情况确实是这样的,因为我要mount的卷是在worker1上的,由于pod运行时,我没有......
  • Go 工程化 - 使用 expvar 监控接口状态
    expvar 包为程序中的公共变量提供了一个标准化的接口,如服务中的访问计数器。包提供了HTTP接口并以JSON格式输出这些变量,接口的URL路由是 /debug/vars 。最重要的......
  • 春节假期“清零”,任务管理飞项快速助你回到高效状态
    俗话说过完元宵就过完春节了。但是很多公司开工之后,在同事身上都或多或少的出现了一些“开工综合症”,如疲劳困乏、无心工作、精神状态不佳等,这就属于典型的节后综合症......
  • Revit二次开发之获取墙体立面轮廓 (未剪切、连接状态)
    大家都知道,我们从Element.Geometry中获取的都是被剪切、连接之后的几何实体了,那么,如果我们想获取墙体被其他柱、墙、楼板、门窗剪切、连接之前的几何轮廓呢?通过ExporterI......
  • 使用nvm实现自由切换nodejs版本
    首先安装使用nvm前需要删除卸载干净!!!可以去GitHub安装最新的版本:https://github.com/nvm-sh/nvm或者直接下载Windows的releases版本安装:https://github.com/coreybutler/......
  • PHY状态机分析
    PHY的12种状态enumphy_state{ PHY_DOWN=0,//关闭网卡 PHY_STARTING,//PHY设备准备好了,PHYdriver尚为准备好 PHY_READY,//PHY设备注册成功 PHY_PENDING,......