Half Coffee

NSX 6.3 CDO 模式


什么叫 CDO ?

CDO 全称为 Controller Disconnected Operation,中文翻译为控制器断连操作模式。用于解决 Controller Cluster 集群所有节点都宕机时可能带来的VXLAN网络通信故障。一般用于 Cross-VC 环境。

原理

CDO mode 在 Tranport Zone 级别设置,支持 Local Transport Zone 以及 Universal Tranport Zone,如果 Local Tranport Zone 和 Universal Tranport Zone 公用一个 VDS,则 CDO 只会在Universal Tranport Zone 生效。

配置过NSX可能会发现在添加 Logical Switch 时 VNI 是按照设置的 Segment ID(分段ID)自动进行设置的。比如设置 SegmentID 为5000-6000,则第一个创建的 Logical Switch 会使用 VNI 5000;在启动 CDO 模式后,会自动创建一个隐藏的 Logical Switch,会为其设置下一个可用的 VNI。

在启用 CDO 后,所有在这个 Tranport Zone 的主机都会加入创建的 CDO Logical Switch,Controller Cluster 中的某台 Controller 会负责创建一个 Global VTEP List,这个 List 就包含所有在 Tranport Zone 的主机。如果 Controller Cluster 故障,所有主机会将网络中的 BUM(Broadcast,unknown unicast,Multicast)通过 CDO Logical Switch 发给其他所有主机,保证通信正常。

CDO mode 类似于硬件网络中说的软件 Bypass,即软件在检测出自己功能故障导致网络通信中断时,自动放行所有流量,不再通过这些功能来处理流量。

解决的问题

一般来说,Controller Cluster 已经提供了一定的冗余,自身为多节点设计,任意节点的故障不会导致 Controller Cluster 故障。另 NSX 将控制层和数据层分离的机制也保证 Controller Cluster 即使失效,数据层的转发也不受影响。

但是在某些特殊情况下,Controller 集群的故障会带来网络中断,下面看一些场景:

1、在下图场景中,两个虚拟机运行在同一个 Logical Switch 上,运行在同一台主机虚拟机能够正常访问。

下面是通过 Central CLI 命令在 NSX manager 上查看 VNI 900002 VTEP 表。命令结果显示主机 192.168.125.51 属于 VNI 900002的成员。

2、 如果此时 Controller Cluster 故障,则虚拟机通信正常。

3、如果虚拟机分别在两台主机上,Controller Cluster 故障,通信依然正常。

通过 Central CLI 也可以看到两台主机都属于 VNI 900002

更进一步,在 Controller 故障后登陆主机查看其 VTEP 表,分别都能看到对方主机

4、和 3 类似的场景中,虚拟机从 Host 1迁移到了 Host 2,此时 VNI 900002 上的所有虚拟机通信依然正常。

这是因为 Host 2 上有其他的 VM,此 VM 刚好属于VNI 900002,也就是 Host 1和 Host 2 都属于 VNI 900002,因此通信不受影响

5、类似于场景3和4,确保 Host2 不属于 VNI 900002(也就是其上无 VNI 900002的虚拟机),那么Controller故障发生后只要有 VNI 900002的虚拟机运行到了 Host2,则其网络就是不通的。


小知识补充:NSX Controller 里有 ARP、MAC、VTEP 三张表。

ARP 表记录 VM 的 IP 和 MAC 地址对应关系,用于减少 ARP 广播请求报文,因为有这个表,ARP 请求可以直接让 Controller 单播回复给主机,而无需主机广播给其他主机进行查询。ARP表和操作系统的ARP表一样,180s超时。

MAC 表记录虚拟机 MAC 、其所在主机 VTEP 、VNI 对应关系。如果vm1给vm2发送包,vm1发送出主机1接收,查询其 Ethernet DST MAC,在 MAC 表中找出此包需要发给主机2,于是封装 VXLAN将其发给 主机2 的VTEP。

VTEP 表记录一个 VNI 相关 VTEP 的 IP 和 MAC 地址。上述操作需要封装 VXLAN 包,需要根据此表填充 VXLAN DST MAC,SRC MAC。

如果ARP表项不完整且 Controller 宕机,ARP 请求会被主机广播发送去查询。在此同时,MAC表也得到更新。

如果Controller宕机,MAC 表也能够进行更新,比如vMotion发生后,目的主机会发送 RARP(逆向ARP)通知所有同 VNI 的主机,此 RARP 包中包含新的 VM MAC 和 VTEP 对应关系,因此MAC能及时得到更新。

VTEP表,唯一的问题是VTEP表在Controller故障后无法更新,因此只要 VNI 对应的 VTEP list无变更,则所有二层通信正常。如果 list 有变化则通信异常。

综上,CDO 适合于解决以下两个问题:

1、在 Controller Cluster 故障或者主机与 Controller 通信异常后,防止虚拟机发生 vMotion ,目的主机暂无虚拟机 Logical Switch 对应的 VTEP 表项。简言之,目标主机上没有运行和这个虚拟机同网段的虚拟机。

2、在 Controller Cluster 故障或者主机与 Controller 通信异常后,新虚拟机在此主机上开机,而此主机没有 VM Logical Switch 网络对于的 VTEP 表项。

使用 CDO 后,在 Controller Cluster 故障,虚拟机的BUM包通过 CDO Logical Switch 发送给其他主机,确保虚机通信正常。

参考资料

NSX-V 6.3: Control Plane Resiliency with CDO Mode


相似文章

评论