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

<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 노드에는 두 개의 파일이 있습니다.

  1. /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
    
    드림
  2. /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
    

진단

  1. 다음에서 주키퍼 로그(/opt/apigee/var/log/apigee-zookeeper/zookeeper.log)를 확인해 보세요. 오류가 발생했습니다.
  2. '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)
    
  3. /opt/apigee/apigee-zookeeper/conf/zoo.cfg 파일을 확인하고 다음을 기록합니다. server.# 을 반환합니다.
  4. /opt/apigee/data/apigee-zookeeper/data/myid 파일에서 텍스트가 2단계에서 기록한 server.#과 일치합니다.
  5. 불일치가 있는 경우 동물원 Keeper가 제대로 작동하지 않는 원인을 확인한 것입니다. 시작합니다

해상도

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

주키퍼 포트 사용 중

진단

  1. 주키퍼 로그 /opt/apigee/var/log/apigee-zookeeper/zookeeper.log 확인 오류가 발생했습니다.
  2. 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)
    
  3. 아래 netstat 명령어를 사용하여 동물원Keeper 포트 2181이 실제로 사용되고 있는지 확인합니다. 다른 프로세스에 의해 생성됩니다.
    netstat -an | grep 2181
    

해상도

주키퍼 포트 2181이 아직 사용 중인 경우 아래 단계에 따라 이 문제를 해결하세요. 문제:

  1. 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
    
  2. pid 및 lock 파일이 있는 경우 이를 정리합니다.
    /opt/apigee/var/run/apigee-zookeeper/apigee-zookeeper.pid
    /opt/apigee/var/run/apigee-zookeeper/apigee-zookeeper.lock
    
  3. 주키퍼를 다시 시작합니다.
    /opt/apigee/apigee-service/bin/apigee-service apigee-zookeeper restart
    

apigee-zookeeper.pid 파일의 프로세스 ID가 잘못되었습니다.

주키퍼를 중지/다시 시작하려고 하면 다음과 같은 이유로 오류가 발생할 수 있습니다. apigee-zookeeper.pid 파일에 현재 PID가 아닌 이전/잘못된 PID가 포함되어 있습니다. 실행 중입니다. 이 상황은 ZooKeeper 프로세스가 예기치 않게 종료된 경우 또는 갑자기 apigee-zookeeper.pid 파일이 삭제되지 않았습니다.

진단

  1. 다음을 실행하여 현재 실행 중인 주Keeper 프로세스의 프로세스 ID를 가져옵니다. ps 명령어:
    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를 올바른 프로세스 ID로 바꿉니다. ps 명령에서 얻은 프로세스 ID입니다 (위의 1단계).
  2. 주키퍼를 다시 시작합니다.
    /opt/apigee/apigee-service/bin/apigee-service apigee-zookeeper restart
    

주키퍼 리더 선거 실패

진단

진단 방법:

  1. 다음에서 주키퍼 로그(/opt/apigee/var/log/apigee-zookeeper/zookeeper.log)를 확인해 보세요. 오류가 발생했습니다.
  2. 주키퍼에서 있습니다
  3. /opt/apigee/apigee-zookeeper/conf/zoo.cfg에서 클러스터에 있는 동물원은 server.# 매개변수에 적절한 번호 및 IP 주소를 가지고 있습니다. 또한 리더 선거가 성공하려면 투표자가 3명 이상이어야 합니다. 투표자 수는 홀수여야 합니다. 투표자가 너무 적은 경우(예: 2명뿐) 단 2명의 유권자 중 리더를 결정하기 위한 쿼럼에 도달할 수 없습니다.

해상도

일반적으로 ZaKeeper 선거 실패는 myid가 잘못 구성된 경우 발생합니다. 다음의 해상도 사용 선거 실패를 해결하기 위해 ZooKeeper myid가 잘못 구성됨

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