Zookeeper-Verbindungsverlustfehler

<ph type="x-smartling-placeholder"></ph> Sie sehen die Dokumentation zu Apigee Edge.
Gehen Sie zur Apigee X-Dokumentation.
Weitere Informationen

Symptom

Die ZooKeeper-Verbindungsprobleme können sich an verschiedenen Symptomen äußern, z. B.:

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

Fehlermeldungen

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

  1. Der folgende Fehler wird in Verwaltungsserverlogs zurückgegeben, wenn eine API-Proxy-Bereitstellung schlägt aufgrund des Verbindungsverlusts von ZooKeeper fehl:
    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 Message Processor eine Verbindung zu ZooKeeper her. Wenn es Verbindungsprobleme mit ZooKeeper haben, starten diese Komponenten nicht mit Fehler:
    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 die Bereitstellungsstatus der API-Proxys:
    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
Problem mit der Netzwerkverbindung in verschiedenen Rechenzentren Edge Private Cloud-Nutzer
ZooKeeper-Knoten stellt keine Anfragen bereit Edge Private Cloud-Nutzer

Klicken Sie auf einen Link in der Tabelle, um mögliche Lösungen zu sehen.

Problem mit der Netzwerkverbindung in 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 DC-Topologie von Apigee Edge 2 sieht folgendermaßen aus:

  • 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 Region DC-1 ausfällt oder die Netzwerkkonnektivität zwischen DC-1 und DC-2 unterbrochen wird, ZooKeeper-Knoten können keinen neuen Leader in DC-2 auswählen und kommunizieren nicht mit dem Leader. Knoten. ZooKeeper-Beobachter können keinen neuen Anführer wählen und die beiden verbliebenen Wähler in Washington D.C. können dies nicht tun. haben ein Quorum von mindestens drei Wählerknoten, um einen neuen Leader zu wählen. Die ZooKeepers in DC-2 keine Anfragen bearbeiten können. Die verbleibenden ZooKeeper-Knoten in DC-2 werden weiter als Schleife wiedergegeben. Es wird versucht, eine Verbindung zu den ZooKeeper-Wählern herzustellen, um den Führenden zu finden.

Auflösung

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

Falls Sie das Problem nach Ausprobieren dieser Lösungen nicht lösen können, wenden Sie sich an den Apigee-Support.

Lösung Nr. 1

  1. Arbeiten Sie mit Ihren Netzwerkadministratoren zusammen, um das Netzwerkverbindungsproblem zwischen den Rechenzentren.
  2. Wenn das ZooKeeper-Ensemble in der Lage ist, zwischen den Rechenzentren zu kommunizieren und einen ZooKeeper-Leader sind, 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 die ZooKeeper-Knoten in der Region, in der sie inaktiv sind. Sie können z. B. ZooKeeper neu konfigurieren. Cluster in DC-2, sodass die 3 ZooKeeper-Knoten in dieser Region alle Voter sind, und entfernen den server.# in zoo.cfg der ZooKeepers aus DC-1-Region.
    1. Im folgenden Beispiel konfiguriert zoo.cfg Knoten für 2 Regionen, in denen DC-1 us-ea verwendet und DC-2 verwendet us-wo-Hostnamen für die Region US-West. (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 zoo.cfg im obigen Beispiel 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. Wenn Sie Code mit config verwenden, Erstellen Sie 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 von US-Ost entfernt und die Knoten US-West werden zu Wähler, wenn die Anmerkung :observer entfernt wird.

  2. /opt/apigee/apigee-zookeeper/conf/zoo.cfg und alte Dateien sichern /opt/apigee/customer/application/zookeeper.properties.

    Anhand dieser Dateien werden die Standardeinstellungen wiederhergestellt, sobald die Netzwerkverbindung wiederhergestellt ist. zwischen Rechenzentren.

  3. Deaktivieren Sie die Beobachter-Notation für den Beobachterknoten. Gehen Sie dazu wie folgt vor: Fügen Sie oben in /opt/apigee/customer/application/zookeeper.properties die folgende Konfiguration hinzu:

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

    • Ändern Sie für server.1 den Eintrag in myid von 4 in 1.
    • Ändere für server.2 den myid von 5 in 2.
    • Ändere für server.3 den myid von 6 zu 3.
  5. Starten Sie die ZooKeeper-Knoten in der Region neu, in der Sie ZooKeeper neu konfiguriert haben. Cluster.
  6. Wiederholen Sie die obige Konfiguration zwischen Schritt 1b und Schritt 5 auf allen ZooKeeper-Knoten in DC-2.
  7. Prüfen Sie, ob die Knoten bei einem Leader verfügbar 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 dem Text "mode". gefolgt von „leader“ wenn es ist der Leader oder „Follower“ ob sie Follower sind.

    Wenn das Netzwerk zwischen Rechenzentren wiederhergestellt ist, werden die ZooKeeper-Konfigurationen Änderungen können 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. Überprüfen Sie ZooKeeper-Protokolle, 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 geben Sie ZooKeeper-Protokolle zur Behebung der Ursache eines ZooKeeper-Knotens, der möglicherweise gestoppt wurde.

ZooKeeper-Knoten stellt keine Anfragen bereit

Ein ZooKeeper-Knoten im Ensemble kann fehlerhaft werden und nicht in der Lage sein, auf den Client zu antworten. -Anfragen. Mögliche Gründe:

  1. Der Knoten wurde ohne Neustart beendet.
  2. Der Knoten wurde neu gestartet, ohne dass Autostart aktiviert war.
  3. Die Systemlast des Knotens hat dazu geführt, dass dieser ausgefallen oder fehlerhaft ist.

Diagnose

  1. Führen Sie die folgenden ZooKeeper-Systemdiagnosebefehle auf allen ZooKeeper-Knoten aus und überprüfen Sie die Ausgabe: <ph type="x-smartling-placeholder">
      </ph>
    1. $ echo "ruok" | nc localhost 2181
      

      Beispielausgabe:

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

      Überprüfen Sie den Modus, um festzustellen, ob der ZooKeeper-Knoten ein Leader oder 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 der Status ZooKeeper-Cluster.

      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
      

      Mit diesem Befehl werden Statistiken zur Leistung und zu verbundenen Clients aufgelistet.

      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 Systemdiagnosebefehle die folgende Meldung anzeigt:

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

      Dann wird angegeben, dass bestimmte ZooKeeper-Knoten keine Anfragen bedienen.

  2. Überprüfen Sie die ZooKeeper-Protokolle auf dem jeweiligen Knoten und versuchen Sie, alle Fehler zu finden, die den ZooKeeper ist nicht verfügbar. 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 nacheinander neu.
  2. Führen Sie die ZooKeeper-Systemdiagnosebefehle auf jedem Knoten noch einmal aus und prüfen Sie, ob Sie den erwarteten Wert erhalten. .

Wenden Sie sich an den Apigee-Support, um die Ursache für dieses Problem zu beheben: Systemlast, wenn sie fortbesteht oder wenn das Problem durch einen Neustart nicht behoben wird.