ZooKeeper 유지보수 정보

ZooKeeper 앙상블은 하나 이상의 ZooKeeper 노드가 손실되더라도 데이터 손실 없이 계속 작동하도록 설계되었습니다. 이 복원력을 사용하면 시스템 다운타임 없이 ZooKeeper 노드에서 유지보수를 효과적으로 실행할 수 있습니다.

ZooKeeper 및 Edge 정보

Edge에서 ZooKeeper 노드는 다양한 Edge 구성요소의 위치 및 구성에 관한 구성 데이터를 포함하고 구성 변경사항을 다양한 구성요소에 알립니다. 프로덕션 시스템을 위해 지원되는 모든 Edge 토폴로지는 ZooKeeper 노드를 3개 이상 사용합니다.

Edge 구성 파일에서 ZK_HOSTS 및 ZK_CLIENT_HOSTS 속성을 사용하여 ZooKeeper 노드를 지정합니다. 예를 들면 다음과 같습니다.

ZK_HOSTS="$IP1 $IP2 $IP3"
ZK_CLIENT_HOSTS="$IP1 $IP2 $IP3"

각 항목의 의미는 다음과 같습니다.

  • ZK_HOSTS는 ZooKeeper 노드의 IP 주소를 지정합니다. IP 주소 는 모든 ZooKeeper 노드에서 동일한 순서로 나열되어야 합니다.

    멀티 데이터 센터 환경에서는 모든 데이터 센터의 모든 ZooKeeper 노드를 나열합니다.

  • ZK_CLIENT_HOSTS는 이 데이터 센터에서만 사용하는 ZooKeeper 노드의 IP 주소를 지정합니다. IP 주소는 데이터 센터의 모든 ZooKeeper 노드에서 동일한 순서로 나열되어야 합니다.

    단일 데이터 센터 설치에서는 ZK_HOSTS로 지정된 것과 동일한 노드입니다. 멀티 데이터 센터 환경에서는 각 데이터 센터의 Edge 구성 파일에 해당 데이터 센터의 ZooKeeper 노드만 나열해야 합니다.

기본적으로 모든 ZooKeeper 노드는 투표자 노드로 지정됩니다. 즉, 모든 노드가 ZooKeeper 리더 선출에 참여합니다. :observer 수정자를 ZK_HOSTS에 포함하여 노드가 투표자가 아닌 관찰자 노드임을 나타낼 수 있습니다. 관찰자 노드는 리더 선출에 참여하지 않습니다.

일반적으로 여러 Edge 데이터 센터를 만들 때 또는 단일 데이터 센터에 많은 수의 ZooKeeper 노드가 있을 때 :observer 수정자를 지정합니다. 예를 들어 데이터 센터가 2개인 12호스트 Edge 설치에서 데이터 센터 2의 노드 9에 있는 ZooKeeper는 관찰자입니다.

그런 다음 데이터 센터 1의 구성 파일에서 다음 설정을 사용합니다.

ZK_HOSTS="$IP1 $IP2 $IP3 $IP7 $IP8 $IP9:observer"
ZK_CLIENT_HOSTS="$IP1 $IP2 $IP3"

데이터 센터 2의 경우:

ZK_HOSTS="$IP1 $IP2 $IP3 $IP7 $IP8 $IP9:observer"
ZK_CLIENT_HOSTS="$IP7 $IP8 $IP9"

다음 섹션에는 리더, 투표자, 관찰자 노드에 관한 자세한 내용이 포함되어 있으며 투표자 및 관찰자 노드 추가 시 고려사항을 설명합니다.

리더, 팔로어, 투표자, 관찰자 정보

멀티 노드 ZooKeeper 설치에서는 노드 중 하나가 리더 로 지정됩니다. 다른 모든 ZooKeeper 노드는 팔로어 로 지정됩니다. 읽기는 모든 ZooKeeper 노드에서 발생할 수 있지만 모든 쓰기 요청은 리더에게 전달됩니다. 예를 들어 새 메시지 프로세서가 Edge에 추가됩니다. 이 정보는 ZooKeeper 리더에 기록됩니다. 그러면 모든 팔로어 가 데이터를 복제합니다.

Edge 설치 시 각 ZooKeeper 노드를 투표자 또는 관찰자로 지정합니다. 그러면 모든 투표자 ZooKeeper 노드가 리더를 선출합니다. 리더 선출의 한 가지 요구사항은 작동하는 ZooKeeper 투표자 노드의 정족수 가 있어야 한다는 것입니다. 정족수는 모든 데이터 센터의 모든 투표자 ZooKeeper 노드의 절반 이상이 작동한다는 의미입니다.

사용 가능한 투표자 노드의 정족수가 없으면 리더를 선출할 수 없습니다. 이 시나리오에서는 ZooKeeper가 요청을 처리할 수 없습니다. 즉, 정족수가 복원될 때까지 Edge 관리 서버에 요청을 하거나, API 요청을 처리하거나, New Edge UI에 로그인할 수 없습니다.

예를 들어 단일 데이터 센터 설치에서 다음을 수행합니다.

  • ZooKeeper 노드 3개를 설치했습니다.
  • 모든 ZooKeeper 노드는 투표자입니다.
  • 정족수는 작동하는 투표자 노드 2개입니다.
  • 투표자 노드가 하나만 있는 경우 ZooKeeper 앙상블이 작동할 수 없습니다.

데이터 센터가 2개인 설치에서 다음을 수행합니다.

  • 데이터 센터당 ZooKeeper 노드 3개를 설치하여 총 6개의 노드를 설치했습니다.
  • 데이터 센터 1에는 투표자 노드가 3개 있습니다.
  • 데이터 센터 2에는 투표자 노드 2개와 관찰자 노드 1개가 있습니다.
  • 정족수는 두 데이터 센터의 5명의 투표자를 기반으로 하며 따라서 작동하는 투표자 노드 3개입니다.
  • 투표자 노드가 2개 이하인 경우 ZooKeeper 앙상블이 작동할 수 없습니다.

노드를 투표자 또는 관찰자로 추가할 때 고려사항

시스템 요구사항에 따라 Edge 설치에 ZooKeeper 노드를 추가해야 할 수 있습니다. ZooKeeper 노드 추가 문서 에서는 Edge에 ZooKeeper 노드를 추가하는 방법을 설명합니다. ZooKeeper 노드를 추가할 때는 추가할 노드 유형(투표자 또는 관찰자)을 고려해야 합니다.

하나 이상의 투표자 노드가 다운되더라도 ZooKeeper 앙상블이 계속 작동할 수 있도록 투표자 노드가 충분히 있어야 합니다. 즉, 사용 가능한 투표자 노드의 정족수가 있어야 합니다. 투표자 노드를 추가하면 정족수의 크기가 증가하므로 더 많은 투표자 노드가 다운되더라도 허용할 수 있습니다.

하지만 쓰기 작업에는 정족수가 리더에 동의해야 하므로 투표자 노드를 추가하면 쓰기 작업 성능에 부정적인 영향을 미칠 수 있습니다. 리더를 결정하는 데 걸리는 시간 은 투표자 노드의 수를 기반으로 하며 투표자 노드를 추가할수록 증가합니다. 따라서 모든 노드를 투표자로 만들지 않는 것이 좋습니다.

투표자 노드를 추가하는 대신 관찰자 노드를 추가할 수 있습니다. 관찰자 노드는 투표하지 않고 정족수 크기에 영향을 미치지 않으므로 관찰자 노드를 추가하면 리더 선출의 오버헤드를 추가하지 않고도 전반적인 시스템 읽기 성능이 향상됩니다. 따라서 관찰자 노드가 다운되더라도 앙상블의 리더 선출 기능에는 영향을 미치지 않습니다. 하지만 관찰자 노드가 손실되면 데이터 요청을 처리할 수 있는 노드가 줄어들기 때문에 ZooKeeper 앙상블의 읽기 성능이 저하될 수 있습니다.

단일 데이터 센터에서 Apigee는 관찰자 노드의 수와 관계없이 투표자가 5명 이하인 것이 좋습니다. 데이터 센터가 2개인 경우 Apigee는 투표자가 9명 이하인 것이 좋습니다 (한 데이터 센터에 5명, 다른 데이터 센터에 4명). 그런 다음 시스템 요구사항에 따라 필요한 만큼 관찰자 노드를 추가할 수 있습니다.

ZooKeeper 노드 삭제

ZooKeeper 노드를 삭제하려는 데에는 여러 가지 이유가 있을 수 있습니다. 예를 들어 노드가 손상되었거나 잘못된 환경에 추가된 경우입니다.

이 섹션에서는 노드가 다운되어 연결할 수 없는 경우 ZooKeeper 노드를 삭제하는 방법을 설명합니다.

ZooKeeper 노드를 삭제하려면 다음 단계를 따르세요.

  1. 자동 구성 파일을 수정하고 삭제하려는 ZooKeeper 노드의 IP 주소를 삭제합니다.
  2. ZooKeeper의 setup 명령어를 다시 실행하여 나머지 ZooKeeper 노드를 재구성합니다.
    /opt/apigee/apigee-service/bin/apigee-service apigee-zookeeper setup -f updated_config_file
  3. 모든 ZooKeeper 노드를 다시 시작합니다.
    /opt/apigee/apigee-service/bin/apigee-service apigee-zookeeper restart
  4. 관리 서버 노드를 재구성합니다.
    /opt/apigee/apigee-service/bin/apigee-service edge-management-server setup -f updated_config_file
    /opt/apigee/apigee-service/bin/apigee-service edge-management-server restart
  5. 모든 라우터를 재구성합니다.
    /opt/apigee/apigee-service/bin/apigee-service edge-router setup -f updated_config_file
    /opt/apigee/apigee-service/bin/apigee-service edge-router restart
  6. 모든 메시지 프로세서를 재구성합니다.
    /opt/apigee/apigee-service/bin/apigee-service edge-message-processor setup -f updated_config_file
    /opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
  7. 모든 Qpid 노드를 재구성합니다.
    /opt/apigee/apigee-service/bin/apigee-service edge-qpid-server setup -f updated_config_file
    /opt/apigee/apigee-service/bin/apigee-service edge-qpid-server restart
  8. 모든 Postgres 노드를 재구성합니다.
    /opt/apigee/apigee-service/bin/apigee-service edge-postgres-server setup -f updated_config_file
    /opt/apigee/apigee-service/bin/apigee-service edge-postgres-server restart

유지보수 고려사항

한 번에 하나의 노드에서 ZooKeeper 유지보수를 실행하면 다운타임 없이 완전히 작동하는 앙상블에서 ZooKeeper 유지보수를 실행할 수 있습니다. 한 번에 하나의 ZooKeeper 노드만 다운되도록 하면 항상 리더를 선출할 수 있는 투표자 노드의 정족수가 확보됩니다.

여러 데이터 센터의 유지보수

여러 데이터 센터를 사용할 때는 ZooKeeper 앙상블이 데이터 센터를 구분하지 않는다는 점을 기억하세요. ZooKeeper 어셈블리는 모든 데이터 센터의 모든 ZooKeeper 노드를 하나의 앙상블로 봅니다.

ZooKeeper가 정족수 계산을 실행할 때 특정 데이터 센터의 투표자 노드 위치는 고려되지 않습니다. 데이터 센터 전반에서 개별 노드가 다운될 수 있지만 전체 앙상블에서 정족수가 유지되는 한 ZooKeeper는 계속 작동합니다.

유지보수 영향

때로는 투표자 노드 또는 관찰자 노드 중 하나를 유지보수를 위해 다운해야 합니다. 예를 들어 노드에서 Edge 버전을 업그레이드해야 하거나, ZooKeeper를 호스팅하는 머신이 실패하거나, 네트워크 오류와 같은 다른 이유로 노드를 사용할 수 없게 될 수 있습니다.

다운되는 노드가 관찰자 노드인 경우 노드가 복원될 때까지 ZooKeeper 앙상블의 성능이 약간 저하될 수 있습니다. 노드가 투표자 노드인 경우 리더 선출 프로세스에 참여하는 노드가 손실되어 ZooKeeper 앙상블의 실행 가능성에 영향을 미칠 수 있습니다. 투표자 노드가 다운되는 이유와 관계없이 사용 가능한 투표자 노드의 정족수를 유지하는 것이 중요합니다.

유지보수 절차

ZooKeeper 앙상블이 작동하는지 확인한 후에만 유지보수 절차를 실행합니다. 여기서는 관찰자 노드가 작동하고 유지보수 중에 정족수를 유지할 수 있는 충분한 투표자 노드가 있다고 가정합니다.

이러한 조건이 충족되면 임의 크기의 ZooKeeper 앙상블은 데이터 손실이나 성능에 미치는 의미 있는 영향 없이 언제든지 단일 노드의 손실을 허용할 수 있습니다. 즉, 한 번에 하나의 노드에서만 유지보수를 실행하는 한 앙상블의 모든 노드에서 유지보수를 자유롭게 실행할 수 있습니다.

유지보수를 실행하는 과정에서 다음 절차를 사용하여 ZooKeeper 노드 유형 (리더, 투표자, 관찰자)을 결정합니다.

  1. ZooKeeper 노드에 설치되어 있지 않은 경우 nc를 설치합니다.
    sudo yum install nc
  2. 노드에서 다음 nc 명령어를 실행합니다. 여기서 2181은 ZooKeeper 포트입니다.
    echo stat | nc localhost 2181

    다음과 같은 출력이 표시됩니다.

    Zookeeper version: 3.4.5-1392090,
    built on 09/30/2012 17:52 GMT
    Clients: /a.b.c.d:xxxx[0](queued=0,recved=1,sent=0)
    Latency min/avg/max: 0/0/0
    Received: 1
    Sent: 0
    Connections: 1
    Outstanding: 0
    Zxid: 0xc00000044
    Mode: follower
    Node count: 653

    노드의 출력에서 Mode 줄에는 노드 구성에 따라 observer, leader, 또는 follower (리더가 아닌 투표자) 가 표시됩니다.

  3. 각 ZooKeeper 노드에서 1단계와 2단계를 반복합니다.

요약

ZooKeeper 앙상블에서 유지보수를 실행하는 가장 좋은 방법은 한 번에 하나의 노드에서 실행하는 것입니다. 다음을 기억하세요.

  • ZooKeeper 앙상블이 계속 작동하도록 유지보수 중에 투표자 노드의 정족수를 유지해야 합니다.
  • 관찰자 노드를 다운해도 정족수 또는 리더 선출 기능에는 영향을 미치지 않습니다.
  • 정족수는 모든 데이터 센터의 모든 ZooKeeper 노드에서 계산됩니다.
  • 이전 서버가 작동한 후 다음 서버로 유지보수를 진행합니다.
  • nc 명령어를 사용하여 ZooKeeper 노드를 검사합니다.