NSX Controller 클러스터는 각 컨트롤러 노드에 노드가 구현할 수 있는 작업 유형을 정의하는 역할 집합이 할당되는 스케일아웃 분산 시스템을 나타냅니다. 복원력 및 성능을 위해 컨트롤러 VM의 배포는 3개의 고유 호스트에서 진행해야 합니다.

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 노드는 선택 프로세스를 거쳐 제어 클러스터를 형성합니다. 클러스터에는 1개의 ZooKeeper 마스터 노드가 있어야 합니다. 이는 노드 간 선택을 통해 수행됩니다.

새 컨트롤러 노드가 생성되면 NSX Manager는 노드 IP 및 ID를 포함하는 노드 정보를 현재 클러스터에 전파합니다. 이와 같이 각 노드는 클러스터링에 사용할 수 있는 전체 노드 수를 알게 됩니다. ZooKeeper 마스터 선택 동안 각 노드는 마스터 노드를 선택하기 위해 한 번씩 투표합니다. 한 노드가 과반수 투표 수를 얻을 때까지 선택이 다시 트리거됩니다. 예를 들어 3개의 노드 클러스터에서 마스터는 2표 이상을 받아야 합니다.

참고:

ZooKeeper 마스터를 선택할 수 없는 시나리오를 방지하려면 클러스터의 노드 수가 3개여야 합니다.

  • 첫 번째 컨트롤러가 배포될 때는 특수한 경우로, 첫 번째 컨트롤러가 마스터가 됩니다. 이와 같이 컨트롤러를 배포할 때 첫 번째 노드의 배포가 완료되어야만 다른 노드가 추가될 수 있습니다.

  • 두 번째 컨트롤러를 추가할 때도 이번에는 노드 수가 짝수이므로 특수한 경우가 됩니다.

  • 세 번째 노드가 추가될 경우 클러스터는 지원되는 안정적인 상태에 도달합니다.

ZooKeeper는 한 번에 하나의 실패만 허용할 수 있습니다. 즉, 한 컨트롤러 노드가 다운될 경우 다른 실패가 발생하기 전에 복구해야 합니다. 그러지 않으면 클러스터 중단과 관련된 문제가 발생할 수 있습니다.

CCP(중앙 제어부) 도메인 관리자

이는 ZooKeeper 위 계층으로, 모든 노드의 ZooKeeper가 시작되기 위한 구성을 제공합니다. 도메인 관리자는 클러스터의 모든 노드 간에 구성을 업데이트한 다음 ZooKeeper 프로세스가 시작되도록 원격 프로시저 호출을 수행합니다.

도메인 관리자는 모든 도메인을 시작하는 일을 담당합니다. 클러스터에 연결하기 위해 CCP 도메인은 다른 시스템의 CCP 도메인과 소통합니다. 클러스터 초기화에 도움이 되는 CCP 도메인의 구성 요소는 ZK 클러스터 부트스트랩입니다.

다른 구성 요소와의 컨트롤러 관계

컨트롤러 클러스터는 논리적 스위치, 논리적 라우터 및 VTEP에 대한 정보를 유지하고 ESXi 호스트에 제공하는 역할을 합니다.

논리적 스위치가 생성되면 컨트롤러 노드는 클러스터 내에서 어떤 노드가 해당 논리적 스위치에 대해 마스터인지 또는 소유자인지를 결정합니다. 논리적 라우터가 추가될 때도 마찬가지입니다.

논리적 스위치 또는 논리적 라우터에 대해 소유권이 설정되면 노드는 해당 스위치 또는 라우터의 전송 영역에 속하는 ESXi 호스트로 해당 소유권을 전송합니다. 소유권의 선택과 호스트로의 소유권 정보 전파 전체를 ‘샤딩’이라고 합니다. 소유권은 노드가 해당 논리적 스위치 또는 논리적 라우터에 대한 모든 NSX 관련 작업을 담당함을 의미합니다. 다른 노드는 해당 논리적 스위치에 대해 어떤 작업도 수행하지 않습니다.

하나의 소유자만 논리적 스위치 및 논리적 라우터의 소스여야 하므로, 둘 이상의 노드가 논리적 스위치 또는 논리적 라우터에 대한 소유자로 선택되면 네트워크의 각 호스트가 논리적 스위치 또는 논리적 라우터의 소스와 관련해서 다른 정보를 가질 수 있으므로 컨트롤러 클러스터가 중단됩니다. 이러한 경우 네트워크 제어부 및 데이터부 작업은 하나의 소스만 가질 수 있으므로 네트워크 중단이 발생합니다.

컨트롤러 노드가 다운되면 클러스터의 나머지 노드는 샤딩을 다시 실행하여 논리적 스위치 및 논리적 라우팅의 소유권을 결정합니다.