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

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

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

진단

  1. ZooKeeper 로그 /opt/apigee/var/log/apigee-zookeeper/zookeeper.log에서 오류를 확인합니다.
  2. 아래 그림과 같이 '# 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)
  3. /opt/apigee/apigee-zookeeper/conf/zoo.cfg 파일을 확인하고 현재 ZooKeeper 노드의 server.# 을 기록합니다.
  4. /opt/apigee/data/apigee-zookeeper/data/myid 파일을 확인하고 이 파일의 텍스트가 2단계에서 기록한 server.#과 일치하는지 확인합니다.
  5. 일치하지 않는 경우 ZooKeeper를 시작하지 못하는 원인을 파악한 것입니다.

해결 방법

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

사용 중인 ZooKeeper 포트

진단

  1. ZooKeeper 로그 /opt/apigee/var/log/apigee-zookeeper/zookeeper.log에서 오류를 확인합니다.
  2. 아래 그림과 같이 포트 #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)
  3. 아래 netstat 명령어를 사용하여 ZooKeeper 포트 2181이 실제로 다른 프로세스에서 사용되고 있는지 확인합니다.
    netstat -an | grep 2181

해결 방법

ZooKeeper 포트 2181이 계속 사용 중인 경우 아래 단계에 따라 이 문제를 해결합니다 .

  1. 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
  2. pid 및 잠금 파일이 있는 경우 정리합니다.
    /opt/apigee/var/run/apigee-zookeeper/apigee-zookeeper.pid
    /opt/apigee/var/run/apigee-zookeeper/apigee-zookeeper.lock
  3. 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 파일이 삭제되지 않은 경우에 발생할 수 있습니다.

진단

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

해결 방법

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

ZooKeeper 리더 선택 실패

진단

진단하려면 다음 단계를 따르세요.

  1. ZooKeeper 로그 /opt/apigee/var/log/apigee-zookeeper/zookeeper.log에서 오류를 확인합니다.
  2. ZooKeeper 리더 선택이 실패할 수 있는 구성 변경사항이 있는지 확인합니다.
  3. /opt/apigee/apigee-zookeeper/conf/zoo.cfg를 확인하고 클러스터의 모든 ZooKeeper에 server.# 매개변수의 적절한 수와 IP 주소가 있는지 확인합니다. 또한 리더 선택이 성공하려면 최소 3명의 투표자가 필요하며 투표자 수는 홀수여야 합니다. 투표자가 너무 적으면(예: 투표자 2명 ) 투표자 2명 중에서 리더를 결정하기 위한 정족수를 충족할 수 없습니다.

해결 방법

일반적으로 ZooKeeper 선택 실패는 잘못 구성된 myid로 인해 발생합니다. 잘못 구성된 ZooKeeper myid의 해결 방법을 사용하여 선택 실패를 해결합니다.

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