동물원키퍼를 시작할 수 없음

현재 Apigee Edge 문서가 표시되고 있습니다.
Apigee X 문서로 이동
정보

증상

JoKeeper 프로세스를 시작할 수 없습니다.

오류 메시지

주Keeper 프로세스를 시작하려고 하면 동물원을 시작할 수 없음을 나타내는 다음 오류 메시지가 반환됩니다.

+ apigee-service apigee-zookeeper status
apigee-service: apigee-zookeeper: Not running (DEAD)
apigee-all: Error: status failed on [apigee-zookeeper]

가능한 원인

다음 표에는 이 문제의 가능한 원인이 나와 있습니다.

원인 대상:
잘못 구성된 JoKeeper myid Edge Private Cloud 사용자
ZooKeeper 포트 사용 중 Edge Private Cloud 사용자
apigee-zookeeper.pid 파일의 프로세스 ID가 잘못됨 Edge Private Cloud 사용자
ZooKeeper 리더 선거 실패 Edge Private Cloud 사용자

표에 있는 링크를 클릭하면 가능한 해결 방법을 확인할 수 있습니다.

잘못 구성된 JoKeeper myid

다음 섹션에서는 myid 파일을 간략하게 설명하고 잘못된 구성 문제를 진단하고 해결하는 방법을 설명합니다.

myid 파일 개요

각 JoKeeper 노드에는 다음과 같은 두 개의 파일이 있습니다.

  1. 클러스터에 있는 모든 JoKeeper 노드의 IP 목록이 포함된 /opt/apigee/apigee-zookeeper/conf/zoo.cfg 파일입니다.

    예를 들어 /opt/apigee/apigee-zookeeper/conf/zoo.cfg에 다음과 같이 클러스터에 속한 3개의 JoKeeper 노드 IP의 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
    
  2. /opt/apigee/data/apigee-zookeeper/data/myid 파일에는 특정 JoKeeper 노드의 서버 번호에 해당하는 한 줄의 텍스트가 포함됩니다. 서버 1의 myid에는 텍스트 '1'만 포함됩니다. ID는 앙상블 내에서 고유해야 하며 1에서 255 사이의 값을 가져야 합니다.

    예를 들어, 아래에서 보이는 것과 같이zooKeeper server.1에서 /opt/apigee/data/apigee-zookeeper/data/myid 파일에는 텍스트 1만 포함되어야 합니다.

    $ cat myid
    1
    

진단

  1. JoKeeper 로그 /opt/apigee/var/log/apigee-zookeeper/zookeeper.log에서 오류를 확인합니다.
  2. 아래 그림과 같이 '연결 끊김: id #, my 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)
    
  3. /opt/apigee/apigee-zookeeper/conf/zoo.cfg 파일을 확인하고 현재 JoKeeper 노드의 server.# 를 기록합니다.
  4. /opt/apigee/data/apigee-zookeeper/data/myid 파일을 확인하고 이 파일의 텍스트가 2단계에 언급된 server.#와 일치하는지 확인합니다.
  5. 불일치가 있는 경우 주Keeper가 시작되지 않는 원인을 확인한 것입니다.

해상도

myid 파일이 잘못 구성된 경우 myid 파일을 수정하고 값을 zoo.cfg의 server.# 매개변수를 나타내는 올바른 텍스트로 바꿉니다.

JoKeeper 포트 사용 중

진단

  1. JoKeeper 로그 /opt/apigee/var/log/apigee-zookeeper/zookeeper.log에서 오류를 확인합니다.
  2. 아래 그림과 같이 포트 #2181에 바인딩하는 동안 예외 java.net.BindException: Address already in use가 보인다면 이는 다른 프로세스에서 ZooKeeper 포트 2181을 사용 중임을 나타냅니다. 따라서 JoKeeper를 시작할 수 없습니다.
    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)
    
  3. 아래 netstat 명령어를 사용하여 주Keeper 포트 2181이 다른 프로세스에서 실제로 사용되고 있는지 확인합니다.
    netstat -an | grep 2181
    

해상도

JoKeeper 포트 2181을 아직 사용하고 있다면 아래 단계에 따라 이 문제를 해결하세요.

  1. netstat 명령어를 사용하여 포트 2181을 유지하고 있는 프로세스를 찾습니다. JoKeeper 포트 2181을 사용하는 프로세스를 종료합니다.
    $ netstat -antp | grep 2181
    tcp        0      0 0.0.0.0:2181            0.0.0.0:*
    LISTEN      28016/java <defunct>
    $ kill -9 28016
    
  2. pid 및 잠금 파일이 있는 경우 정리합니다.
    /opt/apigee/var/run/apigee-zookeeper/apigee-zookeeper.pid
    /opt/apigee/var/run/apigee-zookeeper/apigee-zookeeper.lock
    
  3. 다음과 같이 주Keeper를 다시 시작합니다.
    /opt/apigee/apigee-service/bin/apigee-service apigee-zookeeper restart
    

apigee-zookeeper.pid 파일의 프로세스 ID가 잘못됨

주Keeper를 중지/다시 시작하려고 하면 apigee-zookeeper.pid 파일에 현재 실행 중인 JoKeeper 프로세스의 pid가 아닌 오래되거나 잘못된 pid가 포함되어 있기 때문에 실패할 수 있습니다. 이 문제는 주Keeper 프로세스가 예기치 않게 또는 어떤 이유로든 갑자기 종료되고 apigee-zookeeper.pid 파일이 삭제되지 않은 경우에 발생할 수 있습니다.

진단

  1. ps 명령어를 실행하여 현재 실행 중인 JoKeeper 프로세스의 프로세스 ID를 가져옵니다.
    ps -ef | grep zookeeper
    
  2. /opt/apigee/var/run/apigee-ZooKeeper/apigee-zookeeper.pid 파일이 있는지 확인합니다. 프로세스 ID가 있으면 이 파일에 쓴 프로세스 ID를 기록해 둡니다.
  3. 1단계와 2단계에서 가져온 프로세스 ID를 비교합니다. 서로 다른 경우 apigee-zookeeper.pid file.에 잘못된 프로세스 ID가 있는 것이 문제의 원인입니다.

해상도

  1. apigee-zookeeper.pid 파일을 수정하고, 잘못된 프로세스 ID를 ps 명령어에서 가져온 올바른 프로세스 ID로 바꿉니다 (위의 1단계).
  2. 다음과 같이 주Keeper를 다시 시작합니다.
    /opt/apigee/apigee-service/bin/apigee-service apigee-zookeeper restart
    

주키퍼 리더 선거 실패

진단

진단 방법:

  1. JoKeeper 로그 /opt/apigee/var/log/apigee-zookeeper/zookeeper.log에서 오류를 확인합니다.
  2. 리더의 주Keeper 선택에 실패할 수 있는 구성 변경이 있는지 확인합니다.
  3. /opt/apigee/apigee-zookeeper/conf/zoo.cfg를 확인하고 클러스터의 모든 JoKeeper에 server.# 매개변수에 적절한 수와 IP 주소가 있는지 확인합니다. 또한 지도자 선거가 성공하려면 최소 유권자가 3명 이상이어야 하며 유권자 수는 홀수여야 합니다. 유권자가 2명뿐인 것처럼 유권자가 너무 적으면 2명의 유권자 중에서 당선자를 결정할 수 없습니다.

해상도

일반적으로 JoKeeper 선거 실패는 잘못 구성된 myid로 인해 발생합니다. 선거 실패를 해결하려면 잘못 구성된 JoKeeper myid의 해결 방법을 사용하세요.

문제가 지속되어 추가 진단이 필요한 경우 Apigee Edge 지원팀에 문의하세요.