解决方案
GR(Graceful Restart,平滑重启)是种冗余容错技术,目前已经被广泛地使用在主备切换和系统升级方面,以保证关键业务的不间断转发。
补充说明:重启是指 OSPF 进程的重启,并非物理设备的重启。
原理简述
OSPF 通过新增 Grace-LSA(LSA-T9)来支持 GR 功能。这种 LSA 用于在开始 GR 和退出 GR 时向邻居通告 GR 的时间、原因、接口地址等内容。即,通过协议的方式告知邻居,以让邻居提前准备。
特性特征
通过 GR 技术,在设备重启过程中:
1)保证转发层面能够继续指导数据的转发,
2)同时控制层面邻居关系的重建、路由计算等动作不会影响转发层面的功能,
3)从而避免了路由振荡引发的业务中断,保证关键业务的数据转发,提高整网的可靠性;
在实际应用中,为了实现业务转发不受主板故障的影响,通常在双主板的硬件环境下配置 OSPF GR 才有意义。
概念术语
平滑重启的分类
完全 GR(Totally GR):指当有一个邻居不支持 GR 时,则整个路由器退出 GR 状态;
部分 GR(Partial GR):指当有一个邻居不支持 GR 时,则仅关联该邻居的接口退出 GR,路由器的其它接口正常进行 GR 过程;
有计划 GR(Planned GR):指手动通过命令使路由器执行重启或主备倒换。在进行重启或主备倒换前,Restarter 会先发送 Grace-LSA 进行 GR 协商;
非计划 GR(UnPlanned GR):与 Planned GR 的区别在于,路由器是由于故障等原因进行重启或主备倒换,并且在重启或主备倒换前不会事先发送 Grace-LSA,而是直接开始主备倒换,在备板正常 Up 后才进入 GR 过程,而后的步骤同 Planned GR;
角色及功能
GR Restarter:
GR 重启路由器,指由管理员或故障触发而协议重启的设备,它需要具备 GR 能力。
可以通过配置支持 Totally-GR 或 Partial-GR;
GR Helper:
协助重启路由器,即 GR Restarter 的邻居,能协助重启的 GR Restarter 保持路由关系的稳定,它也需要具备 GR 能力;
可以通过配置支持 Planned-GR、UnPlanned-GR,或通过策略有选择支持 GR;
GR Session:
GR 会话,是 GR Restarter 和 GR Helper 间的能力协商过程,包括协议重启通告,协议重启过程中的信息交互等。
通过该会话,GR Restarter 和 GR Helper 可以掌握彼此的 GR 能力。
GR 的持续时间:
GR 持续时间最长不超过 1800 秒。
GR 成功或失败都可以提前退出,不必等到超时才退出。
协商过程
针对 GR-Restarter 设备
对于 Planned GR,当 Restarter 通过命令行执行主备倒换后,Restarter 会首先向每个邻居发送一个 Grace-LSA 通知邻居 GR 的周期、原因等,然后进行主备倒换。这样将避免因备板 Up 时间过长导致的邻居关系中断从而 GR 失败的情况。
当备板正常 Up 后,Router 会通知路由管理模块(Routing Management Module,RM)进入 GR 过程。当备板恢复之前使能 OSPF 的接口后,马上发送一个 Grace-LSA,通知邻居自己进入 GR,然后会再向每个邻居连续发送 5 个 Grace-LSA(以确保邻居收到该 Grace-LSA;取决厂商实现,非协议规定)。路由器并不老化 FIB 表项,所以此时可以正常通信。如果不支持 GR,Router 会直接老化 FIB 表项,造成路由中断,路由器会进行正常重启(非GR过程)。此时发送的 Grace-LSA 是为了告知邻居自己进入 GR 状态,邻居会在 GR 期间保持与 GR-Restarter 的邻居关系,让其它路由器感知不到 Restarter 的倒换。
Restarter 与邻居协商进入标准的邻接关系建立过程。邻居状态机变化过程为:Down→Init→Exstart,然后进行 DD 报文的交换,完成数据库的同步。在进行LSAs 的更新时,如果发现 Helper 发来的 LSAs(LSA-T1 和 LSA-T2)中没有包含指向自己的链路,说明网络拓扑变化或邻居不支持 Helper 模式,则 GR 失败,退出 GR,进行正常重启。
每当与一个邻居达到 Full 状态后就进行路由计算,更新路由器的路由表,但并不马上更新 FIB 表项。
如果 GR 定时器超时,则 GR 失败,退出 GR,进行正常重启。
检查是否和所有邻居都达到 Full 状态,如果满足,泛洪(即发送 LSA age 为 3600 秒)所有的 Grace-LSAs;
正常退出 GR。重新向所在的所有区域产生 Router-LSA;如果某些接口是 DR,则在这些网段重新产生 Network-LSA;重新计算路由,将计算结果下发到路由表中。路由器更新 FIB 并删除失效的路由表项。
针对 GR-Helper 设备
GR-Helper 收到 GR-Restarter 发送的 Grace-LSA 后:
1)如果与 GR-Restarter 交互的 LSA 没有变化并且通过过滤策略检查,则进入 Helper 模式。
2)如果网络拓扑改变、收到的 Grace-LSA 已老化或者本身处于 Restarter 状态,均不能进入 Helper 模式。
GR-Helper 向 GR-Restarter 继续发送 Hello 报文,即保持自己与邻居邻接状态不变。此时 GR-Restarter 邻居状态机达到 Exstart 状态,所以会和 Helper 同步 LSDB。在交换 DD 报文时,Helper 收到 Restarter 发来的 DD 报文会产生 SeqMismatch 事件,因为正常 Full 状态时是不会收到 DD 报文的。Helper 的邻居状态机由 Full 降为 Exstart 状态,开始交换 DD 报文并同步LSDB。因为 Restarter 的 DD 报文没有完整的 LSA 而 Helper 具有完整的 LSAs,所以 Helper 的邻居状态机很快经历了下面的状态变化:Exstart→Exchange→Full。Helper 发送自己的 LSAs 同步给 Restarter,如果继续收到包含不同 GR 周期的 Grace-LSA,路由器仅更新平滑重启的周期。
如果 GR 定时器超时,那么退出 Helper 模式。
当 Helper 端最后收到泛洪的 Grace-LSAs 后表明 GR 完成,正常退出 Helper;
Helper 在与 Restarter 连接的网段上重新产生 Router-LSA;如果 Helper 本身是 DR,产生 Network-LSA;
相关疑问
Q:进行主备到换,是否会导致 LSAck 无法接收?
A:接收报文是转发平面的工作,而主备到换是控制平面的主备到换。
常见退出原因
如果 GR 退出,则可能原因如下:
当 GR 成功后,退出
针对 GR Restarter 设备,Restarter 在 GR 超时前与主备倒换前的所有邻居都重新建立好邻居关系。
针对 GR Helper 设备,收到 Restarter 发送的 Age==3600s 的 Grace-LSA 时与 Restarter 的邻居关系为 Full 状态。
当 GR 失败后,退出
针对 GR Restarter 设备:
GR超时并且邻居关系尚未完全恢复。
Helper发送的Router-LSA或Network-LSA导致Restarter端进行双向检查时失败。
Restarter接口状态变化。
Restarter收到同一网段上另一台路由器产生的Grace-LSA。同一网段同一时间只能有一台路由器做GR。
Restarter同一个网段的邻居之间存在DR/BDR不一致的情况(即拓扑变化)。
针对 GR Helper 设备:
在邻居关系超时前没有收到Restarter发送的Grace-LSA。
Helper接口状态发生变化。
收到其它路由器发送的与Helper本地数据库不一致的LSA。(可以通过配置不进行严格LSA检查排除这种情况。)
同一网段上同一时间收到两台路由器发送的Grace-LSA。
与其它路由器邻居关系变化。
配置案例
前置要求
在配置OSPF GR特性之前,需完成以下任务:
配置接口的网络层地址,使相邻节点之间网络层可达。
配置OSPF的基本功能。
配置命令
使能opaque-LSA特性。 [Huawei-ospf-1] opaque-capability enable 使能opaque-lsa能力,从而OSPF进程可以生成Opaque LSA,并能从邻居设备接收Opaque LSA。(因为OSPF中通过Type9 LSA对OSPF GR支持,所以需要先使能OSPF的opauqe-LSA特性。) Restarter端使能OSPF GR特性,并配置Restarter端GR的会话参数。 [Huawei-ospf-1] graceful-restart [ period period | planned-only | partial ] period period:指定平滑重启的周期。整数形式,取值范围是1~1800,单位是秒。缺省值是120秒。 planned-only:指定路由器仅支持Planned GR。缺省情况下,路由器支持Planned GR和Unplanned GR。 partial:指定路由器支持Partial GR。缺省情况下,路由器支持Totally GR。 (可选)配置设备平滑重启Helper模式,并配置Helper端GR的会话参数。 [Huawei-ospf-1] graceful-restart [ period period | partial | planned-only ] * helper-role { { [ ip-prefix ip-prefix-name | acl-number acl-number | acl-name acl-name ] | ignore-external-lsa | planned-only } * | never } period period:指定GR的周期。整数形式,取值范围是1~1800,单位是秒。缺省值是120秒。 planned-only:指定设备仅支持Planned GR。缺省情况下,设备支持Planned GR和Unplanned GR。 partial:指定设备支持Partial GR。缺省情况下,设备支持Totally GR。 ip-prefix ip-prefix-name:地址前缀列表名称。 acl-number acl-number:基本访问控制列表号。ACL参数用来配置过滤策略,只有通过过滤器策略后才能进入Helper模式。 acl-name acl-name:指定访问控制列表名称。 ignore-external-lsa:用来配置Helper不对Type5 LSA和Type7 LSA进行检查。缺省情况下,执行外部LSA检查。 never:指定设备不支持Helper模式。 检查OSPF GR的配置结果,查看OSPF GR信息。 [Huawei] display ospf [ process-id ] graceful-restart [ verbose ]
配置案例
路由器R1、R2和R3都为双主控设备,主用板和备用板间形成备份关系。路由器间通过OSPF协议实现网络互连,并提供GR机制。
要求当R1通过GR方式重启OSPF进程或者进行主备倒换时转发不中断。
[R1] ospf 1 [R1-ospf-1] opaque-capability enable [R1-ospf-1] graceful-restart [R2] ospf 1 [R2-ospf-1] opaque-capability enable [R2-ospf-1] graceful-restart [R3] ospf 1 [R3-ospf-1] opaque-capability enable [R3-ospf-1] graceful-restart <R1> display ospf 1 graceful-restart OSPF Process 1 with Router ID 10.1.13.1 Graceful-restart capability : enabled ------------------------------------ # 表示已经启用 GR 功能; Graceful-restart support : planned and un-planned, totally Helper-policy support : planned and un-planned, strict lsa check Current GR state : normal Graceful-restart period : 120 seconds Number of neighbors under helper: Normal neighbors : 0 Virtual neighbors : 0 Sham-link neighbors : 0 Total neighbors : 0 Number of restarting neighbors : 0 Last exit reason: On graceful restart : none On Helper : none // ---------------------------------------------------------------------------- // 进行平滑重启 <R1> reset ospf 1 process graceful-restart <R2> display ospf 1 peer OSPF Process 1 with Router ID 10.1.12.2 Neighbors Area 0.0.0.1 interface 10.1.12.2(GigabitEthernet0/0/0)'s neighbors Router ID: 10.1.13.1 Address: 10.1.12.1 GR State: Doing GR ---------- # State: Full Mode: Nbr is Master Priority: 1 --------------- # State: Full,邻居状态为Full,表示R1以GR方式重启OSPF进程时,R2上邻居关系不中断; DR: 10.1.12.1 BDR: 10.1.12.2 MTU: 0 Dead timer due in 32 sec Retrans timer interval: 5 Neighbor is up for 00:00:13 Authentication Sequence: [ 0 ] // ---------------------------------------------------------------------------- // 查看路由器上 OSPF GR 的状态 <R1> display ospf 1 graceful-restart OSPF Process 1 with Router ID 10.1.13.1 Graceful-restart capability : enabled Graceful-restart support : planned and un-planned, totally Helper-policy support : planned and un-planned, strict lsa check Current GR state : normal Graceful-restart period : 120 seconds Number of neighbors under helper: Normal neighbors : 0 Virtual neighbors : 0 Sham-link neighbors : 0 Total neighbors : 0 Number of restarting neighbors : 0 Last exit reason: On graceful restart : successful exit --------------------------------------- # R1 正常退出 GR On Helper : none <R2> display ospf 1 graceful-restart OSPF Process 1 with Router ID 10.1.12.2 Graceful-restart capability : enabled Graceful-restart support : planned and un-planned, totally Helper-policy support : planned and un-planned, strict lsa check Current GR state : normal Graceful-restart period : 120 seconds Number of neighbors under helper: Normal neighbors : 0 Virtual neighbors : 0 Sham-link neighbors : 0 Total neighbors : 0 Number of restarting neighbors : 0 Last exit reason: On graceful restart : none On Helper : successful exit ------------------------------------ # R2 正常退出 Helper
参考文献
OSPF GR(Graceful Restart,平滑重启)技术