Zookeeper-Verbindungsverlustfehler

Sie sehen die Dokumentation zu Apigee Edge.
Zur Apigee X-Dokumentation
weitere Informationen

Symptom

ZooKeeper-Verbindungsprobleme können sich in verschiedenen Symptomen äußern, zum Beispiel:

  1. Fehler bei der API-Proxy-Bereitstellung
  2. Verwaltungs-API-Aufrufe schlagen mit 5XX-Fehlern fehl
  3. Router oder Message Processor können nicht gestartet werden
  4. Analytics-Komponenten melden ZooKeeper-Verbindungsverlust in system.logs.

Fehlermeldungen

Im Folgenden finden Sie Beispiele für Fehlermeldungen, die auftreten können, wenn die Verbindung zu ZooKeeper-Knoten unterbrochen wird.

  1. Der folgende Fehler wird in Management Server-Logs zurückgegeben, wenn eine API-Proxy-Bereitstellung aufgrund eines Verlusts der ZooKeeper-Verbindung fehlschlägt:
    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. Während des Starts stellen die Router und Message Processor eine Verbindung zu ZooKeeper her. Wenn es Verbindungsprobleme mit ZooKeeper gibt, werden diese Komponenten nicht mit dem folgenden Fehler gestartet:
    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. Die Edge-Benutzeroberfläche zeigt möglicherweise den folgenden Fehler an, der darauf hinweist, dass der Bereitstellungsstatus der API-Proxys nicht geprüft werden konnte:
    Error Fetching Deployments
    Error while checking path existence for path: path
    

Mögliche Ursachen

In der folgenden Tabelle sind die möglichen Ursachen dieses Problems aufgeführt:

Ursache Für
Netzwerkverbindungsproblem zwischen verschiedenen Rechenzentren Edge Private Cloud-Nutzer
ZooKeeper-Knoten verarbeitet keine Anfragen Edge Private Cloud-Nutzer

Klicken Sie auf einen Link in der Tabelle, um mögliche Lösungen für diese Ursache zu sehen.

Netzwerkverbindungsproblem zwischen verschiedenen Rechenzentren

Diagnose

Ein ZooKeeper-Cluster kann Knoten haben, die sich über mehrere Regionen/Rechenzentren erstrecken, z. B. DC-1 und DC-2. Die typische Apigee Edge 2-DC-Topologie hat folgende Eigenschaften:

  • ZooKeeper server 1, 2 und 3 als Wähler in DC-1
  • ZooKeeper 4 und 5 als Wähler und ZooKeeper 6 als Beobachter in DC-2.

Wenn die DC-1-Region ausfällt oder die Netzwerkverbindung zwischen DC-1 und DC-2 unterbrochen wird, können ZooKeeper-Knoten keinen neuen Leader in DC-2 auswählen und sie nicht mit dem Leader-Knoten kommunizieren. ZooKeeper-Beobachter können keinen neuen Vorsitzenden wählen und die beiden verbleibenden Wähler in DC-2 haben kein Quorum von mindestens drei Wählerknoten, um einen neuen Vorsitzenden zu wählen. Daher können die ZooKeepers in DC-2 keine Anfragen verarbeiten. Die verbleibenden ZooKeeper-Knoten in DC-2 werden weiterhin wiederholt, um eine Verbindung zu den ZooKeeper-Wählern herzustellen, um den Leader zu finden.

Auflösung

Wenden Sie die folgenden Lösungen an, um dieses Problem in der angegebenen Reihenfolge zu beheben.

Wenn Sie das Problem mit diesen Lösungen nicht beheben können, wenden Sie sich an den Apigee-Support.

Lösung Nr. 1

  1. Arbeiten Sie mit Ihren Netzwerkadministratoren zusammen, um das Problem mit der Netzwerkverbindung zwischen den Rechenzentren zu beheben.
  2. Wenn das ZooKeeper-Ensemble über die Rechenzentren hinweg kommunizieren und einen ZooKeeper-Leader auswählen kann, sollten die Knoten fehlerfrei sein und Anfragen verarbeiten können.

Lösung Nr. 2

  1. Wenn die Reparatur der Netzwerkverbindung einige Zeit in Anspruch nimmt, können Sie das Problem umgehen, indem Sie ZooKeeper-Knoten in der Region neu konfigurieren, in der sie ausgefallen sind. Konfigurieren Sie beispielsweise den ZooKeeper-Cluster in DC-2 so neu, dass die drei ZooKeeper-Knoten in dieser Region alle Wähler sind, und entfernen Sie server.# im zoo.cfg der ZooKeeper aus der Region DC-1.
    1. Im folgenden Beispiel konfiguriert zoo.cfg Knoten für 2 Regionen, in denen DC-1 us-ea-Hostnamen verwendet, die die US-Ostregion angeben, und DC-2, us-wo-Hostnamen, die die US-West-Region angeben. (HINWEIS: Nur relevante Konfigurationen werden angezeigt):
      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
      

      Konfigurieren Sie im obigen Beispiel den zoo.cfg so neu:

      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. Erstellen Sie mithilfe von Code mit der Konfiguration eine Datei /opt/apigee/customer/application/zookeeper.properties mit folgenden Elementen:
      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\
      

    Im obigen Beispiel werden die Knoten aus den USA mit Osten entfernt und die US-West-Knoten werden zu Wählern hochgestuft, wenn die Annotation :observer entfernt wird.

  2. Sichere /opt/apigee/apigee-zookeeper/conf/zoo.cfg und die alte /opt/apigee/customer/application/zookeeper.properties.

    Diese Dateien werden verwendet, um die Standardwerte wiederherzustellen, wenn die Netzwerkverbindung zwischen Rechenzentren wieder hergestellt ist.

  3. Deaktivieren Sie die Beobachternotation für den Beobachterknoten. Fügen Sie dazu die folgende Konfiguration oben in /opt/apigee/customer/application/zookeeper.properties ein:

    conf_zoo_peertype=
  4. Bearbeiten Sie die Datei /opt/apigee/data/apigee-zookeeper/data/myidso:

    • Ändern Sie für server.1 den Eintrag innerhalb von myid von 4 in 1.
    • Ändern Sie für server.2 den Wert myid von 5 in 2.
    • Ändern Sie für server.3 den myid von 6 in 3.
  5. Starten Sie die ZooKeeper-Knoten in der Region neu, in der Sie den ZooKeeper-Cluster neu konfiguriert haben.
  6. Wiederholen Sie die obige Konfiguration von Schritt 1b bis Schritt 5 auf allen ZooKeeper-Knoten in DC-2.
  7. Prüfen Sie, ob die Knoten eine führende Variante haben:
    $ 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
    

    Die Ausgabe dieses Befehls enthält eine Zeile mit dem Namen "mode" gefolgt von "leader", wenn es der Leader ist, oder "follower", wenn es sich um einen Follower handelt.

    Wenn das Netzwerk zwischen Rechenzentren wiederhergestellt ist, können die ZooKeeper-Konfigurationen auf den ZooKeeper-Knoten in DC-2 rückgängig gemacht werden.

Lösung Nr. 3

  1. Wenn ZooKeeper-Knoten im Cluster nicht gestartet werden, starten Sie ihn neu.
  2. Prüfen Sie die ZooKeeper-Protokolle, um festzustellen, warum der ZooKeeper-Knoten ausgefallen ist.

    ZooKeeper-Protokolle sind im folgenden Verzeichnis verfügbar:

    $ 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. Wenden Sie sich an den Apigee-Support und stellen Sie die ZooKeeper-Protokolle zur Verfügung, damit Sie die Ursache für einen etwaigen ZooKeeper-Knoten beheben können, der möglicherweise angehalten wurde.

ZooKeeper-Knoten stellt keine Anfragen bereit

Ein ZooKeeper-Knoten im Ensemble kann möglicherweise fehlerhaft werden und nicht mehr auf Clientanfragen antworten. Mögliche Gründe:

  1. Der Knoten wurde angehalten, ohne neu gestartet zu werden.
  2. Der Knoten wurde ohne aktivierten automatischen Start neu gestartet.
  3. Die Systemlast auf dem Knoten hat dazu geführt, dass dieser ausgefallen oder fehlerhaft geworden ist.

Diagnose

  1. Führen Sie auf allen ZooKeeper-Knoten die folgenden Befehle für die ZooKeeper-Systemdiagnose aus und prüfen Sie die Ausgabe:
    1. $ echo "ruok" | nc localhost 2181
      

      Beispielausgabe:

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

      Prüfen Sie den Modus, um festzustellen, ob der ZooKeeper-Knoten ein Leader oder ein Follower ist.

      Beispielausgabe für einen einzelnen ZooKeeper-Knoten:

      $ 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
      

      Mit diesem Befehl werden die ZooKeeper-Variablen aufgelistet, mit denen der Status des ZooKeeper-Clusters geprüft werden kann.

      Beispielausgabe:

      $ 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
      

      Dieser Befehl listet Statistiken zur Leistung und zu den verbundenen Clients auf.

      Beispielausgabe:

      $ 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
      

      Dieser Befehl liefert erweiterte Details zu ZooKeeper-Verbindungen.

      Beispielausgabe:

      $ 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)
      

      Wenn einer der letzten drei Befehle für die Systemdiagnose die folgende Meldung anzeigt:

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

      Dann wird angezeigt, dass bestimmte ZooKeeper-Knoten keine Anfragen verarbeiten.

  2. Prüfen Sie die ZooKeeper-Protokolle auf dem jeweiligen Knoten und versuchen Sie, alle Fehler zu finden, die zum Ausfall des ZooKeeper führen. ZooKeeper-Logs sind im folgenden Verzeichnis verfügbar:
    $ 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
    

Auflösung

  1. Starten Sie nacheinander alle anderen ZooKeeper-Knoten im Cluster neu.
  2. Führen Sie die ZooKeeper-Befehle für die Systemdiagnose auf jedem Knoten aus und prüfen Sie, ob Sie die erwartete Ausgabe erhalten.

Wenden Sie sich an den Apigee-Support, um die Ursache der Systemlast zu beheben, wenn diese bestehen bleibt oder wenn ein Neustart das Problem nicht löst.