Erreurs de perte de connexion Zookeeper

<ph type="x-smartling-placeholder"></ph> Vous consultez la documentation Apigee Edge.
Accédez à la page Documentation sur Apigee X.
En savoir plus

Symptôme

Les problèmes de connectivité de ZooKeeper peuvent se manifester par différents symptômes, par exemple:

  1. Erreurs de déploiement du proxy d'API
  2. Les appels à l'API Management échouent avec des erreurs 5XX
  3. Échec du démarrage des routeurs ou des processeurs de messages
  4. Les composants d'analyse signalent une perte de connexion ZooKeeper dans le fichier system.logs

Messages d'erreur

Vous trouverez ci-dessous des exemples de messages d'erreur pouvant être observés en cas de perte de connexion vers les nœuds ZooKeeper.

  1. L'erreur suivante est renvoyée dans les journaux du serveur de gestion lorsqu'un déploiement de proxy d'API échoue en raison d'une perte de connexion ZooKeeper:
    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. Au démarrage, les routeurs et les processeurs de messages se connectent à ZooKeeper. S'il y a des problèmes de connectivité avec ZooKeeper, le démarrage de ces composants échouera erreur:
    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. L'interface utilisateur Edge peut afficher l'erreur suivante, indiquant qu'elle n'a pas pu vérifier le État du déploiement des proxys d'API:
    Error Fetching Deployments
    Error while checking path existence for path: path
    

Causes possibles

Le tableau suivant répertorie les causes possibles de ce problème:

Cause Pour
Problème de connectivité réseau entre différents centres de données Utilisateurs de cloud privé Edge
Le nœud ZooKeeper ne diffuse pas les requêtes Utilisateurs de cloud privé Edge

Cliquez sur un lien du tableau pour afficher les solutions possibles à cette cause.

Problème de connectivité réseau entre différents centres de données

Diagnostic

Un cluster ZooKeeper peut comporter des nœuds couvrant plusieurs régions/centres de données, tels que DC-1 et DC-2. La topologie DC classique d'Apigee Edge 2 présente les éléments suivants:

  • ZooKeeper serveurs 1, 2 et 3 en tant qu'électeurs dans DC-1
  • ZooKeeper 4 et 5 en tant qu'électeurs, et ZooKeeper 6 en tant qu'observateur dans DC-2.

Si la région DC-1 tombe en panne ou si la connectivité réseau entre DC-1 et DC-2 est interrompue, Les nœuds ZooKeeper ne peuvent pas élire un nouveau leader dans DC-2 et ils ne communiquent pas avec le leader. d'un nœud. Les observateurs ZooKeeper ne peuvent pas élire un nouveau chef, et les deux électeurs restants de DC-2 ne le font pas. disposer d'un quorum d'au moins trois nœuds d'électeur pour élire un nouveau chef ; Les ZooKeepers de DC-2 seront donc ne pourra pas traiter les requêtes. Les nœuds ZooKeeper restants dans DC-2 continueront d'être lus en boucle. à réessayer de se connecter aux électeurs de ZooKeeper pour trouver le leader.

Solution

Appliquez les solutions suivantes pour résoudre ce problème dans l'ordre indiqué.

Si vous ne parvenez pas à résoudre le problème après avoir essayé ces solutions, veuillez contactez l'assistance Apigee.

Solution 1

  1. Rapprochez-vous de vos administrateurs réseau pour résoudre le problème de connectivité réseau entre les centres de données.
  2. Lorsque l'ensemble ZooKeeper est en mesure de communiquer entre les centres de données et de choisir un Chef ZooKeeper, les nœuds doivent devenir opérationnels et pouvoir traiter les requêtes.

Solution 2

  1. Si la réparation de la connectivité réseau prend du temps, une solution de contournement consiste à reconfigurer de nœuds ZooKeeper dans la région où ils sont indisponibles. Par exemple, reconfigurez le ZooKeeper dans le cluster DC-2 afin que les trois nœuds ZooKeeper de cette région soient tous des votants et supprimez le nœud server.# dans le zoo.cfg de ZooKeepers de la région DC-1.
    1. Dans l'exemple suivant, zoo.cfg configure les nœuds pour deux régions où DC-1 utilise us-ea. noms d'hôtes indiquant la région US-East et DC-2 utilise des noms d'hôte us-wo correspondant à la région US-West. (REMARQUE : Seules les configurations pertinentes sont affichées)
      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
      

      Dans l'exemple ci-dessus, reconfigurez zoo.cfg comme suit:

      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. À l'aide du code avec la configuration, Créez un fichier /opt/apigee/customer/application/zookeeper.properties avec les éléments suivants:
      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\
      

    Dans ce qui précède, les nœuds US-East sont supprimés, et les nœuds US-West sont promus en tant que votants lorsque l'annotation :observer est supprimée.

  2. Sauvegarder /opt/apigee/apigee-zookeeper/conf/zoo.cfg et les anciennes /opt/apigee/customer/application/zookeeper.properties

    Ces fichiers seront utilisés pour restaurer les valeurs par défaut lorsque la connectivité réseau sera rétablie entre les centres de données.

  3. Désactivez la notation d'observateur pour le nœud d'observateur. Pour ce faire, Ajoutez la configuration suivante en haut de /opt/apigee/customer/application/zookeeper.properties:

    conf_zoo_peertype=
  4. Modifiez le fichier /opt/apigee/data/apigee-zookeeper/data/myid comme suit :

    • Pour server.1, remplacez l'entrée 4 dans 1 dans myid.
    • Pour server.2, remplacez la valeur de myid (5) par 2.
    • Pour server.3, remplacez la valeur de myid (6) par 3.
  5. Redémarrez les nœuds ZooKeeper dans la région où vous avez reconfiguré le ZooKeeper. cluster.
  6. Répétez la configuration ci-dessus de l'étape 1b à l'étape 5 sur tous les nœuds ZooKeeper de DC-2.
  7. Vérifiez que les nœuds sont en phase avec une variante optimale:
    $ 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
    

    Le résultat de cette commande contient une ligne indiquant "mode" suivi de "responsable" si est le leader, ou "follower" s'il s'agit d'un abonné.

    Une fois le réseau entre les centres de données rétabli, les configurations ZooKeeper peuvent être annulées sur les nœuds ZooKeeper dans DC-2.

Solution 3

  1. Si le ou les nœuds ZooKeeper du cluster ne sont pas démarrés, redémarrez-les.
  2. Consultez les journaux ZooKeeper pour déterminer la raison de l'interruption du nœud ZooKeeper.

    Les journaux ZooKeeper sont disponibles dans le répertoire suivant:

    $ 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. Contactez l'assistance Apigee et fournissez-lui la Journaux ZooKeeper pour dépanner la cause d'un nœud ZooKeeper qui a pu être arrêté.

Le nœud ZooKeeper ne diffuse pas de requêtes

Un nœud ZooKeeper de l'ensemble peut devenir non opérationnel et être incapable de répondre au client requêtes. Les raisons peuvent être multiples :

  1. Le nœud a été arrêté sans avoir été redémarré.
  2. Le nœud a été redémarré sans que le démarrage automatique soit activé.
  3. La charge système sur le nœud a entraîné son indisponibilité ou celui-ci comme non opérationnel.

Diagnostic

  1. Exécutez les commandes de vérification de l'état ZooKeeper suivantes sur chacun des nœuds ZooKeeper et vérifiez le résultat: <ph type="x-smartling-placeholder">
      </ph>
    1. $ echo "ruok" | nc localhost 2181
      

      Exemple de résultat :

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

      Vérifiez le mode pour déterminer si le nœud ZooKeeper est un leader ou un follower.

      Exemple de résultat pour un nœud ZooKeeper unique et tout-en-un:

      $ 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
      

      Cette commande liste les variables ZooKeeper qui peuvent être utilisées pour vérifier l'état le cluster ZooKeeper.

      Exemple de résultat :

      $ 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
      

      Cette commande liste les statistiques sur les performances et les clients connectés.

      Exemple de résultat :

      $ 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
      

      Cette commande fournit des informations détaillées sur les connexions ZooKeeper.

      Exemple de résultat :

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

      Si l'une des trois dernières commandes de vérification de l'état affiche le message suivant:

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

      Elle indique ensuite que des nœuds ZooKeeper spécifiques ne diffusent pas de requêtes.

  2. Consultez les journaux ZooKeeper sur le nœud concerné et essayez de localiser les erreurs à l'origine du problème. ZooKeeper va être arrêté. Les journaux ZooKeeper sont disponibles dans le répertoire suivant:
    $ 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
    

Solution

  1. Redémarrez tous les autres nœuds ZooKeeper du cluster un par un.
  2. Exécutez de nouveau les commandes de vérification de l'état ZooKeeper pour chaque nœud et vérifiez que vous obtenez les résultats attendus. de sortie.

Contactez l'assistance Apigee pour résoudre le problème. la charge du système si elle persiste ou si les redémarrages ne résolvent pas le problème.