NSX Controller 集群表示一个横向扩展分布式系统,将为其中的每个控制器节点分配一组角色,这些角色定义了该节点可以执行的任务类型。为了提高弹性和性能,应该在三个不同的主机中部署控制器虚拟机。

分片用于在 NSX Controller 集群节点之间分配工作负载。分片是指将 NSX Controller 工作负载拆分为不同分片的操作,以便每个 NSX Controller 实例具有相等的工作量。

该图以环绕的文本进行了说明。

这说明了不同的控制器节点如何作为给定实体的主控制器节点,例如,逻辑交换、逻辑路由和其他服务。在为某个角色选择主 NSX Controller 实例后,该 NSX Controller 在集群中的所有可用 NSX Controller 实例之间拆分不同的逻辑交换机和路由器。

分片上的每个编号框表示主控制器用于拆分工作负载的分片。逻辑交换机主控制器将逻辑交换机拆分为分片,并将这些分片分配给不同的 NSX Controller 实例。逻辑路由器的主控制器还会将逻辑路由器拆分为分片,并将这些分片分配给不同的 NSX Controller 实例。

这些分片将分配给该集群中的不同 NSX Controller 实例。角色的主控制器决定了将哪些 NSX Controller 实例分配给哪个分片。如果将请求传送到路由器分片 3,则指示该分片连接到第三个 NSX Controller 实例。如果将请求传送到逻辑交换机分片 2,则第二个 NSX Controller 实例处理该请求。

在集群中的某个 NSX Controller 实例发生故障时,角色的主控制器将分片重新分配给其余的可用实例。将选举某个控制器节点以作为每个角色的主控制器。主控制器负责将分片分配给各个控制器节点,确定节点何时发生故障以及将这些分片重新分配给其他节点。主控制器还会向 ESXi 主机通知集群节点故障情况。

要为每个角色选举主控制器,需要获得集群中的所有活动和非活动节点的多数选票。这就是必须始终为控制器集群部署奇数节点的主要原因。

ZooKeeper

ZooKeeper 是负责 NSX Controller 集群机制的客户端服务器架构。控制器集群是使用 Zookeeper 发现和创建的。在集群启动时,实际表示在所有节点之间启动 ZooKeeper。ZooKeeper 节点执行选举过程以形成控制集群。在集群中必须具有一个 ZooKeeper 主节点。这是通过节点间的选举完成的。

在创建新的控制器节点时,NSX Manager 将节点信息以及节点 IP 和 ID 传播到当前集群。因此,每个节点了解可用于创建集群的总节点数。在 ZooKeeper 主节点选举期间,每个节点投一票以选举主节点。将再次触发选举,直到某个节点获得多数选票。例如,在三节点集群中,主节点必须至少获得两票。

注: 为了防止出现无法选举 ZooKeeper 主节点的情况,集群中的节点数必须为三个。
  • 在部署第一个控制器时,这是一种特殊情况,并且第一个控制器变为主控制器。因此,在部署控制器时,第一个节点必须完成部署,然后再添加任何其他节点。
  • 在添加第二个控制器时,这也是一种特殊情况,因为此时的节点数为偶数。
  • 在添加第三个节点时,集群达到支持的稳定状态。

ZooKeeper 每次只能承受一个故障。这意味着,如果一个控制器节点发生故障,必须在发生任何其他故障之前恢复该节点。否则,可能会出现集群损坏问题。

中央控制平面 (Central Control Plane, CCP) 域管理器

这是 ZooKeeper 上面的层,它提供配置以启动所有节点上的 ZooKeeper。域管理器在集群中的所有节点之间更新配置,然后进行远程过程调用以启动 ZooKeeper 进程。

域管理器负责启动所有域。要加入集群,CCP 域与其他计算机上的 CCP 域进行通信。帮助进行集群初始化的 CCP 域组件为 zk-cluster-bootstrap

控制器与其他组件的关系

控制器集群负责维护有关逻辑交换机、逻辑路由器和 VTEP 的信息,并向 ESXi 主机提供这些信息。

在创建逻辑交换机时,集群中的控制器节点确定哪个节点是该逻辑交换机的主节点所有者。在添加逻辑路由器时,这同样适用。

在为逻辑交换机或逻辑路由器确定所有权后,该节点将该所有权信息发送到属于该交换机或路由器的传输区域的 ESXi 主机。选举所有权以及将所有权信息传播到主机的整个过程称为“分片”。请注意,所有权表示节点负责该逻辑交换机或逻辑路由器的所有 NSX 相关操作。其他节点不会为该逻辑交换机执行任何操作。

由于只有一个所有者必须是逻辑交换机和逻辑路由器的真实数据源,因此,只要控制器集群以某种方式损坏以使两个或更多个节点选举为逻辑交换机或逻辑路由器的所有者,网络中的每个主机可能具有有关该逻辑交换机或逻辑路由器的真实数据源的不同信息。如果发生这种情况,网络将会发生故障,因为网络控制和数据平面操作只能具有一个真实数据源。

如果控制器节点发生故障,集群中的其余节点将重新运行分片以确定逻辑交换机和逻辑路由的所有权。