首先说,vPC是一个 layer2的概念,为了解决STP block 冗余接口的问题;两台 nexus 在逻辑上虚拟成为一个 layer2设备。不过对于 layer3, 也就是 routing(HSRP/OSPF, etc), vPC设备是互相独立的存在,因此 routing over vPC, 在设计网络时候,需要仔细考虑。
对于新设计的网络,推荐去看一下 VPC best practice,以及 configuration guide。如果说熟读这两份文档,那么恭喜你,你应该可以解决大部分非 software bug 的 VPC 相关问题啦。
让客户去读文档似乎不太可能,毕竟项目可以给 partner 去做集成,出问题可以找 partner 或者厂商TAC,
文档翻译这件事比较枯燥,我去翻译,没什么动力,大家看的可能也没什么重点,不如就用 VPC 相关的 case 来举例吧。比如下面的 case, 基本的问题描述如下:
拓扑是用 Email Effects 这款软件画的。基本要点都在图里了。LAB 环境可以重现此问题。
首先说,透明墙FW是一个干扰项,基本不会影响流量转发。在客户环境确实存在FW,在我的LAB环境,没有FW。
假设FW1是 active,也就是说LAB里面,先 shutdown N7K-2的 e1/1,OSPF 邻居关系如下:
接下来,模拟透明墙HA切换。切换的过程中, active FW断开,standby FW接管,是有先后顺序的。
所以说LAB模拟,必须是保持N7K-2 e1/1 shutdown, 去 shutdown N7K-1 e1/1 模拟FW的 Uplink 断开。不能先打开N7K-2 e1/1,再去模拟。
断开N7K-1 e1/1, 打开N7K-2 e1/1, OSPF问题如下:
OSPF 卡在EXSTART/EXCHANGE状态,证明组播 hello 报文没问题,单播的DBD出现问题。
N7K-1直接ethanalyzer 抓包,发现一些线索:
眼尖的各位,一定发现了N7K-1收到了 TTL exceeded 报文,可以猜测是N7K-1送去N5K-1的DBD报文,在路过N5K-2时候,被N5K-2把TTL-1.
OSPF 等协议报文,TTL=1
接下来去看 show ip ospf event-history/adjacency, 发现其实N7K-1 & N5K-1 已经选举了交换DBD的 master/slave, 但是呢,N7K-1收到了N5K-1的DBD, N5K-1却一直没收到N7K-1的DBD(TTL=0的无效)。
解决方法layer3 peer-router
即使像这个 case,N5K VPC间用了单独的 e1/3来跑OSPF协议报文。