keepalived故障
背景说明
三个 keepalived 服务组成一个高可用环境。风和日丽的下午突然通知某个生产环境 vip 不通,使用承载 vip 的主机测试服务是正常。进而推断 keepalived 导致的问题。。。
三个主机IP地址分别是:x.x.3.17
、 x.x.3.18
、x.x.3.19
。
VIP地址是: x.x.3.20
,该地址绑定在 x.x.3.18
主机上
排查过程
-
三台主机
ping VIP
,有个两台主机不通(x.x.3.17
,x.x.3.19
),只有一台(x.x.3.18
)承载VIP主机正常 -
三台主机查看防火墙都是没有问题的
-
(
x.x.3.17
,x.x.3.19
)主机查看arp -n | grep VIP
arp缓存表。发现vip对应的mac地址(x.x.3.19
主机)不对。这个mac所在主机是没有 VIP 地址的,所以ping vip
不通 -
(
x.x.3.17
,x.x.3.19
)主机删除arp缓存表arp -d VIP
,抓包显示很快x.x.3.19
主机回包 -
再次查看
arp -n | grep VIP
,发现还是没有学习到正确的mac。 -
【临时修复方法】手工设置arp缓存表
arp -s x.x.3.20 fa:16:3e:09:c8:8c
-
推测与(主机\交换机)有关,后续找主机同事一起排查。主机是openstack虚拟机,从宿主机上面看到
VIP
绑定在x.x.3.19
主机上 -
重启keepalived恢复正常。基本上确认了,
Free arp
包在底层没有收到引起 vip 还记录在旧主上。 -
主机同事反馈 keepalived 服务建议设置上
grap_master_delay
和garp_master_refresh
参数。持续发生Free arp
包
测试参数
说明: 测试主机不是生产环境的,所以IP地址不一致
grap_master_delay
和 garp_master_refresh
参数配置在 vrrp_instance
配置下添加。配置示例
-
keepalived不含上述两个参数测试结果 切换vip后有发free arp包,后续没有继续发
-
keepalived含上述两个参数测试结果 切换vip后有发free arp包,后续继续发free arp数据包
测试结果:配置上两个参数会持续发送free arp包的
扩展知识
抓arp协议的数据包命令
sudo tcpdump -enn -vvv -i 【网卡名称】 'host 【VIP地址】 and arp' or vrrp
注意:
'host 【VIP地址】 and arp'
:指定IP地址抓包 arp 协议,上报免费arp数据包(申报自己是主节点);vrrp
:抓 vrrp 协议数据包(keepalvied心跳检测)- 当有 and 和 or 条件时,应先写 and 条件再写 or 条件
手工设置arp缓存表
# arp 命令
sudo arp -s VIP地址 承载VIP网卡对应mac地址
# ip 命令
## 替换mac地址
sudo ip neigh add 【VIP地址】 lladdr 【承载VIP网卡对应mac地址】 dev 【网卡名称】
## 新增ip缓存的mac地址
sudo ip neigh replace 【VIP地址】 lladdr 【承载VIP网卡对应mac地址】 dev 【网卡名称】
说明:arp缓存表中
Flags Mask
字段为CM
则说明手工设置的mac地址,如果是C
则说明学习到的mac地址
说明:最后一个字段为
REACHABLE
为服务器学习到的mac地址,如果是PERMANENT
则为手工设置的mac地址
过滤 Free arp
数据包
arp.isgratuitous
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具