现场问题排查记录:
现场反映的问题,每天早上会有部分用户正常认证成功,但是第三方无上线信息,导致无法访问外网。
其它模块日志排查发现:模块A没有将认证成功的信息通过模块B转发到模块C让其处理,导致用户没有无法上网(逻辑:模块B转发成功,模块C处理完可以上网,转发不成功无法访问外网)
现场服务是主备模式的。
现在我们去查看负责转发的模块B的日志,发现备机的转发模块B每隔四小时和主机的其他所有模块(模块A)断开连接一次,每次持续几分钟,几分钟后重新建立连接。
在断开连接的时间点如早上9点,部分用户认证虽然成功,但是这时候转发模块B和其它所有模块断开连接了,导致转发模块B不能将信息发出去通知其他模块(模块C),结果是无法上网。
所以怀疑是网络问题,让现场同事在断开连接的时间点在备机一直ping主机
ping x.x.x.9 | awk ‘{ print $0"\t" strftime(“%Y-%m-%d %H:%M:%S”,systime()); fflush()}’ >> outIP.info &
发现在断连时间点到来之前ping主机的回包都是正常的,但是断开连接的时间点主机回包都是dup ack,过了几分钟回包又正常,符合现场的现象
于是又在下一次时间间隔的时候抓了一次包
如下图,断网时间点,主机其他模块往备机模块B发包是rst包(主机.9发包到备机.10),再看这之前的主机发的包都是正常的,和这些rst包对比。发现主机发的包的mac信息发生了变化,两个不同的mac(主机虽然是多网卡,但是另一个网卡的mac地址也不是抓包看到的mac),说实话这个信息差点就漏掉了,还好后面不死心又看了一次抓包信息。下图已经标出差别
大部分时间内服务都是好好的,但是每隔四小时后的十分钟内,主机发了rst包给备机并且这个包携带的信息可以知道主机mac地址变了。
对于这种间隔时间mac地址变化的情况,现场同事的解决方法是:通过arp静态绑定这种方式解决( 在mac地址变化的机器上执行arp -s ip mac进行ip和mac的绑定),现场持续观察,间隔四小时并没有出现断连的情况(根据日志以及抓包),问题解决。