Zookeeper 연결 손실 오류

<ph type="x-smartling-placeholder"></ph> 현재 Apigee Edge 문서를 보고 있습니다.
Apigee X 문서.
정보

증상

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

  1. API 프록시 배포 오류
  2. 5XX 오류와 함께 Management API 호출 실패
  3. 라우터 또는 메시지 프로세서 시작 실패
  4. 애널리틱스 구성요소에서 system.logs에서 주키퍼 연결 끊김이 보고됨

오류 메시지

다음은 주키퍼 노드에 대한 연결 끊김

  1. API 프록시 배포 시 Management Server 로그에 다음 오류가 반환됩니다. 동물원 연결 끊김으로 인한 실패:
    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. 시작 시 라우터와 메시지 프로세서는 주키퍼에 연결됩니다. 만약 연결 문제가 있는 경우 이러한 구성요소가 다음과 같이 시작되지 않습니다. 오류:
    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 프라이빗 클라우드 사용자
ZooKeeper 노드에서 요청을 처리하지 않음 Edge 프라이빗 클라우드 사용자

표에 있는 링크를 클릭하여 원인에 대한 가능한 해결 방법을 확인하세요.

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

진단

주키퍼 클러스터에는 여러 리전/데이터 센터에 걸쳐 있는 노드가 있을 수 있습니다(예: DC-1과 DC-2가 있습니다. 일반적인 Apigee Edge 2 DC 토폴로지는 다음과 같습니다.

  • DC-1에서 유권자로 동물원 1, 2, 3 서버
  • 주키퍼 4와 5는 유권자로, 주키퍼 6는 DC-2의 관찰자 역할을 합니다.

DC-1 리전이 다운되거나 DC-1과 DC-2 간의 네트워크 연결이 끊어지는 경우 주키퍼 노드는 DC-2에서 새 리더를 선택할 수 없으며 리더와 통신하지 못합니다. 노드입니다 주키퍼 관찰자는 새로운 리더를 선택할 수 없으며 DC-2에 남아 있는 두 유권자는 새 리더를 선택할 수 없습니다. 새 리더를 선출할 투표자 노드 수가 최소 3개인 쿼럼을 확보해야 합니다. 따라서 DC-2의 주키퍼는 요청을 처리할 수 없습니다. DC-2의 나머지 주키퍼 노드는 계속 순환됩니다. 주키퍼를 찾기 위해 주키퍼 유권자에게 다시 연결을 다시 시도하고 있습니다.

해상도

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

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

해결 방법 1

  1. 네트워크 관리자와 협력하여 장치 간 네트워크 연결 문제를 복구하십시오. 데이터 센터도 있습니다
  2. 주키퍼 앙상블이 데이터 센터 전체에 걸쳐 통신하고 ZaKeeper 리더가 되면 노드가 정상 상태가 되고 요청을 처리할 수 있게 됩니다.

해결 방법 2

  1. 네트워크 연결을 복구하는 데 시간이 걸리는 경우 문제를 해결하려면 주키퍼 노드가 다운된 리전의 가능합니다. 예를 들어 주키퍼를 재구성할 수 있습니다. 이 지역의 3개의 주키퍼 노드가 모두 투표자가 되도록 하고 DC-1 리전의 주키퍼 zoo.cfg에 있는 server.#입니다.
    1. 다음 예시에서 zoo.cfg는 DC-1이 us-ea를 사용하는 리전 2개에 노드를 구성합니다. US-East 리전을 나타내는 호스트 이름이고 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. config가 있는 코드 사용, 다음을 사용하여 /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\
      

    위에서 US-East의 노드가 삭제되고 US-West 노드가 :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.2myid5에서 2로 변경합니다.
    • server.3myid6에서 3으로 변경합니다.
  5. 주키퍼를 재구성한 리전에서 동물원키퍼 노드를 다시 시작합니다. kube-APIserver입니다
  6. 1b단계부터 5단계까지 위 구성을 모든 주키퍼 노드에서 반복합니다. DC-2.
  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' 만약 리더 또는 '팔로어' 확인할 수 있습니다

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

해결 방법 3

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

    동물원Keeper 로그는 다음 디렉터리에서 확인할 수 있습니다.

    $ 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 노드의 원인을 해결하기 위해 로그를 보냅니다.

주키퍼 노드에서 요청을 처리하지 않음

앙상블의 주키퍼 노드가 비정상 상태가 되어 클라이언트에 응답할 수 없음 요청을 처리합니다 다음과 같은 이유로 발생할 수 있습니다.

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

진단

  1. 각 주키퍼 노드에서 다음 주키퍼 상태 점검 명령을 실행하고 출력을 확인합니다. <ph type="x-smartling-placeholder">
      </ph>
    1. $ echo "ruok" | nc localhost 2181
      
      드림

      출력 예시:

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

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

      올인원, 단일 ZaKeeper 노드에 대한 출력 예:

      $ 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
      

      이 명령은 주키퍼 클러스터에서 실행되었습니다

      출력 예시:

      $ 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
      

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

      출력 예시:

      $ 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
      

      그런 다음 특정 주키퍼 노드에서 요청을 처리하고 있지 않음을 나타냅니다.

  2. 특정 노드에서 ZooKeeper 로그를 확인하고 주키퍼가 다운됩니다. 동물원Keeper 로그는 다음 디렉터리에서 확인할 수 있습니다.
    $ 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. 클러스터에 있는 다른 모든 주키퍼 노드를 하나씩 다시 시작합니다.
  2. 각 노드에서 주키퍼 상태 점검 명령어를 다시 실행하여 예상했던 결과가 나타나는지 확인합니다. 출력됩니다.

Apigee 지원팀에 문의하여 계속 표시되거나 다시 시작해도 문제가 해결되지 않는 경우