현재 Apigee Edge 문서가 표시되고 있습니다.
Apigee X 문서로 이동 정보
증상
JoKeeper 연결 문제는 다음과 같은 다양한 증상으로 나타날 수 있습니다.
- API 프록시 배포 오류
- 5XX 오류와 함께 Management API 호출이 실패함
- 라우터 또는 메시지 프로세서가 시작되지 않음
- 분석 구성요소 보고 system.logs에서 JoKeeper 연결 손실
오류 메시지
다음은 JoKeeper 노드에 대한 연결이 끊어졌을 때 발생할 수 있는 오류 메시지의 예를 보여줍니다.
- JoKeeper 연결 손실로 인해 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
오류가 반환됩니다. - 시작 중에는 라우터와 메시지 프로세서가 JoKeeper에 연결됩니다. 주Keeper에 연결 문제가 있으면
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 사용자 |
표에 있는 링크를 클릭하면 가능한 해결 방법을 확인할 수 있습니다.
여러 데이터 센터의 네트워크 연결 문제
진단
JoKeeper 클러스터에는 DC-1 및 DC-2와 같이 여러 리전/데이터 센터에 걸쳐 있는 노드가 있을 수 있습니다. 일반적인 Apigee Edge 2 DC 토폴로지의 구조는 다음과 같습니다.
- DC-1의 유권자로 JoKeeper 서버 1, 2, 3에 서버
- DC-2에서는 주키퍼 4와 5가 유권자로, 주키퍼 6은 관찰자로 쓰입니다.
DC-1 리전이 다운되거나 DC-1과 DC-2 간의 네트워크 연결이 끊어지면 주Keeper 노드가 DC-2의 새로운 리더를 선택할 수 없으며 리더 노드와 통신하지 못합니다. JoKeeper 관찰자는 새로운 리더를 고를 수 없으며, DC-2에 남아 있는 2명의 유권자는 새 리더를 선출할 최소 3개의 유권자 노드가 포함된 쿼럼이 없습니다. 따라서 DC-2의 JoKeepers는 요청을 처리할 수 없습니다. DC-2의 나머지 JoKeeper 노드는 리더를 찾기 위해 주Keeper 투표자에게 다시 연결하도록 재시도를 계속 반복합니다.
해상도
다음 솔루션을 지정된 순서대로 적용하여 이 문제를 해결하세요.
이 해결 방법을 시도한 후에도 문제가 해결되지 않으면 Apigee 지원팀에 문의하세요.
솔루션 #1
- 네트워크 관리자와 협력하여 데이터 센터 간의 네트워크 연결 문제를 해결합니다.
- 주Keeper 앙상블이 데이터 센터 간에 통신하고 주Keeper 리더를 선택할 수 있으면 노드가 정상이 되고 요청을 처리할 수 있어야 합니다.
솔루션 #2
- 네트워크 연결을 복구하는 데 시간이 걸리면 다운된 리전에서 주Keeper 노드를 재구성해야 합니다. 예를 들어 이 리전의 3개 주Keeper 노드가 모두 투표자가 되도록 DC-2의 주Keeper 클러스터를 재구성하고 DC-1 지역의 주Keeper
zoo.cfg
에서server.#
를 삭제합니다.- 다음 예시에서
zoo.cfg
는 2개 리전의 노드를 구성합니다. 여기서 DC-1은 US-East 리전을 나타내는us-ea
호스트 이름을 사용하고 DC-2는 US-West 리전을 나타내는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
주석이 삭제되면 US-East의 노드가 삭제되고 US-West 노드가 유권자로 승격됩니다. - 다음 예시에서
/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으로 변경합니다.
- JoKeeper 클러스터를 재구성한 리전에서 주Keeper 노드를 다시 시작합니다.
- DC-2의 모든 JoKeeper 노드에서 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의 주Keeper 노드에서 주Keeper 구성 변경사항을 되돌릴 수 있습니다.
솔루션 #3
- 클러스터의 JoKeeper 노드가 시작되지 않은 경우 다시 시작합니다.
- JoKeeper 로그를 확인하여 주Keeper 노드가 다운된 이유를 파악합니다.
JoKeeper 로그는 다음 디렉터리에서 확인할 수 있습니다.
$ 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
- 중지되었을 수 있는 주Keeper 노드의 원인을 해결하려면 Apigee 지원팀에 문의하고 주Keeper 로그를 제공하세요.
JoKeeper 노드가 요청을 처리하지 않음
앙상블의 JoKeeper 노드가 비정상이 되어 클라이언트 요청에 응답하지 못할 수 있습니다. 다음과 같은 이유로 발생할 수 있습니다.
- 노드를 다시 시작하지 않고 중지되었습니다.
- 자동 시작이 사용 설정되지 않은 상태로 노드가 재부팅되었습니다.
- 노드의 시스템 부하로 인해 노드가 다운되거나 비정상이 되었습니다.
진단
- 각 JoKeeper 노드에서 다음 JoKeeper 상태 확인 명령어를 실행하고 출력을 확인합니다.
-
$ echo "ruok" | nc localhost 2181
출력 예시:
$ echo "ruok" | nc localhost 2181 imok
-
echo srvr | nc localhost 2181
JoKeeper 노드가 리더인지 팔로어인지 확인하려면 모드를 확인하세요.
올인원 단일 JoKeeper 노드의 출력 예:
$ 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
이 명령어는 동물원키퍼 클러스터의 상태를 확인하는 데 사용할 수 있는 주Keeper 변수를 나열합니다.
출력 예시:
$ 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
이 명령어는 JoKeeper 연결에 관한 자세한 세부정보를 제공합니다.
출력 예시:
$ 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
그런 다음 특정 JoKeeper 노드가 요청을 처리하고 있지 않음을 나타냅니다.
-
- 특정 노드의 JoKeeper 로그를 확인하고 주Keeper가 다운되는 원인이 되는 오류를 찾습니다. JoKeeper 로그는
$ 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
디렉터리에서 확인할 수 있습니다.
해상도
- 클러스터의 다른 모든 JoKeeper 노드를 하나씩 다시 시작합니다.
- 각 노드에서 JoKeeper 상태 점검 명령어를 다시 실행하고 예상한 결과가 나오는지 확인합니다.
시스템 로드가 지속되거나 다시 시작해도 문제가 해결되지 않는 경우 Apigee 지원팀에 문의하여 시스템 로드의 원인을 해결하세요.