Apigee Edge 문서입니다.
Go to the
Apigee X 문서로 이동합니다. info
증상
ZooKeeper 프로세스를 시작할 수 없습니다.
오류 메시지
ZooKeeper 프로세스를 시작하려고 하면 ZooKeeper를 시작할 수 없음을 나타내는 다음 오류 메시지가 반환됩니다.
+ apigee-service apigee-zookeeper status apigee-service: apigee-zookeeper: Not running (DEAD) apigee-all: Error: status failed on [apigee-zookeeper]
가능한 원인
다음 표에는 이 문제의 가능한 원인이 나와 있습니다.
| 원인 | 대상: |
|---|---|
| 잘못 구성된 ZooKeeper myid | Edge Private Cloud 사용자 |
| 사용 중인 ZooKeeper 포트 | Edge Private Cloud 사용자 |
| apigee-zookeeper.pid 파일의 잘못된 프로세스 ID | Edge Private Cloud 사용자 |
| ZooKeeper 리더 선택 실패 | Edge Private Cloud 사용자 |
표에서 링크를 클릭하여 해당 원인에 대한 가능한 해결 방법을 확인합니다.
잘못 구성된 ZooKeeper myid
다음 섹션에서는 myid 파일의 개요를 제공하고 잘못된 구성 문제를 진단하고 해결하는 방법을 설명합니다.
myid 파일 개요
각 ZooKeeper 노드에는 다음 두 개의 파일이 있습니다.
/opt/apigee/apigee-zookeeper/conf/zoo.cfg파일에는 클러스터의 모든 ZooKeeper 노드의 IP 목록이 포함되어 있습니다.예를 들어
/opt/apigee/apigee-zookeeper/conf/zoo.cfg에 클러스터에 속한 3개의 ZooKeeper 노드의 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파일에는 특정 ZooKeeper 노드의 서버 번호에 해당하는 텍스트 한 줄이 포함되어 있습니다. 서버 1의 myid에는 ' ' 텍스트만 포함되어야 합니다. ID는 앙상블 내에서 고유해야 하며 값은 1~255여야 합니다.예를 들어 ZooKeeper server.1에서
/opt/apigee/data/apigee-zookeeper/data/myid파일에는 아래와 같이 텍스트 1 만 포함되어야 합니다.$ cat myid 1
진단
- ZooKeeper 로그
/opt/apigee/var/log/apigee-zookeeper/zookeeper.log에서 오류를 확인합니다. - 아래 그림과 같이 '# ID의 연결이 끊어졌습니다. 내 ID = #'과 유사한 WARN 메시지가 표시되면
이 문제의 가능한 원인은 myid 파일의 서버 #
이 잘못 구성되었거나 손상되었을 수 있습니다.
[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파일을 확인하고 현재 ZooKeeper 노드의 server.# 을 기록합니다./opt/apigee/data/apigee-zookeeper/data/myid파일을 확인하고 이 파일의 텍스트가 2단계에서 기록한 server.#과 일치하는지 확인합니다.- 일치하지 않는 경우 ZooKeeper를 시작하지 못하는 원인을 파악한 것입니다.
해결 방법
myid 파일이 잘못 구성된 경우 myid 파일을 수정하고 값을 zoo.cfg의 server.# 매개변수를 나타내는 올바른 텍스트로 바꿉니다.
사용 중인 ZooKeeper 포트
진단
- ZooKeeper 로그
/opt/apigee/var/log/apigee-zookeeper/zookeeper.log에서 오류를 확인합니다. - 아래 그림과 같이 포트 #2181에 바인딩하는 동안
java.net.BindException: Address already in use예외가 표시되면 ZooKeeper 포트 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 명령어를 사용하여 ZooKeeper 포트 2181이 실제로 다른 프로세스에서 사용되고 있는지 확인합니다.
netstat -an | grep 2181
해결 방법
ZooKeeper 포트 2181이 계속 사용 중인 경우 아래 단계에 따라 이 문제를 해결합니다 .
netstat명령어를 사용하여 포트 2181을 보유하고 있는 프로세스를 찾습니다. ZooKeeper 포트 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 및 잠금 파일이 있는 경우 정리합니다.
/opt/apigee/var/run/apigee-zookeeper/apigee-zookeeper.pid /opt/apigee/var/run/apigee-zookeeper/apigee-zookeeper.lock
- ZooKeeper를 다시 시작합니다.
/opt/apigee/apigee-service/bin/apigee-service apigee-zookeeper restart
apigee-zookeeper.pid 파일의 잘못된 프로세스 ID
ZooKeeper를 중지/다시 시작하려고 하면
apigee-zookeeper.pid 파일에 현재 실행 중인 ZooKeeper 프로세스의 pid가 아닌 이전/잘못된 pid가 포함되어 있어 실패할 수 있습니다. 이는 ZooKeeper 프로세스가 어떤 이유로 예기치 않게 또는
갑자기 종료되고 apigee-zookeeper.pid 파일이 삭제되지 않은 경우에 발생할 수 있습니다.
진단
- ` `
ps명령어를 실행하여 현재 실행 중인 ZooKeeper 프로세스의 프로세스 ID를 가져옵니다.ps -ef | grep zookeeper
/opt/apigee/var/run/apigee-ZooKeeper/apigee-zookeeper.pid파일 이 있는지 확인합니다. 있는 경우 이 파일에 작성된 프로세스 ID를 기록합니다.- 1단계와 2단계에서 가져온 프로세스 ID를 비교합니다. 프로세스 ID가 다르면 이 문제의 원인은
`apigee-zookeeper.pid 파일`에 잘못된 프로세스 ID가 있는 것입니다.
apigee-zookeeper.pid file.
해결 방법
- apigee-zookeeper.pid 파일을 수정하고 잘못된 프로세스 ID를 ps 명령어 (위의 1단계)에서 가져온 올바른 프로세스 ID로 바꿉니다.
- ZooKeeper를 다시 시작합니다.
/opt/apigee/apigee-service/bin/apigee-service apigee-zookeeper restart
ZooKeeper 리더 선택 실패
진단
진단하려면 다음 단계를 따르세요.
- ZooKeeper 로그
/opt/apigee/var/log/apigee-zookeeper/zookeeper.log에서 오류를 확인합니다. - ZooKeeper 리더 선택이 실패할 수 있는 구성 변경사항이 있는지 확인합니다.
/opt/apigee/apigee-zookeeper/conf/zoo.cfg를 확인하고 클러스터의 모든 ZooKeeper에 server.# 매개변수의 적절한 수와 IP 주소가 있는지 확인합니다. 또한 리더 선택이 성공하려면 최소 3명의 투표자가 필요하며 투표자 수는 홀수여야 합니다. 투표자가 너무 적으면(예: 투표자 2명 ) 투표자 2명 중에서 리더를 결정하기 위한 정족수를 충족할 수 없습니다.
해결 방법
일반적으로 ZooKeeper 선택 실패는 잘못 구성된 myid로 인해 발생합니다. 잘못 구성된 ZooKeeper myid의 해결 방법을 사용하여 선택 실패를 해결합니다.
문제가 지속되고 추가 진단이 필요한 경우 Apigee Edge 지원팀에 문의하세요.