Zookeeper 연결 손실 오류

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

증상

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

  1. API 프록시 배포 오류
  2. 5XX 오류와 함께 Management API 호출이 실패함
  3. 라우터 또는 메시지 프로세서가 시작되지 않음
  4. 분석 구성요소 보고 system.logs에서 JoKeeper 연결 손실

오류 메시지

다음은 JoKeeper 노드에 대한 연결이 끊어졌을 때 발생할 수 있는 오류 메시지의 예를 보여줍니다.

  1. JoKeeper 연결 손실로 인해 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. 시작 중에는 라우터와 메시지 프로세서가 JoKeeper에 연결됩니다. 주Keeper에 연결 문제가 있으면
    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 사용자

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

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

진단

JoKeeper 클러스터에는 DC-1 및 DC-2와 같이 여러 리전/데이터 센터에 걸쳐 있는 노드가 있을 수 있습니다. 일반적인 Apigee Edge 2 DC 토폴로지의 구조는 다음과 같습니다.

  • DC-1의 유권자로 JoKeeper 서버 1, 2, 3에 서버
  • DC-2에서는 주키퍼 4와 5가 유권자로, 주키퍼 6은 관찰자로 쓰입니다.

DC-1 리전이 다운되거나 DC-1과 DC-2 간의 네트워크 연결이 끊어지면 주Keeper 노드가 DC-2의 새로운 리더를 선택할 수 없으며 리더 노드와 통신하지 못합니다. JoKeeper 관찰자는 새로운 리더를 고를 수 없으며, DC-2에 남아 있는 2명의 유권자는 새 리더를 선출할 최소 3개의 유권자 노드가 포함된 쿼럼이 없습니다. 따라서 DC-2의 JoKeepers는 요청을 처리할 수 없습니다. DC-2의 나머지 JoKeeper 노드는 리더를 찾기 위해 주Keeper 투표자에게 다시 연결하도록 재시도를 계속 반복합니다.

해상도

다음 솔루션을 지정된 순서대로 적용하여 이 문제를 해결하세요.

이 해결 방법을 시도한 후에도 문제가 해결되지 않으면 Apigee 지원팀에 문의하세요.

솔루션 #1

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

솔루션 #2

  1. 네트워크 연결을 복구하는 데 시간이 걸리면 다운된 리전에서 주Keeper 노드를 재구성해야 합니다. 예를 들어 이 리전의 3개 주Keeper 노드가 모두 투표자가 되도록 DC-2의 주Keeper 클러스터를 재구성하고 DC-1 지역의 주Keeper zoo.cfg에서 server.#를 삭제합니다.
    1. 다음 예시에서 zoo.cfg는 2개 리전의 노드를 구성합니다. 여기서 DC-1은 US-East 리전을 나타내는 us-ea 호스트 이름을 사용하고 DC-2는 US-West 리전을 나타내는 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 주석이 삭제되면 US-East의 노드가 삭제되고 US-West 노드가 유권자로 승격됩니다.

  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.2myid5에서 2로 변경합니다.
    • server.3myid6에서 3으로 변경합니다.
  5. JoKeeper 클러스터를 재구성한 리전에서 주Keeper 노드를 다시 시작합니다.
  6. DC-2의 모든 JoKeeper 노드에서 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의 주Keeper 노드에서 주Keeper 구성 변경사항을 되돌릴 수 있습니다.

솔루션 #3

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

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

    $ 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. 중지되었을 수 있는 주Keeper 노드의 원인을 해결하려면 Apigee 지원팀에 문의하고 주Keeper 로그를 제공하세요.

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

앙상블의 JoKeeper 노드가 비정상이 되어 클라이언트 요청에 응답하지 못할 수 있습니다. 다음과 같은 이유로 발생할 수 있습니다.

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

진단

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

      출력 예시:

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

      JoKeeper 노드가 리더인지 팔로어인지 확인하려면 모드를 확인하세요.

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

      $ 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
      

      이 명령어는 동물원키퍼 클러스터의 상태를 확인하는 데 사용할 수 있는 주Keeper 변수를 나열합니다.

      출력 예시:

      $ 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
      

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

      출력 예시:

      $ 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
      

      그런 다음 특정 JoKeeper 노드가 요청을 처리하고 있지 않음을 나타냅니다.

  2. 특정 노드의 JoKeeper 로그를 확인하고 주Keeper가 다운되는 원인이 되는 오류를 찾습니다. JoKeeper 로그는
    $ 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. 클러스터의 다른 모든 JoKeeper 노드를 하나씩 다시 시작합니다.
  2. 각 노드에서 JoKeeper 상태 점검 명령어를 다시 실행하고 예상한 결과가 나오는지 확인합니다.

시스템 로드가 지속되거나 다시 시작해도 문제가 해결되지 않는 경우 Apigee 지원팀에 문의하여 시스템 로드의 원인을 해결하세요.