Apigee Edge 문서입니다.
Go to the
Apigee X 문서로 이동합니다. info
증상
ZooKeeper 연결 문제는 다음과 같은 다양한 증상으로 나타날 수 있습니다.
- API 프록시 배포 오류
- 관리 API 호출이 5XX 오류로 실패함
- 라우터 또는 메시지 프로세서가 시작되지 않음
- 애널리틱스 구성요소가 system.logs에서 ZooKeeper 연결 손실을 보고함
오류 메시지
다음은 ZooKeeper 노드에 연결이 끊어졌을 때 관찰될 수 있는 오류 메시지의 예를 제공합니다.
- ZooKeeper 연결 손실로 인해 API 프록시 배포
가 실패하면 관리 서버 로그에 다음 오류가 반환됩니다.
org: env: main INFO ZOOKEEPER - ZooKeeperServiceImpl.exists() : Retry path existence path: /regions/dc-1/pods/analytics/servers/692afe93-8010-45c6-b37d-e4e05b6b2eb5/reachable, reason: KeeperErrorCode = ConnectionLoss org: env: main ERROR ZOOKEEPER - ZooKeeperServiceImpl.exists() : Could not detect existence of path: /regions/dc-1/pods/analytics/servers/692afe93-8010-45c6-b37d-e4e05b6b2eb5/reachable , reason: KeeperErrorCode = ConnectionLoss org: env: main ERROR KERNEL.DEPLOYMENT - ServiceDeployer.startService() : ServiceDeployer.deploy() : Got a life cycle exception while starting service [ServerRegistrationService, Error while checking path existence for path : /regions/dc-1/pods/analytics/servers/692afe93-8010-45c6-b37d-e4e05b6b2eb5/reachable] : com.apigee.zookeeper.ZooKeeperException{ code = zookeeper.ErrorCheckingPathExis tence, message = Error while checking path existence for path : /regions/dc-1/pods/analytics/servers/692afe93-8010-45c6-b37d-e4e05b6b2eb5/reachable, associated contexts = []} 2015-03-25 10:22:39,811 org: env: main ERROR KERNEL - MicroKernel.deployAll() : MicroKernel.deployAll() : Error in deploying the deployment : EventService com.apigee.zookeeper.ZooKeeperException: Error while checking path existence for path : /regions/dc-1/pods/analytics/servers/692afe93-8010-45c6-b37d-e4e05b6b2eb5/reachable at com.apigee.zookeeper.impl.ZooKeeperServiceImpl.exists(ZooKeeperServiceImpl.java:339) ~[zookeeper-1.0.0.jar:na] at com.apigee.zookeeper.impl.ZooKeeperServiceImpl.exists( ZooKeeperServiceImpl.java:323) ~[zookeeper-1.0.0.jar:na] at ... snipped
- 시작 중에 라우터와 메시지 프로세서가 ZooKeeper에 연결됩니다. ZooKeeper에 연결 문제가 있으면 이러한 구성요소가 다음 오류로 시작되지 않습니다.
2017-08-01 23:20:00,404 CuratorFramework-0 ERROR o.a.c.f.i.CuratorFrameworkImpl - CuratorFrameworkImpl.logError() : Background operation retry gave up org.apache.zookeeper.KeeperException$ConnectionLossException: KeeperErrorCode = ConnectionLoss at org.apache.zookeeper.KeeperException.create(KeeperException.java:99) ~[zookeeper-3.4.6.jar:3.4.6-1569965] at org.apache.curator.framework.imps.CuratorFrameworkImpl.checkBackgroundRetry(CuratorFrameworkImpl.java:710) [curator-framework-2.5.0.jar:na] at org.apache.curator.framework.imps.CuratorFrameworkImpl.performBackgroundOperation(CuratorFrameworkImpl.java:827) [curator-framework-2.5.0.jar:na] at org.apache.curator.framework.imps.CuratorFrameworkImpl.backgroundOperationsLoop(CuratorFrameworkImpl.java:793) [curator-framework-2.5.0.jar:na] at org.apache.curator.framework.imps.CuratorFrameworkImpl.access$400(CuratorFrameworkImpl.java:57) [curator-framework-2.5.0.jar:na] at org.apache.curator.framework.imps.CuratorFrameworkImpl$4.call(CuratorFrameworkImpl.java:275) [curator-framework-2.5.0.jar:na] at java.util.concurrent.FutureTask.run(FutureTask.java:266) [na:1.8.0_131] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [na:1.8.0_131] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [na:1.8.0_131] at java.lang.Thread.run(Thread.java:748) [na:1.8.0_131]
- Edge UI에 API 프록시의
배포 상태를 확인할 수 없음을 나타내는 다음 오류가 표시될 수 있습니다.
Error Fetching Deployments Error while checking path existence for path: path
가능한 원인
다음 표에는 이 문제의 가능한 원인이 나와 있습니다.
| 원인 | 대상: |
|---|---|
| 여러 데이터 센터 간의 네트워크 연결 문제 | Edge Private Cloud 사용자 |
| ZooKeeper 노드가 요청을 처리하지 않음 | Edge Private Cloud 사용자 |
표에서 링크를 클릭하여 해당 원인에 대한 가능한 해결 방법을 확인합니다.
여러 데이터 센터 간의 네트워크 연결 문제
진단
ZooKeeper 클러스터에는 DC-1, DC-2와 같이 여러 리전/데이터 센터에 걸쳐 있는 노드가 있을 수 있습니다. 일반적인 Apigee Edge 2 DC 토폴로지에는 다음이 포함됩니다.
- DC-1의 투표자로서 ZooKeeper 서버 1, 2, 3
- DC-2의 투표자로서 ZooKeeper 4 및 5, 관찰자로서 ZooKeeper 6
DC-1 리전이 다운되거나 DC-1과 DC-2 간의 네트워크 연결이 끊어지면 ZooKeeper 노드가 DC-2에서 새 리더를 선택할 수 없으며 리더 노드와 통신할 수 없습니다. ZooKeeper 관찰자는 새 리더를 선택할 수 없으며 DC-2의 나머지 두 투표자 노드에는 새 리더를 선택할 수 있는 3개 이상의 투표자 노드의 정족수가 없습니다. 따라서 DC-2의 ZooKeeper는 요청을 처리할 수 없습니다. DC-2의 나머지 ZooKeeper 노드는 리더를 찾기 위해 ZooKeeper 투표자 노드에 다시 연결을 시도하는 루프를 계속 실행합니다.
해결 방법
지정된 순서대로 다음 해결 방법을 적용하여 이 문제를 해결합니다.
이러한 해결 방법을 시도한 후에도 문제를 해결할 수 없는 경우 Apigee 지원팀에 문의하세요.
해결 방법 1
- 네트워크 관리자와 협력하여 데이터 센터 간의 네트워크 연결 문제를 해결합니다.
- ZooKeeper 앙상블이 데이터 센터 간에 통신하고 ZooKeeper 리더를 선택할 수 있으면 노드가 정상 상태가 되고 요청을 처리할 수 있습니다.
해결 방법 2
- 네트워크 연결을 복구하는 데 시간이 걸리는 경우 해결 방법은 다운된 리전에서 ZooKeeper 노드를 재구성하는 것입니다. 예를 들어 이 리전의 3개 ZooKeeper 노드가 모두 투표자 노드가 되도록 DC-2에서 ZooKeeper
클러스터를 재구성하고 DC-1 리전의 ZooKeeper
zoo.cfg에서server.#을 삭제합니다.- 다음 예에서
zoo.cfg는 DC-1이 미국 동부 리전을 나타내는us-ea호스트 이름을 사용하고 DC-2가 미국 서부 리전을 나타내는us-wo호스트 이름을 사용하는 두 리전의 노드를 구성합니다. (참고: 관련 구성만 표시됨)server.1=zk01ea.us-ea.4.apigee.com:2888:3888 server.2=zk02ea.us-ea.4.apigee.com:2888:3888 server.3=zk03ea.us-ea.4.apigee.com:2888:3888 server.4=zk04wo.us-wo.4.apigee.com:2888:3888 server.5=zk05wo.us-wo.4.apigee.com:2888:3888 server.6=zk06wo.us-wo.4.apigee.com:2888:3888:observer
위의 예에서
zoo.cfg를 다음과 같이 재구성합니다.server.1=zk04wo.us-wo.4.apigee.com:2888:3888 server.2=zk05wo.us-wo.4.apigee.com:2888:3888 server.3=zk06wo.us-wo.4.apigee.com:2888:3888
- 구성으로 코드를 사용하여 다음 내용으로
/opt/apigee/customer/application/zookeeper.properties파일을 만듭니다.conf_zoo_quorum=server.1=zk04wo.us-wo.4.apigee.com:2888:3888\ \nserver.2=zk05wo.us-wo.4.apigee.com:2888:3888\ \nserver.3=zk06wo.us-wo.4.apigee.com:2888:3888\
위에서 미국 동부의 노드가 삭제되고 미국 서부 노드가 투표자 노드로 승격됩니다.
:observer주석이 삭제되면 - 다음 예에서
/opt/apigee/apigee-zookeeper/conf/zoo.cfg및 이전/opt/apigee/customer/application/zookeeper.properties을 백업합니다.이러한 파일은 데이터 센터 간에 네트워크 연결이 다시 설정될 때 기본값을 복원하는 데 사용됩니다.
관찰자 노드의 관찰자 표기법을 사용 중지합니다. 이렇게 하려면
/opt/apigee/customer/application/zookeeper.properties상단에 다음 구성을 추가합니다.conf_zoo_peertype=
-
다음과 같이
/opt/apigee/data/apigee-zookeeper/data/myid파일을 수정합니다.server.1의 경우myid내부의 항목을 4 에서 1 로 변경합니다.server.2의 경우myid를 5 에서 2 로 변경합니다.server.3의 경우myid를 6 에서 3 으로 변경합니다.
- ZooKeeper 클러스터를 재구성한 리전에서 ZooKeeper 노드를 다시 시작합니다.
- DC-2의 모든 ZooKeeper 노드에서 1b단계부터 5단계까지 위의 구성을 반복합니다.
- 노드가 리더와 함께 작동하는지 확인합니다.
$ echo srvr | nc zk04wo.us-wo.4.apigee.com 2181 > echo srvr | nc zk05wo.us-wo.4.apigee.com 2181 > echo srvr | nc zk06wo.us-wo.4.apigee.com 2181
이 명령어의 출력에는 리더인 경우 'mode' 뒤에 'leader'가, 팔로어인 경우 'follower'가 포함된 행이 포함됩니다.
데이터 센터 간의 네트워크가 다시 설정되면 DC-2의 ZooKeeper 노드에서 ZooKeeper 구성 변경사항을 되돌릴 수 있습니다.
해결 방법 3
- 클러스터의 ZooKeeper 노드가 시작되지 않은 경우 다시 시작합니다.
- ZooKeeper 로그를 확인하여 ZooKeeper 노드가 다운된 이유를 확인합니다.
ZooKeeper 로그는 다음 디렉터리에서 확인할 수 있습니다.
$ cd /opt/apigee/var/log/apigee-zookeeper $ ls -l total 188 -rw-r--r--. 1 apigee apigee 2715 Jul 22 19:51 apigee-zookeeper.log -rw-r--r--. 1 apigee apigee 10434 Jul 17 19:51 config.log -rw-r--r--. 1 apigee apigee 169640 Aug 1 19:51 zookeeper.log
- Apigee 지원팀에 문의하고 ZooKeeper 로그를 제공하여 중지되었을 수 있는 ZooKeeper 노드의 원인을 해결합니다.
ZooKeeper 노드가 요청을 처리하지 않음
앙상블의 ZooKeeper 노드가 비정상 상태가 되어 클라이언트 요청에 응답하지 못할 수 있습니다. 이는 다음과 같은 이유 때문일 수 있습니다.
- 노드가 다시 시작되지 않고 중지되었습니다.
- 자동 시작이 사용 설정되지 않은 상태에서 노드가 재부팅되었습니다.
- 노드의 시스템 부하로 인해 노드가 다운되거나 비정상 상태가 되었습니다.
진단
- 각 ZooKeeper 노드에서 다음 ZooKeeper 상태 확인 명령어를 실행하고
출력을 확인합니다.
-
$ echo "ruok" | nc localhost 2181
출력 예시:
$ echo "ruok" | nc localhost 2181 imok
-
echo srvr | nc localhost 2181
모드를 확인하여 ZooKeeper 노드가 리더인지 팔로어인지 확인합니다.
올인원 단일 ZooKeeper 노드의 출력 예시:
$ echo srvr | nc localhost 2181 ZooKeeper version: 3.4.5-1392090, built on 09/30/2012 17:52 GMT Latency min/avg/max: 0/0/88 Received: 4206601 Sent: 4206624 Connections: 8 Outstanding: 0 Zxid: 0x745 Mode: standalone Node count: 282
-
$ echo mntr | nc localhost 2181
이 명령어는 ZooKeeper 클러스터의 상태를 확인하는 데 사용할 수 있는 ZooKeeper 변수를 나열합니다.
출력 예시:
$ echo mntr | nc localhost 2181 zk_version 3.4.5-1392090, built on 09/30/2012 17:52 GMT zk_avg_latency 0 zk_max_latency 88 zk_min_latency 0 zk_packets_received 4206750 zk_packets_sent 4206773 zk_num_alive_connections 8 zk_outstanding_requests 0 zk_server_state standalone zk_znode_count 282 zk_watch_count 194 zk_ephemerals_count 1 zk_approximate_data_size 22960 zk_open_file_descriptor_count 34 zk_max_file_descriptor_count 4096
-
$ echo stat | nc localhost 2181
이 명령어는 성능 및 연결된 클라이언트에 관한 통계를 나열합니다.
출력 예시:
$ echo stat | nc localhost 2181 ZooKeeper version: 3.4.5-1392090, built on 09/30/2012 17:52 GMT Clients: /10.128.0.8:54152[1](queued=0,recved=753379,sent=753385) /10.128.0.8:53944[1](queued=0,recved=980269,sent=980278) /10.128.0.8:54388[1](queued=0,recved=457094,sent=457094) /10.128.0.8:54622[1](queued=0,recved=972938,sent=972938) /10.128.0.8:54192[1](queued=0,recved=150843,sent=150843) /10.128.0.8:44564[1](queued=0,recved=267332,sent=267333) /127.0.0.1:40820[0](queued=0,recved=1,sent=0) /10.128.0.8:53960[1](queued=0,recved=150844,sent=150844) Latency min/avg/max: 0/0/88 Received: 4206995 Sent: 4207018 Connections: 8 Outstanding: 0 Zxid: 0x745 Mode: standalone Node count: 282
-
$ echo cons | nc localhost 2181
이 명령어는 ZooKeeper 연결에 관한 자세한 정보를 제공합니다.
출력 예시:
$ echo cons | nc localhost 2181 /127.0.0.1:40864[0](queued=0,recved=1,sent=0) /10.128.0.8:54152[1](queued=0,recved=753400,sent=753406,sid=0x15d521a96d40007, lop=PING,est=1500321588647,to=40000,lcxid=0x972e9,lzxid=0x745,lresp=1502334173174, llat=0,minlat=0,avglat=0,maxlat=26) /10.128.0.8:53944[1](queued=0,recved=980297,sent=980306,sid=0x15d521a96d40005, lop=PING,est=1500321544896,to=40000,lcxid=0xce92a,lzxid=0x745,lresp=1502334176055, llat=0,minlat=0,avglat=0,maxlat=23) /10.128.0.8:54388[1](queued=0,recved=457110,sent=457110,sid=0x15d521a96d4000a, lop=PING,est=1500321673852,to=40000,lcxid=0x4dbe3,lzxid=0x745,lresp=1502334174245, llat=0,minlat=0,avglat=0,maxlat=22) /10.128.0.8:54622[1](queued=0,recved=972967,sent=972967,sid=0x15d521a96d4000b, lop=PING,est=1500321890175,to=40000,lcxid=0xccc9d,lzxid=0x745,lresp=1502334182417, llat=0,minlat=0,avglat=0,maxlat=88) /10.128.0.8:54192[1](queued=0,recved=150848,sent=150848,sid=0x15d521a96d40008, lop=PING,est=1500321591985,to=40000,lcxid=0x8,lzxid=0x745,lresp=1502334184475, llat=3,minlat=0,avglat=0,maxlat=19) /10.128.0.8:44564[1](queued=0,recved=267354,sent=267355,sid=0x15d521a96d4000d, lop=PING,est=1501606633426,to=40000,lcxid=0x356e2,lzxid=0x745,lresp=1502334182315, llat=0,minlat=0,avglat=0,maxlat=35) /10.128.0.8:53960[1](queued=0,recved=150848,sent=150848,sid=0x15d521a96d40006, lop=PING,est=1500321547138,to=40000,lcxid=0x5,lzxid=0x745,lresp=1502334177036, llat=1,minlat=0,avglat=0,maxlat=20)
마지막 3개의 상태 확인 명령어 중 하나에 다음 메시지가 표시되면
$ echo stat | nc localhost 2181 This ZooKeeper instance is not currently serving requests
특정 ZooKeeper 노드가 요청을 처리하지 않음을 나타냅니다.
-
- 특정 노드에서 ZooKeeper 로그를 확인하고 ZooKeeper가 다운되는 원인이 되는 오류를 찾습니다. ZooKeeper 로그는 다음 디렉터리에서 확인할 수 있습니다.
$ cd /opt/apigee/var/log/apigee-zookeeper $ ls -l total 188 -rw-r--r--. 1 apigee apigee 2715 Jul 22 19:51 apigee-zookeeper.log -rw-r--r--. 1 apigee apigee 10434 Jul 17 19:51 config.log -rw-r--r--. 1 apigee apigee 169640 Aug 1 19:51 zookeeper.log
해결 방법
- 클러스터의 다른 모든 ZooKeeper 노드를 하나씩 다시 시작합니다.
- 각 노드에서 ZooKeeper 상태 확인 명령어를 다시 실행하고 예상한 출력이 표시되는지 확인합니다.
시스템 부하가 지속되거나 다시 시작해도 문제가 해결되지 않으면 Apigee 지원팀에 문의하여 원인을 해결하세요.