Zookeeper 연결 손실 오류

Apigee Edge 문서입니다.
Go to the Apigee X 문서로 이동합니다.
info

증상

ZooKeeper 연결 문제는 다음과 같은 다양한 증상으로 나타날 수 있습니다.

  1. API 프록시 배포 오류
  2. 관리 API 호출이 5XX 오류로 실패함
  3. 라우터 또는 메시지 프로세서가 시작되지 않음
  4. 애널리틱스 구성요소가 system.logs에서 ZooKeeper 연결 손실을 보고함

오류 메시지

다음은 ZooKeeper 노드에 연결이 끊어졌을 때 관찰될 수 있는 오류 메시지의 예를 제공합니다.

  1. ZooKeeper 연결 손실로 인해 API 프록시 배포 가 실패하면 관리 서버 로그에 다음 오류가 반환됩니다.
    org: env: main INFO ZOOKEEPER - ZooKeeperServiceImpl.exists() :
    Retry path existence path:
      /regions/dc-1/pods/analytics/servers/692afe93-8010-45c6-b37d-e4e05b6b2eb5/reachable,
      reason: KeeperErrorCode = ConnectionLoss
    org: env: main ERROR ZOOKEEPER - ZooKeeperServiceImpl.exists() :
      Could not detect existence of path:
      /regions/dc-1/pods/analytics/servers/692afe93-8010-45c6-b37d-e4e05b6b2eb5/reachable ,
      reason: KeeperErrorCode = ConnectionLoss
    org: env: main ERROR KERNEL.DEPLOYMENT - ServiceDeployer.startService() :
      ServiceDeployer.deploy() : Got a life cycle exception while starting service
      [ServerRegistrationService, Error while checking path existence for path :
      /regions/dc-1/pods/analytics/servers/692afe93-8010-45c6-b37d-e4e05b6b2eb5/reachable] :
      com.apigee.zookeeper.ZooKeeperException{ code = zookeeper.ErrorCheckingPathExis tence,
      message = Error while checking path existence for path :
      /regions/dc-1/pods/analytics/servers/692afe93-8010-45c6-b37d-e4e05b6b2eb5/reachable,
      associated contexts = []} 2015-03-25 10:22:39,811
    org: env: main ERROR KERNEL - MicroKernel.deployAll() : MicroKernel.deployAll() :
    Error in deploying the deployment : EventService com.apigee.zookeeper.ZooKeeperException:
    Error while checking path existence for path :
      /regions/dc-1/pods/analytics/servers/692afe93-8010-45c6-b37d-e4e05b6b2eb5/reachable
      at com.apigee.zookeeper.impl.ZooKeeperServiceImpl.exists(ZooKeeperServiceImpl.java:339)
      ~[zookeeper-1.0.0.jar:na] at com.apigee.zookeeper.impl.ZooKeeperServiceImpl.exists(
      ZooKeeperServiceImpl.java:323) ~[zookeeper-1.0.0.jar:na] at ... snipped
  2. 시작 중에 라우터와 메시지 프로세서가 ZooKeeper에 연결됩니다. ZooKeeper에 연결 문제가 있으면 이러한 구성요소가 다음 오류로 시작되지 않습니다.
    2017-08-01 23:20:00,404  CuratorFramework-0 ERROR o.a.c.f.i.CuratorFrameworkImpl
      - CuratorFrameworkImpl.logError() : Background operation retry gave up
    org.apache.zookeeper.KeeperException$ConnectionLossException: KeeperErrorCode = ConnectionLoss
      at org.apache.zookeeper.KeeperException.create(KeeperException.java:99) ~[zookeeper-3.4.6.jar:3.4.6-1569965]
      at org.apache.curator.framework.imps.CuratorFrameworkImpl.checkBackgroundRetry(CuratorFrameworkImpl.java:710) [curator-framework-2.5.0.jar:na]
      at org.apache.curator.framework.imps.CuratorFrameworkImpl.performBackgroundOperation(CuratorFrameworkImpl.java:827) [curator-framework-2.5.0.jar:na]
      at org.apache.curator.framework.imps.CuratorFrameworkImpl.backgroundOperationsLoop(CuratorFrameworkImpl.java:793) [curator-framework-2.5.0.jar:na]
      at org.apache.curator.framework.imps.CuratorFrameworkImpl.access$400(CuratorFrameworkImpl.java:57) [curator-framework-2.5.0.jar:na]
      at org.apache.curator.framework.imps.CuratorFrameworkImpl$4.call(CuratorFrameworkImpl.java:275) [curator-framework-2.5.0.jar:na]
      at java.util.concurrent.FutureTask.run(FutureTask.java:266) [na:1.8.0_131]
      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [na:1.8.0_131]
      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [na:1.8.0_131]
      at java.lang.Thread.run(Thread.java:748) [na:1.8.0_131]
  3. Edge UI에 API 프록시의 배포 상태를 확인할 수 없음을 나타내는 다음 오류가 표시될 수 있습니다.
    Error Fetching Deployments
    Error while checking path existence for path: path

가능한 원인

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

원인 대상:
여러 데이터 센터 간의 네트워크 연결 문제 Edge Private Cloud 사용자
ZooKeeper 노드가 요청을 처리하지 않음 Edge Private Cloud 사용자

표에서 링크를 클릭하여 해당 원인에 대한 가능한 해결 방법을 확인합니다.

여러 데이터 센터 간의 네트워크 연결 문제

진단

ZooKeeper 클러스터에는 DC-1, DC-2와 같이 여러 리전/데이터 센터에 걸쳐 있는 노드가 있을 수 있습니다. 일반적인 Apigee Edge 2 DC 토폴로지에는 다음이 포함됩니다.

  • DC-1의 투표자로서 ZooKeeper 서버 1, 2, 3
  • DC-2의 투표자로서 ZooKeeper 4 및 5, 관찰자로서 ZooKeeper 6

DC-1 리전이 다운되거나 DC-1과 DC-2 간의 네트워크 연결이 끊어지면 ZooKeeper 노드가 DC-2에서 새 리더를 선택할 수 없으며 리더 노드와 통신할 수 없습니다. ZooKeeper 관찰자는 새 리더를 선택할 수 없으며 DC-2의 나머지 두 투표자 노드에는 새 리더를 선택할 수 있는 3개 이상의 투표자 노드의 정족수가 없습니다. 따라서 DC-2의 ZooKeeper는 요청을 처리할 수 없습니다. DC-2의 나머지 ZooKeeper 노드는 리더를 찾기 위해 ZooKeeper 투표자 노드에 다시 연결을 시도하는 루프를 계속 실행합니다.

해결 방법

지정된 순서대로 다음 해결 방법을 적용하여 이 문제를 해결합니다.

이러한 해결 방법을 시도한 후에도 문제를 해결할 수 없는 경우 Apigee 지원팀에 문의하세요.

해결 방법 1

  1. 네트워크 관리자와 협력하여 데이터 센터 간의 네트워크 연결 문제를 해결합니다.
  2. ZooKeeper 앙상블이 데이터 센터 간에 통신하고 ZooKeeper 리더를 선택할 수 있으면 노드가 정상 상태가 되고 요청을 처리할 수 있습니다.

해결 방법 2

  1. 네트워크 연결을 복구하는 데 시간이 걸리는 경우 해결 방법은 다운된 리전에서 ZooKeeper 노드를 재구성하는 것입니다. 예를 들어 이 리전의 3개 ZooKeeper 노드가 모두 투표자 노드가 되도록 DC-2에서 ZooKeeper 클러스터를 재구성하고 DC-1 리전의 ZooKeeper zoo.cfg에서 server.#을 삭제합니다.
    1. 다음 예에서 zoo.cfg는 DC-1이 미국 동부 리전을 나타내는 us-ea 호스트 이름을 사용하고 DC-2가 미국 서부 리전을 나타내는 us-wo 호스트 이름을 사용하는 두 리전의 노드를 구성합니다. (참고: 관련 구성만 표시됨)
      server.1=zk01ea.us-ea.4.apigee.com:2888:3888
      server.2=zk02ea.us-ea.4.apigee.com:2888:3888
      server.3=zk03ea.us-ea.4.apigee.com:2888:3888
      server.4=zk04wo.us-wo.4.apigee.com:2888:3888
      server.5=zk05wo.us-wo.4.apigee.com:2888:3888
      server.6=zk06wo.us-wo.4.apigee.com:2888:3888:observer

      위의 예에서 zoo.cfg를 다음과 같이 재구성합니다.

      server.1=zk04wo.us-wo.4.apigee.com:2888:3888
      server.2=zk05wo.us-wo.4.apigee.com:2888:3888
      server.3=zk06wo.us-wo.4.apigee.com:2888:3888
    2. 구성으로 코드를 사용하여 다음 내용으로 /opt/apigee/customer/application/zookeeper.properties 파일을 만듭니다.
      conf_zoo_quorum=server.1=zk04wo.us-wo.4.apigee.com:2888:3888\
      \nserver.2=zk05wo.us-wo.4.apigee.com:2888:3888\
      \nserver.3=zk06wo.us-wo.4.apigee.com:2888:3888\

    위에서 미국 동부의 노드가 삭제되고 미국 서부 노드가 투표자 노드로 승격됩니다. :observer 주석이 삭제되면

  2. /opt/apigee/apigee-zookeeper/conf/zoo.cfg 및 이전 /opt/apigee/customer/application/zookeeper.properties을 백업합니다.

    이러한 파일은 데이터 센터 간에 네트워크 연결이 다시 설정될 때 기본값을 복원하는 데 사용됩니다.

  3. 관찰자 노드의 관찰자 표기법을 사용 중지합니다. 이렇게 하려면 /opt/apigee/customer/application/zookeeper.properties 상단에 다음 구성을 추가합니다.

    conf_zoo_peertype=
  4. 다음과 같이 /opt/apigee/data/apigee-zookeeper/data/myid 파일을 수정합니다.

    • server.1의 경우 myid 내부의 항목을 4 에서 1 로 변경합니다.
    • server.2의 경우 myid5 에서 2 로 변경합니다.
    • server.3의 경우 myid6 에서 3 으로 변경합니다.
  5. ZooKeeper 클러스터를 재구성한 리전에서 ZooKeeper 노드를 다시 시작합니다.
  6. DC-2의 모든 ZooKeeper 노드에서 1b단계부터 5단계까지 위의 구성을 반복합니다.
  7. 노드가 리더와 함께 작동하는지 확인합니다.
    $ echo srvr | nc zk04wo.us-wo.4.apigee.com 2181
    > echo srvr | nc zk05wo.us-wo.4.apigee.com 2181
    > echo srvr | nc zk06wo.us-wo.4.apigee.com 2181

    이 명령어의 출력에는 리더인 경우 'mode' 뒤에 'leader'가, 팔로어인 경우 'follower'가 포함된 행이 포함됩니다.

    데이터 센터 간의 네트워크가 다시 설정되면 DC-2의 ZooKeeper 노드에서 ZooKeeper 구성 변경사항을 되돌릴 수 있습니다.

해결 방법 3

  1. 클러스터의 ZooKeeper 노드가 시작되지 않은 경우 다시 시작합니다.
  2. ZooKeeper 로그를 확인하여 ZooKeeper 노드가 다운된 이유를 확인합니다.

    ZooKeeper 로그는 다음 디렉터리에서 확인할 수 있습니다.

    $ cd /opt/apigee/var/log/apigee-zookeeper
    $ ls -l
    total 188
    -rw-r--r--. 1 apigee apigee   2715 Jul 22 19:51 apigee-zookeeper.log
    -rw-r--r--. 1 apigee apigee  10434 Jul 17 19:51 config.log
    -rw-r--r--. 1 apigee apigee 169640 Aug  1 19:51 zookeeper.log
  3. Apigee 지원팀에 문의하고 ZooKeeper 로그를 제공하여 중지되었을 수 있는 ZooKeeper 노드의 원인을 해결합니다.

ZooKeeper 노드가 요청을 처리하지 않음

앙상블의 ZooKeeper 노드가 비정상 상태가 되어 클라이언트 요청에 응답하지 못할 수 있습니다. 이는 다음과 같은 이유 때문일 수 있습니다.

  1. 노드가 다시 시작되지 않고 중지되었습니다.
  2. 자동 시작이 사용 설정되지 않은 상태에서 노드가 재부팅되었습니다.
  3. 노드의 시스템 부하로 인해 노드가 다운되거나 비정상 상태가 되었습니다.

진단

  1. 각 ZooKeeper 노드에서 다음 ZooKeeper 상태 확인 명령어를 실행하고 출력을 확인합니다.
    1. $ echo "ruok" | nc localhost 2181

      출력 예시:

      $ echo "ruok" | nc localhost 2181
      imok
    2. echo srvr | nc localhost 2181

      모드를 확인하여 ZooKeeper 노드가 리더인지 팔로어인지 확인합니다.

      올인원 단일 ZooKeeper 노드의 출력 예시:

      $ echo srvr | nc localhost 2181
      ZooKeeper version: 3.4.5-1392090, built on 09/30/2012 17:52 GMT
      Latency min/avg/max: 0/0/88
      Received: 4206601
      Sent: 4206624
      Connections: 8
      Outstanding: 0
      Zxid: 0x745
      Mode: standalone
      Node count: 282
    3. $ echo mntr | nc localhost 2181

      이 명령어는 ZooKeeper 클러스터의 상태를 확인하는 데 사용할 수 있는 ZooKeeper 변수를 나열합니다.

      출력 예시:

      $ echo mntr | nc localhost 2181
      zk_version 3.4.5-1392090, built on 09/30/2012 17:52 GMT
      zk_avg_latency 0
      zk_max_latency 88
      zk_min_latency 0
      zk_packets_received     4206750
      zk_packets_sent 4206773
      zk_num_alive_connections 8
      zk_outstanding_requests 0
      zk_server_state standalone
      zk_znode_count 282
      zk_watch_count 194
      zk_ephemerals_count 1
      zk_approximate_data_size 22960
      zk_open_file_descriptor_count 34
      zk_max_file_descriptor_count 4096
    4. $ echo stat | nc localhost 2181

      이 명령어는 성능 및 연결된 클라이언트에 관한 통계를 나열합니다.

      출력 예시:

      $ echo stat | nc localhost 2181
      ZooKeeper version: 3.4.5-1392090, built on 09/30/2012 17:52 GMT
      Clients:
       /10.128.0.8:54152[1](queued=0,recved=753379,sent=753385)
       /10.128.0.8:53944[1](queued=0,recved=980269,sent=980278)
       /10.128.0.8:54388[1](queued=0,recved=457094,sent=457094)
       /10.128.0.8:54622[1](queued=0,recved=972938,sent=972938)
       /10.128.0.8:54192[1](queued=0,recved=150843,sent=150843)
       /10.128.0.8:44564[1](queued=0,recved=267332,sent=267333)
       /127.0.0.1:40820[0](queued=0,recved=1,sent=0)
       /10.128.0.8:53960[1](queued=0,recved=150844,sent=150844)
      
      Latency min/avg/max: 0/0/88
      Received: 4206995
      Sent: 4207018
      Connections: 8
      Outstanding: 0
      Zxid: 0x745
      Mode: standalone
      Node count: 282
    5. $ echo cons | nc localhost 2181

      이 명령어는 ZooKeeper 연결에 관한 자세한 정보를 제공합니다.

      출력 예시:

      $ echo cons | nc localhost 2181
      /127.0.0.1:40864[0](queued=0,recved=1,sent=0)
      /10.128.0.8:54152[1](queued=0,recved=753400,sent=753406,sid=0x15d521a96d40007,
        lop=PING,est=1500321588647,to=40000,lcxid=0x972e9,lzxid=0x745,lresp=1502334173174,
        llat=0,minlat=0,avglat=0,maxlat=26)
      /10.128.0.8:53944[1](queued=0,recved=980297,sent=980306,sid=0x15d521a96d40005,
        lop=PING,est=1500321544896,to=40000,lcxid=0xce92a,lzxid=0x745,lresp=1502334176055,
        llat=0,minlat=0,avglat=0,maxlat=23)
      /10.128.0.8:54388[1](queued=0,recved=457110,sent=457110,sid=0x15d521a96d4000a,
        lop=PING,est=1500321673852,to=40000,lcxid=0x4dbe3,lzxid=0x745,lresp=1502334174245,
        llat=0,minlat=0,avglat=0,maxlat=22)
      /10.128.0.8:54622[1](queued=0,recved=972967,sent=972967,sid=0x15d521a96d4000b,
        lop=PING,est=1500321890175,to=40000,lcxid=0xccc9d,lzxid=0x745,lresp=1502334182417,
        llat=0,minlat=0,avglat=0,maxlat=88)
      /10.128.0.8:54192[1](queued=0,recved=150848,sent=150848,sid=0x15d521a96d40008,
        lop=PING,est=1500321591985,to=40000,lcxid=0x8,lzxid=0x745,lresp=1502334184475,
        llat=3,minlat=0,avglat=0,maxlat=19)
      /10.128.0.8:44564[1](queued=0,recved=267354,sent=267355,sid=0x15d521a96d4000d,
        lop=PING,est=1501606633426,to=40000,lcxid=0x356e2,lzxid=0x745,lresp=1502334182315,
        llat=0,minlat=0,avglat=0,maxlat=35)
      /10.128.0.8:53960[1](queued=0,recved=150848,sent=150848,sid=0x15d521a96d40006,
        lop=PING,est=1500321547138,to=40000,lcxid=0x5,lzxid=0x745,lresp=1502334177036,
        llat=1,minlat=0,avglat=0,maxlat=20)

      마지막 3개의 상태 확인 명령어 중 하나에 다음 메시지가 표시되면

      $ echo stat | nc localhost 2181
          This ZooKeeper instance is not currently serving requests

      특정 ZooKeeper 노드가 요청을 처리하지 않음을 나타냅니다.

  2. 특정 노드에서 ZooKeeper 로그를 확인하고 ZooKeeper가 다운되는 원인이 되는 오류를 찾습니다. ZooKeeper 로그는 다음 디렉터리에서 확인할 수 있습니다.
    $ cd /opt/apigee/var/log/apigee-zookeeper
    $ ls -l
    total 188
    -rw-r--r--. 1 apigee apigee   2715 Jul 22 19:51 apigee-zookeeper.log
    -rw-r--r--. 1 apigee apigee  10434 Jul 17 19:51 config.log
    -rw-r--r--. 1 apigee apigee 169640 Aug  1 19:51 zookeeper.log

해결 방법

  1. 클러스터의 다른 모든 ZooKeeper 노드를 하나씩 다시 시작합니다.
  2. 각 노드에서 ZooKeeper 상태 확인 명령어를 다시 실행하고 예상한 출력이 표시되는지 확인합니다.

시스템 부하가 지속되거나 다시 시작해도 문제가 해결되지 않으면 Apigee 지원팀에 문의하여 원인을 해결하세요.