<ph type="x-smartling-placeholder"></ph>
현재 Apigee Edge 문서를 보고 있습니다.
Apigee X 문서. 정보
증상
ZooKeeper 프로세스를 시작할 수 없습니다.
오류 메시지
ZaKeeper 프로세스를 시작하려고 하면 다음과 같은 오류 메시지가 반환됩니다. 다음과 같이 주키퍼를 시작할 수 없음을 나타냅니다.
+ apigee-service apigee-zookeeper status apigee-service: apigee-zookeeper: Not running (DEAD) apigee-all: Error: status failed on [apigee-zookeeper]
가능한 원인
다음 표에는 이 문제의 가능한 원인이 나와 있습니다.
원인 | 대상: |
---|---|
잘못 구성된 ZaKeeper myid | Edge 프라이빗 클라우드 사용자 |
ZooKeeper 포트 사용 중 | Edge 프라이빗 클라우드 사용자 |
Apigee-zookeeper.pid 파일의 프로세스 ID가 잘못되었습니다. | Edge 프라이빗 클라우드 사용자 |
ZooKeeper Leader 선거 실패 | Edge 프라이빗 클라우드 사용자 |
표에 있는 링크를 클릭하여 원인에 대한 가능한 해결 방법을 확인하세요.
잘못 구성된 동물원Keeper myid
다음 섹션에서는 myid 파일에 대한 개요를 제공하고, myid 파일을 진단 및 진단하는 방법을 설명합니다. 잘못된 구성 문제를 해결할 수 있습니다.
myid 파일 개요
각 ZaKeeper 노드에는 두 개의 파일이 있습니다.
/opt/apigee/apigee-zookeeper/conf/zoo.cfg
파일: 클러스터에 있는 모든 주키퍼 노드의 IP입니다.예를 들어
/opt/apigee/apigee-zookeeper/conf/zoo.cfg
에 클러스터에 있는 주키퍼 노드 3개의 IP는 다음과 같습니다. 드림server.1=11.11.11.11:2888:3888 server.2=22.22.22.22:2888:3888 server.3=33.33.33.33:2888:3888
/opt/apigee/data/apigee-zookeeper/data/myid
파일에는 특정 주키퍼 노드의 서버 번호에 해당하는 텍스트입니다. 신생아 서버 1에는 '1'이라는 텍스트가 포함됩니다. 다른 것은 없습니다. ID는 앙상블 내에서 고유해야 합니다. 1에서 255 사이의 값을 가져야 합니다.예를 들어,ZooKeeper server.1에서
/opt/apigee/data/apigee-zookeeper/data/myid
파일에는 텍스트 1만 포함되어야 합니다. 다음과 같습니다.$ cat myid 1
진단
- 다음에서 주키퍼 로그(
/opt/apigee/var/log/apigee-zookeeper/zookeeper.log
)를 확인해 보세요. 오류가 발생했습니다. - 'Connectionbreak for id #, my id = #'와 유사한 WARN 메시지가 표시되면
이 문제의 가능한 원인은 서버 #
잘못 구성되었거나 손상되었습니다.
[myid:2] - WARN [RecvWorker:2:QuorumCnxManager$RecvWorker@762] - Connection broken for id 2, my id = 2, error = java.io.EOFException at java.io.DataInputStream.readInt(DataInputStream.java:375) at org.apache.zookeeper.server.quorum.QuorumCnxManager$RecvWorker. run(QuorumCnxManager.java:747)
/opt/apigee/apigee-zookeeper/conf/zoo.cfg
파일을 확인하고 다음을 기록합니다. server.# 을 반환합니다./opt/apigee/data/apigee-zookeeper/data/myid
파일에서 텍스트가 2단계에서 기록한 server.#과 일치합니다.- 불일치가 있는 경우 동물원 Keeper가 제대로 작동하지 않는 원인을 확인한 것입니다. 시작합니다
해상도
myid 파일이 잘못 구성된 경우 myid 파일을 수정하고 값을 zoo.cfg의 server.# 매개변수를 나타내는 올바른 텍스트를 확인합니다.
주키퍼 포트 사용 중
진단
- 주키퍼 로그
/opt/apigee/var/log/apigee-zookeeper/zookeeper.log
확인 오류가 발생했습니다. java.net.BindException: Address already in use
예외가 적용되는 경우 포트 #2181에 바인딩하면 아래 그림에 나와 있는 것처럼 주키퍼가 포트 2181이 다른 프로세스에서 사용되고 있는지 확인합니다. 따라서 ZooKeeper를 시작할 수 없습니다.2017-04-26 07:00:10,420 [myid:3] - INFO [main:NIOServerCnxnFactory@94] - binding to port 0.0.0.0/0.0.0.0:2181 2017-04-26 07:00:10,421 [myid:3] - ERROR [main:QuorumPeerMain@89] - Unexpected exception, exiting abnormally java.net.BindException: Address already in use at sun.nio.ch.Net.bind0(Native Method) at sun.nio.ch.Net.bind(Net.java:433) at sun.nio.ch.Net.bind(Net.java:425) at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:223) at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:74) at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:67) at org.apache.zookeeper.server.NIOServerCnxnFactory.configure(NIOServerCnxnFactory.java:95) at org.apache.zookeeper.server.quorum.QuorumPeerMain.runFromConfig(QuorumPeerMain.java:130) at org.apache.zookeeper.server.quorum.QuorumPeerMain.initializeAndRun(QuorumPeerMain.java:111) at org.apache.zookeeper.server.quorum.QuorumPeerMain.main(QuorumPeerMain.java:78)
- 아래 netstat 명령어를 사용하여 동물원Keeper 포트 2181이 실제로 사용되고 있는지 확인합니다.
다른 프로세스에 의해 생성됩니다.
netstat -an | grep 2181
해상도
주키퍼 포트 2181이 아직 사용 중인 경우 아래 단계에 따라 이 문제를 해결하세요. 문제:
netstat
명령어를 사용하여 포트 2181을 보유한 프로세스를 찾습니다. 주키퍼 포트 2181을 사용 중인 프로세스를 종료합니다.$ netstat -antp | grep 2181 tcp 0 0 0.0.0.0:2181 0.0.0.0:* LISTEN 28016/java <defunct> $ kill -9 28016
- pid 및 lock 파일이 있는 경우 이를 정리합니다.
/opt/apigee/var/run/apigee-zookeeper/apigee-zookeeper.pid /opt/apigee/var/run/apigee-zookeeper/apigee-zookeeper.lock
- 주키퍼를 다시 시작합니다.
/opt/apigee/apigee-service/bin/apigee-service apigee-zookeeper restart
apigee-zookeeper.pid 파일의 프로세스 ID가 잘못되었습니다.
주키퍼를 중지/다시 시작하려고 하면 다음과 같은 이유로 오류가 발생할 수 있습니다.
apigee-zookeeper.pid
파일에 현재 PID가 아닌 이전/잘못된 PID가 포함되어 있습니다.
실행 중입니다. 이 상황은 ZooKeeper 프로세스가 예기치 않게 종료된 경우 또는
갑자기 apigee-zookeeper.pid
파일이 삭제되지 않았습니다.
진단
- 다음을 실행하여 현재 실행 중인 주Keeper 프로세스의 프로세스 ID를 가져옵니다.
ps
명령어:ps -ef | grep zookeeper
/opt/apigee/var/run/apigee-ZooKeeper/apigee-zookeeper.pid
파일이 있는지 확인합니다. 존재하지 않습니다. ID가 있으면 이 파일에 쓴 프로세스 ID를 기록해 둡니다.- 1단계와 2단계에서 가져온 프로세스 ID를 비교합니다. 이 둘이 다르다면 그 원인은
이 문제에 대한
apigee-zookeeper.pid file.
에 잘못된 프로세스 ID가 있습니다.
해상도
- apigee-zookeeper.pid 파일을 수정하고 잘못된 프로세스 ID를 올바른 프로세스 ID로 바꿉니다. ps 명령에서 얻은 프로세스 ID입니다 (위의 1단계).
- 주키퍼를 다시 시작합니다.
/opt/apigee/apigee-service/bin/apigee-service apigee-zookeeper restart
주키퍼 리더 선거 실패
진단
진단 방법:
- 다음에서 주키퍼 로그(
/opt/apigee/var/log/apigee-zookeeper/zookeeper.log
)를 확인해 보세요. 오류가 발생했습니다. - 주키퍼에서 있습니다
/opt/apigee/apigee-zookeeper/conf/zoo.cfg
에서 클러스터에 있는 동물원은 server.# 매개변수에 적절한 번호 및 IP 주소를 가지고 있습니다. 또한 리더 선거가 성공하려면 투표자가 3명 이상이어야 합니다. 투표자 수는 홀수여야 합니다. 투표자가 너무 적은 경우(예: 2명뿐) 단 2명의 유권자 중 리더를 결정하기 위한 쿼럼에 도달할 수 없습니다.
해상도
일반적으로 ZaKeeper 선거 실패는 myid가 잘못 구성된 경우 발생합니다. 다음의 해상도 사용 선거 실패를 해결하기 위해 ZooKeeper myid가 잘못 구성됨
문제가 지속되고 추가 진단이 필요한 경우 Apigee Edge 지원팀에 문의하세요.