ZooKeeper 유지보수 정보

Private Cloud용 Edge v4.19.01

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

JoKeeper and Edge 정보

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

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

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

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

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

    다중 데이터 센터 환경에서 모든 데이터 센터의 모든 주Keeper 노드를 나열합니다.

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

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

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

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

그런 다음 데이터 센터 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"

다음 섹션에는 리더, 투표자, 관찰자 노드에 관한 자세한 내용과 투표자 및 관찰자 노드를 추가할 때의 고려사항이 설명되어 있습니다.

리더, 팔로어, 유권자, 관찰자 정보

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

Edge 설치 시 각 JoKeeper 노드를 투표자 또는 관찰자로 지정합니다. 그러면 리더는 모든 유권자 JoKeeper 노드에 의해 선출됩니다. 리더를 선출하기 위한 한 가지 요구사항은 작동하는 JoKeeper 유권자 노드의 quorum이 있어야 한다는 것입니다. 쿼럼이란 모든 데이터 센터에서 모든 유권자 JoKeeper 노드의 절반 이상이 작동함을 의미합니다.

사용 가능한 유권자 노드 쿼럼이 없으면 리더를 선출할 수 없습니다. 이 시나리오에서는Zookeeper가 요청을 처리할 수 없습니다. 즉, 쿼럼이 복원될 때까지는 에지 관리 서버에 요청하거나 Management API 요청을 처리하거나 Edge UI에 로그인할 수 없습니다.

예를 들어 단일 데이터 센터를 설치하는 경우 다음과 같습니다.

  • JoKeeper 노드 3개를 설치했습니다.
  • 모든 주Keeper 노드가 투표자임
  • 쿼럼은 작동하는 투표자 노드 2개로
  • 유권자 노드가 하나만 사용 가능한 경우 주Keeper 앙상블이 작동할 수 없음

데이터 센터 두 개가 포함된 설치 시:

  • 데이터 센터당 주Keeper 노드를 3개 설치해 총 6개의 노드를 만들었습니다.
  • 데이터 센터 1에 3개의 투표자 노드가 있음
  • 데이터 센터 2에는 2개의 투표자 노드와 1개의 관찰자 노드가 있습니다.
  • 쿼럼은 두 데이터 센터의 5명의 투표자를 기반으로 하므로 작동하는 투표자 노드 3개가 있습니다.
  • 2개 이하의 투표자 노드만 사용할 수 있는 경우 주Keeper 앙상블이 작동할 수 없음

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

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

하나 이상의 유권자 노드가 다운되어도 주Keeper 앙상블이 계속 작동할 수 있도록, 즉 사용 가능한 투표자 노드의 쿼럼이 남아 있도록 충분한 투표자 노드를 확보하려고 합니다. 투표자 노드를 추가하면 쿼럼 크기가 증가하므로 더 많은 투표자 노드가 다운되는 것을 허용할 수 있습니다.

하지만 투표자 노드를 추가하면 쓰기 작업에 쿼럼이 리더에 동의해야 하므로 쓰기 성능에 부정적인 영향을 줄 수 있습니다. 최우수 대안을 결정하는 데 걸리는 시간은 유권자 노드 수를 기준으로 하며, 투표자 노드를 추가할수록 투표자 노드 수도 증가합니다. 따라서 모든 노드의 투표자를 만들지 않는 것이 좋습니다.

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

단일 데이터 센터에서 Apigee에서는 관찰자 노드 수에 관계없이 투표자가 5명 이하여야 합니다. 2개의 데이터 센터에서 Apigee는 투표자 수가 9명 (데이터 센터 한 곳에 5명, 다른 데이터 센터에 4명)을 넘지 않도록 권장합니다. 그런 다음 시스템 요구사항에 필요한 만큼의 관찰자 노드를 추가할 수 있습니다.

Jokeeper 노드 삭제

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

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

Zookeeper 노드를 삭제하려면 다음 안내를 따르세요.

  1. 자동 구성 파일을 수정하고 삭제하려는 Zakeeper 노드의 IP 주소를 삭제합니다.
  2. 주키퍼에 대한 setup 명령어를 다시 실행하여 나머지 주Keeper 노드를 재구성합니다.
    /opt/apigee/apigee-service/bin/apigee-service apigee-zookeeper setup -f updated_config_file
  3. 모든 Jokeeper 노드를 다시 시작합니다.
    /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

유지보수 고려사항

한 번에 단일 노드에서 수행했다면 다운타임 없이 완전히 작동하는 앙상블에서 JoKeeper 유지보수를 수행할 수 있습니다. 한 번에 하나의 JoKeeper 노드만 다운되도록 하면 리더를 선택할 수 있는 투표자 노드의 쿼럼을 항상 확보할 수 있습니다.

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

여러 데이터 센터를 사용하는 경우zooKeeper 앙상블은 데이터 센터를 구분하지 않습니다. 동물원키퍼 어셈블리는 모든 데이터 센터의 모든 주Keeper 노드를 하나의 앙상블로 봅니다.

해당 데이터 센터의 유권자 노드 위치는 주Keeper가 쿼럼 계산을 수행할 때 고려되지 않습니다. 개별 노드는 여러 데이터 센터에서 작동이 중단될 수 있지만 전체 앙상블에서 쿼럼이 보존되는 한 주Keeper는 계속 작동합니다.

유지보수 영향

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

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

유지보수 절차

JoKeeper 앙상블이 작동하는지 확인한 후에만 유지보수 절차를 수행합니다. 이는 관찰자 노드가 작동하고 유지보수 중에 쿼럼을 유지하기에 충분한 유권자 노드가 있다고 가정합니다.

이러한 조건이 충족되면 임의 크기의 JoKeeper 앙상블은 데이터 손실 또는 성능에 상당한 영향을 미치지 않고 어느 시점에서든 단일 노드 손실을 허용할 수 있습니다. 즉, 한 번에 노드 한 개에 위치하는 한 인스턴스 그룹 내의 모든 노드에서 유지보수를 수행할 수 있습니다.

유지보수 수행의 일환으로 다음 절차에 따라 주Keeper 노드 유형 (리더, 투표자 또는 관찰자)을 확인합니다.

  1. JoKeeper 노드에 설치되어 있지 않으면 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. 각 JoKeeper 노드에서 1단계와 2단계를 반복합니다.

요약

주Keeper 앙상블에서 유지보수를 수행하는 가장 좋은 방법은 한 번에 한 노드씩 이를 수행하는 것입니다. 주의:

  • 동물원 앙상블이 계속 작동하도록 하려면 유지보수 중에 유권자 노드의 쿼럼을 유지해야 합니다.
  • 관찰자 노드를 삭제해도 쿼럼 또는 리더를 선택하는 기능에는 영향을 미치지 않습니다.
  • 쿼럼은 모든 데이터 센터의 모든 주Keeper 노드에서 계산됩니다.
  • 이전 서버가 작동된 후 다음 서버에서 유지관리를 진행합니다.
  • nc 명령어를 사용하여 주Keeper 노드를 검사합니다.