错误的OSPF vlink LSA导致NE80设备路由频繁振荡CPU高

发布时间:  2009-02-24 浏览次数:  116 下载次数:  1
问题描述
      某运营商城域网核心层由4台NE80组成,NE80-1和NE80-2在一个平面,NE80-3和NE80-4位于另一个平面,下挂设备有的双归到NE80-1和NE80-2,有的双归到NE80-3和NE80-4。全网运行OSPF协议,4台NE80位于area 0区域,NE80-1和NE80-2下挂设备位于区域area 20或area 30,NE80-3和NE80-4下挂设备位于区域area 40或area 50。这4台NE80都是V5版本(V3R2)。
      NE80-1的loopback接口地址是172.13.19.24
      NE80-2的loopback接口地址是172.13.19.23
      NE80-3的loopback接口地址是172.13.19.22
      NE80-4的loopback接口地址是172.13.19.21
      1月24日,客户反馈NE80-1、NE80-2的CPU忽高忽低,而另一个平面的NE80-3和NE80-4的CPU一直稳定在20%左右。
CPU高主要体现在ROUT路由进程占用CPU高,而且NE80-1的CPU有时会在一段时间内持续100%,导致其上的多个OSPF邻居中断,邻居中断后需要很长时间才能重新建立成功。
如下是NE80-1上的故障现象:
disp cpu看到ROUT进程高:
<NE80-1>disp cpu
CPU Usage Stat. Cycle: 21 (Second)
CPU Usage            : 61% Max: 100%
disp ip rou st查看ospf路由总数快速变化,通过对比2次采集之间的差值发现:
<NE80-1>disp ip rou st
Proto   total   original active  original added       deleted     freed
        routes  routes   routes  active   routes      routes      routes
DIRECT  97      97       97      97       115         18          18          
STATIC  43      43       41      41       56          13          13          
RIP     0       0        0       0        0           0           0           
OSPF    17089   17089    16812   16812    5002252     4985163     4985163     
IS-IS   0       0        0       0        0           0           0           
BGP     0       0        0       0        0           0           0           
Total   17229   17229    16950   16950    5002423     4985194     4985194     
<NE80-1>disp ip rou st
Proto   total   original active  original added       deleted     freed
        routes  routes   routes  active   routes      routes      routes
DIRECT  97      97       97      97       115         18          18          
STATIC  43      43       41      41       56          13          13          
RIP     0       0        0       0        0           0           0           
OSPF    15680   15680    15633   15633    5002328     4986648     4985355     
IS-IS   0       0        0       0        0           0           0           
BGP     0       0        0       0        0           0           0           
Total   15820   15820    15771   15771    5002499     4986679     4985386

如下是NE80-1上的故障现象:
disp cpu看到ROUT进程高:
<NE80-1>disp cpu
CPU Usage Stat. Cycle: 21 (Second)
CPU Usage            : 61% Max: 100%
CPU Usage Stat. Time : 2009-01-22  09:25:27
CPU Usage Stat. Tick : 0xbc(CPU Tick High) 0x38012aeb(CPU Tick Low)
Actual Stat. Cycle   : 0x0(CPU Tick High) 0x205b250e(CPU Tick Low)
TaskName        CPU        Runtime(CPU Tick High/CPU Tick Low)
VIDL            39%               0/ cec3fab
TICK             0%               0/  27f1be
IPCR             0%               0/  13df96
IPCQ             0%               0/   4edcd
 VPR             3%               0/ 114d77a
......
ROUT            50%               0/104fedd8
disp ospf lsdb看到大量Age为3600秒的路由,起初怀疑是路由震荡引起,但仔细分析3600秒的路由都是本路由器生成的(NE80-1的Router ID是172.13.19.24)3类LSA,3类LSA一般是不会震荡的,所以很有可能是NE80-1在频繁的进行OSPF计算。
<NE80-1>disp ospf lsdb
 OSPF Process 1 with Router ID 172.13.19.24
 Link State Database
Type      LinkState ID    AdvRouter          Age  Len   Sequence   Metric
Sum-Net   172.13.19.63   172.13.19.24     3600  28    80000024    1007
 Sum-Net   172.13.19.63   172.13.19.23       32  28    80000007    1007
 Sum-Net   172.13.19.62   172.13.19.24     3600  28    80000024    1007
 Sum-Net   172.13.19.62   172.13.19.23       32  28    80000007    1007
 Sum-Net   172.13.19.57   172.13.19.24       21  28    80000004    3201
 Sum-Net   172.13.19.57   172.13.19.23       32  28    80000002    3201
 Sum-Net   172.13.19.56   172.13.19.24     3600  28    80000022    1007
 Sum-Net   172.13.19.56   172.13.19.23       32  28    80000007    1007
 Sum-Net   172.13.19.59   172.13.19.24     3600  28    80000022    1007
 Sum-Net   172.13.19.59   172.13.19.23       32  28    80000007    1007
 Sum-Net   172.13.19.58   172.13.19.24       21  28    80000004    3201
 Sum-Net   172.13.19.58   172.13.19.23       32  28    80000002    3201
 Sum-Net   172.13.19.53   172.13.19.24     3600  28    80000022    1007
 Sum-Net   172.13.19.53   172.13.19.23       32  28    80000007    1007
 Sum-Net   172.13.19.52   172.13.19.24     3600  28    80000022    1007
 Sum-Net   172.13.19.52   172.13.19.23       32  28    80000007    1007
 Sum-Net   172.13.19.55   172.13.19.24     3600  28    80000022    1007
 Sum-Net   172.13.19.55   172.13.19.23       32  28    80000007    1007
 Sum-Net   172.13.19.54   172.13.19.24     3600  28    80000022    1007
 Sum-Net   172.13.19.54   172.13.19.23       32  28    80000007    1007
 Sum-Net   172.13.19.12   172.13.19.24     3600  28    80000023    1016
 Sum-Net   172.13.19.12   172.13.19.23       32  28    80000007    1016
 Sum-Net   172.13.19.15   172.13.19.24     3600  28    80000003    1016
 Sum-Net   172.13.19.15   172.13.19.23       32  28    80000007    1016
 Sum-Net   172.13.19.14   172.13.19.24     3600  28    80000003    1016
 Sum-Net   172.13.19.14   172.13.19.23       32  28    80000007    1016
 Sum-Net   172.13.19.11   172.13.19.24     3600  28    80000023    1016
 Sum-Net   172.13.19.11   172.13.19.23       32  28    80000007    1016
 Sum-Net   172.13.19.5    172.13.19.24     3600  28    80000023    1016
 Sum-Net   172.13.19.5    172.13.19.23       32  28    80000007    1016
处理过程
     一般情况下,稳定的网络路由计算的频率是很低的。
     1、触发Intra Full路由计算的条件是Router-LSA、Network-LSA发生了改变或者有虚连接邻居。为此,我们对比了两个晚上显示的Router-LSA和Network-LSA信息,发现这两类LSA没有改变,因此其也就不会触发路由计算。因为没有配置Vlink,也就没有向Vlink这方面考虑。
     2、在定位工作陷入僵局的时候,我们转换思路,考虑是否因为其它原因导致的路由频繁震荡。唯一剩下的可能就是Vlink了,为此,通过display ospf brief命令查看,果然发现NE80-1的区域20为Transit区域,这就说明导致频繁路由计算的原因是传输区导致的。
<NE80-1>dis ospf b
          OSPF Process 1 with Router ID 172.13.19.24
                  OSPF Protocol Information                                            
Area: 0.0.0.20         (MPLS TE not enabled)
    Authtype: None   Area flag: Transit
    SPF scheduled Count: 50265
 ExChange/Loading Neighbors: 0   
   
<NE80-2>dis ospf b
          OSPF Process 1 with Router ID 172.13.19.23
                  OSPF Protocol Information                                             
Area: 0.0.0.20         (MPLS TE not enabled)
 Authtype: None   Area flag: Transit
 SPF scheduled Count: 62979
 ExChange/Loading Neighbors: 0
      3、区域20为什么置为Transit区域呢?在NE80-1上输入display ospf lsdb router,查看果然有一个Router id为172.13.19.17的Router-LSA的标志置为VIRTUAL。问题的根源终于找到了,即NE80-1和NE80-2在区域20收到Router ID为172.13.19.17的路由器发布带有V标志的Router LSA(如下Options位的VIRTUAL标志)。
   Type      : Router                                                          
    Ls id     : 172.13.19.17                                                   
    Adv rtr   : 172.13.19.17                                                   
    Ls age    : 1312                                                            
    Len       : 60                                                              
    Options   :  ASBR  VIRTUAL  E                                               
    seq#      : 8000d4b2                                                        
    chksum    : 0xa088                                                          
    Link count: 3                                                               
      通过分析区域20的每个Router-LSA发现,仅仅172.13.19.17有V标志,是不合适的,因为RFC2328规定,当且仅当有Full的Vlink邻居时,才能置上V标志。一个区域内仅有一个router-LSA置V标记,说明没有Full的Vlink邻居。见RFC2328(Page 128),此外,当且仅当路由器配置的一条或多条以区域A为传输区域的虚拟通道达到完全邻接时,要在区域A的Router-LSA中设置V位。V位的设定使得区域中的其他路由器能够发现该区域是否支持transit流量(见第6章中的TransitCapability)。
     4、由于网络中Summary-LSA数量比较多,老化或者刷新LSA较频繁。在NE80-1和NE80-2上,当收到区域20的Summary-LSA时,因为存在骨干区域,如果区域20是普通区域,无需进行路由计算;但如果是传输区域,根据RFC2328(P176)规定,“Case 2:区域A是传输区域,并且路由器是边界路由器,首先进行增量更新,即接收到新的Summary-LSA时,不必重新计算整个路由表。但如果计算的结果导致了到达N距离的增加,必须按第16.1节的描述重新执行Dijkstra算法以计算完整的路由表。如果计算后,到达一台ASBR,或转发地址的路径或距离发生了改变(这时为类型4的Summary-LSA),必须重新执行第16.4节的计算,以再次检查所有的AS-external-LSA。否则,如果N变为不可达,必须单独为目标N重新运行第16.4节的计算,以发现是否有到达N的其他外部路径。”
      综合起来,NE80-1和NE80-2 CPU高的原因是因为OSPF在频繁进行路由计算。而导致路由频繁计算的根源是NE80-1和NE80-2下挂的一台路由器(Router ID为172.13.19.17,位于区域area 20)错误发布了带有V标志的Router-LSA。
根因

NE80-1和NE80-2 CPU高的原因是因为OSPF在频繁进行路由计算。而导致路由频繁计算的根源是NE80-1和NE80-2下挂的一台路由器(Router ID为172.13.19.17,位于区域area 20)错误发布了带有V标志的Router-LSA。

解决方案
经和客户核实,Router id为172.13.19.17的路由器配置了到NE80-1、NE80-2的Vlink,但没有Full,该配置属于无效配置。协调客户删除这台路由器上的vlink配置后,NE80-1和NE80-2的CPU随即恢复到正常水平,路由也不再大范围的频繁的振荡,至此问题解决。
建议与总结
路由振荡问题快速定位方法:
一般来说,路由任务占用CPU过高,且居高不下,基本上是路由振荡导致频繁路由计算引起的。所以,首先需要确定振荡源,找到振荡源,问题基本上就可以解决了。
查找振荡源首先需要确定Router LSA和Network LSA,这两类LSA的改变会触发完全路由计算。这两类LSA可以通过比较一定时间间隔内的Sequence number、查看是否频繁刷新、是否有这两类的LSA振荡等方式判断。
另一类特殊的情况是虚连接的场景,也就是本问题的场景:
RFC2328规定,骨干区域不能被分割,为了建立/维持骨干区域的连通性,可以在非骨干区域配置虚连接。虚连接被视为属于骨干区域内,连接两台ABR的无编号点对点网络。在虚连接上会试图建立邻接。当邻接建立后(UP),在骨干区域的Router-LSA会包含虚连接,并置V标志,属于骨干区域的OSPF包也会被传送到邻接。这种邻接称为“虚拟邻接”。
在Vlink配置正确,虚拟邻居Full后,才可以将Router-LSA置上V标志,有了V标志的Router-LSA,路由计算时才可以将区域设置为传输区域,传输区域往往有一些特殊的处理。
1、查看Vlink配置
通过命令display current-configuration configuration ospf查看OSPF配置,区域有无配置Vlink。可在配置信息中查找“vlink-peer”。
2、查看Vlink是否生效
通过命令display ospf vlink查看Neighbor-State和Transit Area等项。邻居状态为Full,Vlink才会生效。
3、查看区域类型
通过display ospf brief,查看是否有区域为Transit类型。查看每个区域的Area flag项,若是传输区域,显示为“Transit”。
4、查看Router-LSA的选项字段
通过命令display ospf lsdb router查看所有Router-LSA的详细信息,查看“Options”项,是否包含“VIRTUAL”。包含的话,通过“Adv rtr”项(Router ID)找到产生此Router-LSA的路由器,可查看其Vlink的虚拟邻居是否为Full。
由于Vlink必须成对配置,说仅发现有一个Router-LSA包含“VIRTUAL”标志,肯定是存在问题的。

END