ZooKeeper 앙상블은 하나 이상의 ZooKeeper 노드가 손실되더라도 데이터 손실 없이 작동하도록 설계되었습니다. 이 복원력은 시스템 다운타임 없이 ZooKeeper 노드에서 유지보수를 수행하는 데 효과적으로 사용될 수 있습니다.
ZooKeeper 및 Edge 정보
Edge에서 ZooKeeper 노드에는 다양한 Edge 구성요소의 위치 및 구성에 대한 구성 데이터가 포함되며 구성 변경사항의 다양한 구성요소에 알립니다. 프로덕션 시스템에 지원되는 모든 Edge 토폴로지는 최소 3개의 ZooKeeper 노드를 사용합니다.
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 노드는 voter 노드로 지정됩니다. 즉, 노드가 모두 ZooKeeper 리더를 선택하는 데 참여합니다. ZK_HOSTS과 함께 :observer 수정자를 포함하여 노드가 투표자가 아닌 관찰자 노드임을 나타낼 수 있습니다. 관찰자 노드는 리더 선택에 참여하지 않습니다.
일반적으로 여러 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 요청을 처리하거나 Edge UI에 로그인할 수 없습니다.
예를 들어 단일 데이터 센터 설치의 경우 다음과 같습니다.
- ZooKeeper 노드 3개를 설치했습니다.
- 모든 ZooKeeper 노드는 투표자입니다.
- 쿼럼은 작동하는 투표자 노드 2개입니다.
- 투표자 노드가 하나만 있으면 ZooKeeper 앙상블이 작동할 수 없습니다.
데이터 센터가 2개인 설치:
- 데이터 센터당 3개의 ZooKeeper 노드를 설치하여 총 6개의 노드가 있습니다.
- 데이터 센터 1에는 투표자 노드 3개가 있습니다.
- 데이터 센터 2에는 투표자 노드 2개와 옵저버 노드 1개가 있습니다.
- 정족수는 두 데이터 센터의 투표자 5명을 기반으로 하므로 작동하는 투표자 노드 3개입니다.
- 사용 가능한 투표자 노드가 2개 이하인 경우 ZooKeeper 앙상블이 작동할 수 없습니다.
노드를 투표자 또는 관찰자로 추가할 때 고려사항
시스템 요구사항에 따라 Edge 설치에 ZooKeeper 노드를 추가해야 할 수 있습니다. ZooKeeper 노드 추가 문서에서는 Edge에 ZooKeeper 노드를 추가하는 방법을 설명합니다. ZooKeeper 노드를 추가할 때는 추가할 노드 유형(투표자 또는 관찰자)을 고려해야 합니다.
하나 이상의 투표자 노드가 다운되더라도 ZooKeeper 앙상블이 계속 작동할 수 있도록 충분한 투표자 노드가 있어야 합니다. 즉, 투표자 노드의 정족수가 여전히 사용 가능해야 합니다. 투표자 노드를 추가하면 쿼럼 크기가 증가하므로 더 많은 투표자 노드가 다운되는 것을 허용할 수 있습니다.
하지만 투표자 노드를 추가하면 쓰기 작업에서 리더에 대한 정족수 합의가 필요하므로 쓰기 성능에 부정적인 영향을 미칠 수 있습니다. 리더를 결정하는 데 걸리는 시간은 투표자 노드 수에 따라 달라지며, 투표자 노드를 더 추가할수록 증가합니다. 따라서 모든 노드를 투표자로 만들지 않는 것이 좋습니다.
투표자 노드를 추가하는 대신 관찰자 노드를 추가할 수 있습니다. 옵저버 노드를 추가하면 옵저버 노드가 투표하지 않고 쿼럼 크기에 영향을 주지 않으므로 리더를 선택하는 오버헤드를 추가하지 않고도 전반적인 시스템 읽기 성능이 향상됩니다. 따라서 관찰자 노드가 다운되더라도 리더를 선출하는 앙상블의 기능에는 영향을 미치지 않습니다. 하지만 옵저버 노드가 손실되면 데이터 요청을 처리하는 데 사용할 수 있는 노드가 줄어들기 때문에 ZooKeeper 앙상블의 읽기 성능이 저하될 수 있습니다.
단일 데이터 센터에서 Apigee는 관찰자 노드 수에 관계없이 투표자가 5개 이하인 것이 좋습니다. Apigee는 두 개의 데이터 센터에서 투표자를 9명 이하로 유지하는 것이 좋습니다 (한 데이터 센터에 5명, 다른 데이터 센터에 4명). 그런 다음 시스템 요구사항에 필요한 만큼 관찰자 노드를 추가할 수 있습니다.
Zookeeper 노드 삭제
Zookeeper 노드를 삭제하려는 이유는 여러 가지가 있습니다. 예를 들어 노드가 손상되었거나 잘못된 환경에 추가되었을 수 있습니다.
이 섹션에서는 노드가 다운되어 연결할 수 없을 때 Zookeeper 노드를 삭제하는 방법을 설명합니다.
Zookeeper 노드를 삭제하려면 다음 안내를 따르세요.
- 자동 구성 파일을 수정하고 삭제하려는 ZooKeeper 노드의 IP 주소를 삭제합니다.
- Zookeeper에 대해
setup명령어를 다시 실행하여 나머지 ZooKeeper 노드를 재구성합니다./opt/apigee/apigee-service/bin/apigee-service apigee-zookeeper setup -f updated_config_file
- 모든 ZooKeeper 노드를 다시 시작합니다.
/opt/apigee/apigee-service/bin/apigee-service apigee-zookeeper restart
- 관리 서버 노드를 다시 구성합니다.
/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 - 모든 라우터를 재구성합니다.
/opt/apigee/apigee-service/bin/apigee-service edge-router setup -f updated_config_file
/opt/apigee/apigee-service/bin/apigee-service edge-router restart - 모든 메시지 프로세서를 재구성합니다.
/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 - 모든 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 - 모든 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 노드 유형 (리더, 투표자 또는 관찰자)을 확인합니다.
- ZooKeeper 노드에 설치되지 않은 경우
nc를 설치합니다.sudo yum install nc
- 노드에서 다음
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(리더가 아닌 투표자)가 표시됩니다. - 각 ZooKeeper 노드에서 1단계와 2단계를 반복합니다.
요약
ZooKeeper 앙상블에서 유지보수를 수행하는 가장 좋은 방법은 한 번에 하나의 노드를 수행하는 것입니다. 주의:
- ZooKeeper 앙상블이 계속 작동하도록 유지보수 중에 투표자 노드의 정족수를 유지해야 합니다.
- 관찰자 노드를 중단해도 정족수나 리더를 선출하는 기능에는 영향을 미치지 않습니다.
- 쿼럼은 모든 데이터 센터의 모든 ZooKeeper 노드에서 계산됩니다.
- 이전 서버가 작동하면 다음 서버의 유지보수를 진행합니다.
nc명령어를 사용하여 ZooKeeper 노드를 검사합니다.