ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 因为arp 问题导致的vip 故障与解决方案

因为arp 问题导致的vip 故障与解决方案

原创 Linux操作系统 作者:babyyellow 时间:2014-06-13 15:07:38 0 删除 编辑
这几天进行了关于vip 方面的检测的 测试,

遇到了一个奇怪的问题,vip 服务正常,数据库可以通过vip访问,但是从库在ping vip 的时候,却告警ping 不通,

出现的次数也不多,每天有2,3次的样子,检测过程经过了容错包装,也不至于会导致系统误切换。

但是还是搞清楚,心里才踏实。 

联合网络做了些分析: 

经过查看当时的日志还是发现了一些端倪的: 

从机会通过arping 去确认vip 是否存活, 然后我们就在这里发现了问题了。 


这套设备是启动了双网卡的,一个工作网络,一个是心跳网络

最后发现 在ping 之前发出的那个arp 相应包,是不是工作网卡的mac 地址

而是心跳 网卡的mac 地址

然后ping 完后,就变工作网卡的mac 地址了。 



在网络同事的帮助下,分析了原因: 


默认情况,linux 的arp 响应是出在混杂模式的, 
主机默认是开启arp 混杂模式的,
就说这台机器上如果有多个网卡启动,那么在混杂模式下,我这个网卡收到arp 询问的时候,如果如果这台机器上配置了对应的ip 但不是配置我当前的网卡上,那么这个网卡还是可能会响应arp 询问包,把自己的arp 回给对方。

这个情况下,就导致对方询问的arp 不是目标ip 所在的网卡。 

从日志里也得到了证实, 我们从库会通过arp 广播来确定确定vip 是否在运行,这个时候某些情况下,我们接受的arp 回应是主库的另外一个网卡的arp 不是vip 所在网卡的arp ,在接下来的ping 的检测,因为在不同的网段,arp 表中标记的arp 跟vip 不在同一个子网里,导致ping 不通。


这样就解释的通,为什么ping 不同vip 

解决方案: 
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2


这两个参数写到/etc/sysctl.conf 里面 


怎么生效,就不说了吧?

sysctl  -p 后 

是需要重启网卡生效的 



一般情况下都不太可能用到这种混杂模式的,所以在装机的就处理掉最好,免得梦多。 


祝玩得愉快!!



来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/133735/viewspace-1182301/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
oracle MySQL Postgresql 专职数据库dba。 系统架构师。 mysql 官方认知dba 。 15年专职dba 经验。 潜意识沟通实证者 心理咨询师。 禅修布道者, 禅修指导员。 禅定实证者。

注册时间:2010-12-02

  • 博文量
    367
  • 访问量
    1908872