原文链接:https://www.yuque.com/erik.zhao/trouble/tbf5htq1kd9zodfr?singleDoc
问题描述
某局点外部路由产生环路,最终排查因为BGP的问题,做一下BGP路由更新的一个小问题,在复杂组网情况下,bgp的update会产生update更新的时间差异,导致路由的收敛存在延迟,短暂的环路等问题:
处理过程
通过对业务流量的抓包(科莱的探针),发现数据包的丢包点;
根因分析
- PE 撤销subnent1,PE发送撤销路由的update,即撤销1
- C-CE接收到撤销1,上行路由消失,本地无路由,向D-CE发送撤销2,向FP发送撤销2
- FP接收到撤销2,更新路由到D-CE,同时对直连FP以及下联C1-4发更新1,更新1之后进入15s抑制
- 抑制期间D-CE接收到撤销2,本地无路由,对FP发送撤销3
- FP接收到D-CE的撤销3,更新路由到横联FP,但此时FP还处于更新1之后的ibgp 15s抑制,等待抑制结束, 向直连FP发送撤销4
- FP接收到撤销4,本地路由消失,对下C1-4发送撤销5
- 默认向ibgp peer发布同一条路由的周期15s,FP上同一条路由经过2次更新,引入15s抑制延迟
解决方案
由于ibgp peer之间的update存在默认的更新延迟15s, 在某些特定条件下, 触发路由更新的异步,导致ibgp peer之间路由互锁。
需要修改缺省的update interval 15s 为0,即 peer route-update-interval 设置为0,加快路由收敛
建议与总结
在大型数据中心,采用bgp作为underlay路由协议,应该对bgp的缺省参数进行调整,使其适配作为underlay协议的要求;
BGP作为互联网上唯一的广域跨域路由协议已经使用了几十年,在这漫长的使用发展过程中,积累了很多使用中出现的问题,简单将BGP直接引入数据中心内部将面临很多调整,有在互联网上面应用而累积的BGP的自身问题,也有数据中心和互联网场景不同导致的适配问题,我们需要应对这些问题才能确保设计落地。汇总业内的一些研究论文以及面临的问题可以总结成三个BGP的问题:1)BGP的收敛问题;2)BGP路由稳定性;3)错误配置带来的风险;
互联网上面使用BGP来宣告路由网段会传播到全球网络中去,由于通常网络具备多个出口,所以BGP路由在这种情况下更多的考量是路由的稳定,避免更多的不必要的宣告而造成的持续不断的路由震荡。在这种情况下,BGP协议通常会有一个MRAI (Min-Route-Advertisement-Interval)计时器,路由器收到路由以后等待计时器(例如:有的厂家定义eBGP为5秒)规定的时间以后再发送出去,这样的好处是:如果在计时器内有新的变化可以少一些路由更新发送出去。但这个特性显然不适配数据中心内的应用场景,
数据中心内部使用eBGP来替代IGP需要更快的路由收敛,所以MRAI的设置在这里选择为0,对于一个典型的7-Stage数据中心的架构可以节省很大路由收敛延迟。收敛性和路由传播的范围也直接相关,因此能减少全网传播的路由有利于收敛、同时增加路由稳定性。
另外需要按区域进行路由汇聚的优化设计原则,这样可以控制路由的传播范围,详细路由只会在小区域内传递,不会影响其他区域