Zookeeper-Verbindungsverlustfehler

Sie lesen gerade die Dokumentation zu Apigee Edge.
Zur Dokumentation zuApigee X wechseln.
info

Symptom

Probleme mit der ZooKeeper-Verbindung können sich in verschiedenen Symptomen äußern, z. B.:

  1. Fehler bei der Bereitstellung von API-Proxys
  2. Aufrufe der Management API schlagen mit 5XX-Fehlern fehl
  3. Router oder Nachrichtenprozessoren können nicht gestartet werden
  4. Analysekomponenten melden in system.logs einen Verlust der ZooKeeper-Verbindung

Fehlermeldungen

Im Folgenden finden Sie Beispiele für Fehlermeldungen, die auftreten können, wenn es zu Verbindungsverlusten zu ZooKeeper-Knoten kommt.

  1. Der folgende Fehler wird in den Management Server-Logs zurückgegeben, wenn die Bereitstellung eines API-Proxys 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. Beim Start stellen die Router und Nachrichtenprozessoren eine Verbindung zu ZooKeeper her. Wenn es Probleme mit der ZooKeeper-Verbindung gibt, können diese Komponenten nicht gestartet werden und der folgende Fehler wird angezeigt:
    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. In der Edge-UI wird möglicherweise der folgende Fehler angezeigt, 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 mögliche Ursachen für dieses Problem aufgeführt:

Ursache Für
Probleme mit der Netzwerkverbindung zwischen verschiedenen Rechenzentren Nutzer von Edge Private Cloud
ZooKeeper-Knoten verarbeitet keine Anfragen Nutzer von Edge Private Cloud

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

Probleme mit der Netzwerkverbindung zwischen verschiedenen Rechenzentren

Diagnose

Ein ZooKeeper-Cluster kann Knoten haben, die sich in mehreren Regionen/Rechenzentren befinden, z. B. in Rechenzentrum 1 und Rechenzentrum 2. Die typische Apigee Edge-Topologie mit zwei Rechenzentren umfasst Folgendes:

  • ZooKeeper-Server 1, 2 und 3 als Voter in Rechenzentrum 1
  • ZooKeeper 4 und 5 als Voter und ZooKeeper 6 als Observer in Rechenzentrum 2

Wenn die Region von Rechenzentrum 1 ausfällt oder die Netzwerkverbindung zwischen Rechenzentrum 1 und Rechenzentrum 2 unterbrochen wird, können die ZooKeeper-Knoten in Rechenzentrum 2 keinen neuen Leader auswählen und nicht mit dem Leader Knoten kommunizieren. ZooKeeper-Observer können keinen neuen Leader auswählen und die beiden verbleibenden Voter in Rechenzentrum 2 haben kein Quorum von mindestens drei Voter-Knoten, um einen neuen Leader auszuwählen. Daher können die ZooKeeper in Rechenzentrum 2 keine Anfragen verarbeiten. Die verbleibenden ZooKeeper-Knoten in Rechenzentrum 2 versuchen weiterhin, eine Verbindung zu den ZooKeeper-Votern herzustellen, um den Leader zu finden.

Auflösung

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

Wenn Sie das Problem nach dem Ausprobieren dieser Lösungen nicht beheben können, wenden Sie sich bitte an den Apigee-Support.

Lösung 1

  1. Wenden Sie sich an Ihre Netzwerkadministratoren, 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 2

  1. Wenn die Reparatur der Netzwerkverbindung einige Zeit in Anspruch nimmt, können Sie als Problemumgehung die ZooKeeper-Knoten in der Region neu konfigurieren, in der sie ausgefallen sind. Konfigurieren Sie beispielsweise den ZooKeeper Cluster in Rechenzentrum 2 so, dass alle drei ZooKeeper-Knoten in dieser Region Voter sind, und entfernen Sie die server.# in der zoo.cfg der ZooKeeper aus der Region von Rechenzentrum 1.
    1. Im folgenden Beispiel konfiguriert zoo.cfg Knoten für zwei Regionen, wobei Rechenzentrum 1 us-ea Hostnamen verwendet, die die Region „USA, Osten“ angeben, und Rechenzentrum 2 us-wo Hostnamen verwendet, die die Region „USA, Westen“ angeben. HINWEIS: Es werden nur relevante Konfigurationen 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 zoo.cfg so:

      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 mit Code und Konfiguration eine Datei /opt/apigee/customer/application/zookeeper.properties mit folgendem Inhalt:
      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 der Region „USA, Osten“ entfernt und die Knoten aus der Region „USA, Westen“ werden zu Votern befördert, wenn die :observer Annotation entfernt wird.

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

    Diese Dateien werden verwendet, um die Standardeinstellungen wiederherzustellen, wenn die Netzwerkverbindung zwischen den Rechenzentren wiederhergestellt ist.

  3. Deaktivieren Sie die Observer-Notation für den Observer-Knoten. 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/myid so:

    • Ändern Sie für server.1 den Eintrag in myid von 4 in 1.
    • Ändern Sie für server.2 den Eintrag in myid von 5 in 2.
    • Ändern Sie für server.3 den Eintrag in 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 Rechenzentrum 2.
  7. Prüfen Sie, ob die Knoten mit einem Leader aktiv sind:
    $ 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 „mode“ gefolgt von „leader“, wenn es sich um den Leader handelt, oder „follower“, wenn es sich um einen Follower handelt.

    Wenn die Netzwerkverbindung zwischen den Rechenzentren wiederhergestellt ist, können die Änderungen an der ZooKeeper-Konfiguration auf den ZooKeeper-Knoten in Rechenzentrum 2 rückgängig gemacht werden.

Lösung 3

  1. Wenn ein oder mehrere ZooKeeper-Knoten im Cluster nicht gestartet wurden, starten Sie sie neu.
  2. Prüfen Sie die ZooKeeper-Logs, um festzustellen, warum der ZooKeeper-Knoten ausgefallen ist.

    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
  3. Wenden Sie sich an den Apigee-Support und stellen Sie die ZooKeeper-Logs zur Verfügung, um die Ursache für den Ausfall eines ZooKeeper-Knotens zu ermitteln.

ZooKeeper-Knoten verarbeitet keine Anfragen

Ein ZooKeeper-Knoten im Ensemble kann fehlerhaft werden und nicht auf Client Anfragen reagieren. Mögliche Gründe:

  1. Der Knoten wurde gestoppt, aber nicht neu gestartet.
  2. Der Knoten wurde neu gestartet, ohne dass der automatische Start aktiviert war.
  3. Die Systemlast auf dem Knoten hat dazu geführt, dass er ausgefallen oder fehlerhaft geworden ist.

Diagnose

  1. Führen Sie die folgenden ZooKeeper-Systemdiagnosebefehle auf jedem der ZooKeeper-Knoten 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

      Dieser Befehl listet die ZooKeeper-Variablen auf, mit denen Sie den Status des ZooKeeper-Clusters prüfen können.

      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 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 enthält 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 bei einem der letzten drei Systemdiagnosebefehle die folgende Meldung angezeigt wird:

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

      bedeutet das, dass der entsprechende ZooKeeper-Knoten keine Anfragen verarbeitet.

  2. Prüfen Sie die ZooKeeper-Logs auf dem entsprechenden Knoten und suchen Sie nach Fehlern, die dazu führen, dass der ZooKeeper ausgefallen ist. 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 alle anderen ZooKeeper-Knoten im Cluster einzeln neu.
  2. Führen Sie die ZooKeeper-Systemdiagnosebefehle auf jedem Knoten noch einmal aus und prüfen Sie, ob die erwartete Ausgabe angezeigt wird.

Wenden Sie sich an den Apigee-Support, um die Ursache für die Systemlast zu ermitteln, wenn das Problem weiterhin besteht oder wenn das Problem durch Neustarts nicht behoben werden kann.