锐捷核心N18K VSU分裂导致业务中断

一、故障现象

业务高峰期,宿舍网核心N18012设备无故重启,业务中断18-20分钟后自行恢复。

二、组网拓扑

拓扑描述:
两台N18012作为宿舍网核心, 使用VSU方式组网对上双链路静态聚合方式分别对接华为核心和锐捷出口路由器,对下双链路静态聚合方式连接各个宿舍楼的汇聚交换机,整体拓扑全部双链路冗余部署,VSU拓扑之间连接关系如下:
拓扑中VSL和BFD的工作机制如下:
  1. 正常组建VSU的场景,初始状态多为优先级高的为主,也不排除因人为手动切换原因将备机作为主机运行的情况,当前版本还不支持简单show命令查看重启或上一次主机状态的命令,只能根据syslog日志分析推断来辅助推断。
  2. hellow报文保活:VSU的各成员之间通过VSL链路(如上图的Hu4/12和Hu5/12口)交互VSU hellow报文,报文携带的关键信息有:备机成员编号、设备优先级、MAC信息和VSU端口成员关系等,每个成员会在非入口(排源原则)且状态UP的VSL链路口上泛洪hellow报文。
  3. 双主形成:成员5分钟未收到对方发送的hellow报文将会形成双主,双主后一旦收到hellow报文,按合并原则竞选(不同版本可能有所差异,具体参考配置手册),进而高优先的选举为主,备机因为竞选失败会自动复位重启。
  4. BFD检测:VSL链路(如上图Hu4/12和Hu5/12)全部断开后,两台交换机通过BFD链路(如上图Hu5/11)发送检测报文,收到对端发来的双主检测报文,说明对端设备处于正常运行状态即存在双主现象,此时会将优先级低的一方置为recovery状态,并将该设备除VSL和例外口的所有端口置为BLOCK状态,当VSL链路恢复后,recovery状态的设备将自动重启并加入到VSU系统中来。

三、可能原因

  1. VSL链路和BFD链路的物理端口或板卡同时故障;
  2. 原有主机主引擎故障导致VSL和BFD保活报文通信异常;
  3. 设备内存异常,引发协议转发异常;

四、处理步骤

步骤一:检查两台交换机起机状态,确认是某台设备单机重启还是两台设备整机重启。

  1. 通过show version查看发现设备启机时间为非业务中断时间(中断时间为23年10月30日 23:55分左右),排除整机重启的可能:如下图所示,系统启机时间与故障时间不一致,由此排除整机重启的可能。
  1. (前提假设高优先的设备在故障前为主设备)因当前版本不支持分开看每台设备的起机时间,随机找一个同时有主备机成员端口的聚合口,show interface+端口号查看成员端口运行时间,辅助判断是主机重启还是备机重启:如下图备机端口运行时间大于主机端口运行时间,且主机端口的最后变化时间与断网时间相吻合,由此判断高优先级的设备有进行整机重启。
  1. 为了辅助判断第2步骤高优先级的重启的可能性,收集该N18012备机上下联设备的日志,发现故障时间节点确实有看到与N18012互联的端口发生了UP/DOWN的日志,由此辅助判断高优先级的设备有进行整机重启的动作。

步骤二:确定主机重启的原因,并确认是否存在VSU分裂情况

在步骤一的基础上初步判断高优先级(极有可能是主机)进行自动重启,收集主备机的dmesg、DM和syslog日志分析排查发现:
  1. 故障时低优先级的2机有发现VSL链路协商超时,2机VSL协商超时同时没有进行自我重启,说明BFD检测超时低优先级的没有被置为recovery状态,即BFD通路存在了异常。
  1. 上图中有看到1机M2引擎发现角色丢失且未发现M1引擎的角色变换日志,同时2机的主备引擎同时分别升级为master和backup,说明整个VSU系统对端机箱的引擎角色丢失且只有当前2机箱自己工作正常,对端设备不在位。
  2. 查看1机箱exception和相关DM日志发现1/M1引擎因为无内存进行了引擎板卡自重启,此时1/M2检测1/M1不在位将自己升级为主,结合之前2机箱的2/M1已经升级为主,此时1/M2也升级为主,两台引擎角色前后都升级为主,说明VSU系统故障前1机为主且1/M1为master,当前确实发生了双主分裂。
  1. 1/M1的详细复位原因为:LMK(low memory kill)在内存低于364297KB,大约2%时,就会尝试将系统中使用内存最高的进程做重启,达到释放内存,如下图所示,系统的SSC进程同时处于不可中断的D状态,即无法按预期进行内存释放,最终导致引擎内存耗尽,自动复位修复处理。
  1. 1/M2升级为主检测到1/M1心跳超时,计划复位1/M1,复位1/M1过程发现非实时热备,继而将整机复位重启,此时即使有心跳超时关键日志,也不能做为引擎内存故障的判断依据,也可能存在系统进程内存异常引发内存耗尽的情况,为排除该引擎隐患,将板卡更换并在高峰期进行业务观察。

步骤三:确定主机内存耗尽的原因。

  1. 研发内部环境复现,同时客户业务高峰期进行内存检测,发现更换1/M1后系统的内存还存在逐步飙升的现象,7万个MAC终端场景在业务高峰期设备的内存会以每10s增加0.4%左右的内存,大约20分钟后,设备就会出现内存耗尽,VSU分裂情况,继而引发二次业务中断。
  1. VSL链路协商超时,主备机再次发生分裂:
  1. 接着设备出现短暂通信正常,触发双主检测,高优先级的1机箱的1/M1选举为msater,2机箱因为BFD检测进入recovery状态,等待VSL链路重新UP后2即自动复位重启,热加入到VSU系统中。

五、故障原因总结

结合研发内部故障复现场景分析:N18012当前引擎的线程设计属于单线程,引擎流量处理线程除了处理流量消息通告外,还处理因用户认证上下线或认证迁移过程中产生变化的用户流表的消息。大容量(7W用户加多张线卡)场景业务高峰期,N18012的引擎每10s要发送信息判断各线卡每块转发芯片上所有终端流量是否有在线信息,单线程设计没有办法并行处理流量消息或上下线消息,只能等前一个消息处理完再处理下一个消息。信息量过大引擎处理性能跟不上,导致消息积压,最终引发引擎内存耗尽,出现引擎自复位或VSU协议分裂等情况,造成业务中断的问题。
引擎端流量在线信息处理同3个因素有关:
  1. 线卡数量:每张线卡上交换芯片的数量:其中EH卡有3个交换芯片,16XS2QXS-ED有2个交换芯片,其他板卡都是1个交换芯片。
  2. 在线用户MAC终端数
  3. 用户上下线或迁移的数量
      其中线卡数量*交换芯片数量*在线用户数量等于整个引擎下的基本流量消息数。每增加1张线卡,就相当于增加在线用户数的消息量。

六、信息收集

  小锐云服VSU故障诊断和设备管理异常脚本,关键命令有:
  show clock
  show run
  show version
  show version slots
  sh memory history
  show switch virtual config show switch virtual role show switch virtual link show switch virtual topology
  debug support //11.X封shell
  execute diagnose-cmd hardware <dev> <slot> dmesg
  execute diagnose-cmd hardware <dev> <slot> dir /data/syslog*
  execute diagnose-cmd hardware <dev> <slot> more /data/.reboot_msg
  execute diagnose-cmd hardware <dev> <slot> more /data/.reboot_cmsg
  execute diagnose-cmd hardware <dev> <slot> more /rgos/vsd/0/dev/dcm/* :reload
  execute diagnose-cmd hardware <dev> <slot> more /rgos/vsd/0/dev/dcm/* :abort
  execute diagnose-cmd hardware <dev> <slot> more /rgos/vsd/0/dev/reset_history/*
  execute diagnose-cmd hardware <dev> <slot> more /data/.ham_notify
  execute diagnose-cmd hardware <dev> <slot> dir /rgos/vsd/0/dev/
  execute diagnose-cmd hardware <dev> <slot> more /rgos/vsd/0/dev/dp* 如果无回显,单独一个文件一个文件more出来。

七、总结与建议

VSU故障排查中需注意以下几点:
  1. hardware heartbeat timeout心跳超时不一定是硬件故障,需要进一步判断是否有软件的可能,无法进一步判断软硬件问题的,业务重要可以考虑更换疑似故障引擎替换排查,但后续务必最好业务跟踪和监护。
  2. 交换机日志有丢失的情况,VSU分裂是否有设备重启可以结合上下行设备故障时间点的日志辅助判断。
阅读剩余
THE END