Errori di perdita della connessione a Zookeeper

Stai visualizzando la documentazione di Apigee Edge.
Vai alla documentazione di Apigee X.
informazioni

Sintomo

I problemi di connettività di ZooKeeper possono manifestarsi con diversi sintomi, tra cui:

  1. Errori di deployment del proxy API
  2. Le chiamate all'API di gestione non vanno a buon fine e generano errori 5XX
  3. I router o i processori di messaggi non si avviano
  4. I componenti di analisi segnalano la perdita di connessione ZooKeeper in system.logs

Messaggi di errore

Di seguito sono riportati esempi di messaggi di errore che possono essere osservati in caso di perdita di connessione ai nodi ZooKeeper.

  1. Nei log del server di gestione viene restituito il seguente errore quando il deployment di un proxy API non va a buon fine a causa della perdita della connessione 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. Durante l'avvio, i router e i processori di messaggi si connettono a ZooKeeper. In caso di problemi di connettività con ZooKeeper, questi componenti non verranno avviati con il seguente errore:
    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. La UI perimetrale potrebbe mostrare il seguente errore che indica che non è stato possibile controllare lo stato di deployment dei proxy API:
    Error Fetching Deployments
    Error while checking path existence for path: path
    

Possibili cause

Nella tabella seguente sono elencate le possibili cause di questo problema:

Causa Per
Problema di connettività di rete in diversi data center Utenti del cloud privato perimetrale
Il nodo ZoooKeeper non gestisce le richieste Utenti del cloud privato perimetrale

Fai clic su un link nella tabella per visualizzare le possibili soluzioni a tale causa.

Problema di connettività di rete in diversi data center

Diagnostica

Un cluster ZooKeeper può avere nodi che si estendono in più regioni/data center, ad esempio DC-1 e DC-2. La tipica topologia DC di Apigee Edge 2 avrà:

  • ZooKeeper server 1, 2 e 3 come elettori in DC-1
  • ZooKeeper 4 e 5 come elettori e ZooKeeper 6 come osservatore in DC-2.

Se la regione DC-1 non funziona o la connettività di rete tra DC-1 e DC-2 non funziona, i nodi ZooKeeper non possono scegliere un nuovo leader in DC-2 e non riescono a comunicare con il nodo leader. Gli osservatori di ZooKeeper non possono eleggere un nuovo leader e i due elettori rimanenti nel DC-2 non hanno un quorum di almeno 3 nodi elettori per eleggere un nuovo leader. Di conseguenza, ZooKeepers in DC-2 non sarà in grado di elaborare alcuna richiesta. I restanti nodi ZooKeeper in DC-2 continueranno a ripetere continuamente i tentativi di connettersi agli elettori di ZooKeeper per trovare il leader.

Risoluzione

Applica le seguenti soluzioni per risolvere il problema nell'ordine specificato.

Se non riesci a risolvere il problema dopo aver provato queste soluzioni, contatta l'assistenza Apigee.

Soluzione 1

  1. Collabora con gli amministratori di rete per risolvere il problema di connettività di rete tra i data center.
  2. Quando l'insieme ZooKeeper è in grado di comunicare tra i data center ed eleggere un leader ZooKeeper, i nodi devono diventare integri e in grado di elaborare le richieste.

Soluzione 2

  1. Se la riparazione della connettività di rete richiede del tempo, una soluzione alternativa consiste nel riconfigurare i nodi ZooKeeper nella regione in cui non sono attivi. Ad esempio, riconfigura il cluster ZooKeeper in DC-2 in modo che i 3 nodi ZooKeeper in questa regione siano tutti elettori e rimuovi server.# in zoo.cfg di ZooKeeper dalla regione DC-1.
    1. Nell'esempio seguente, zoo.cfg configura i nodi per 2 regioni in cui DC-1 utilizza us-ea nomi host che indicano la regione Stati Uniti-Est e DC-2 utilizza us-wo nomi host che indicano la regione US-Ovest. NOTA: vengono visualizzate solo le configurazioni pertinenti:
      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
      

      Nell'esempio precedente, riconfigura zoo.cfg come segue:

      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. Utilizzando il codice con config, crea un file /opt/apigee/customer/application/zookeeper.properties con il seguente codice:
      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\
      

    In precedenza, i nodi US-Est vengono rimossi e quelli US-Ovest vengono promossi agli elettori quando l'annotazione :observer viene rimossa.

  2. Esegui il backup di /opt/apigee/apigee-zookeeper/conf/zoo.cfg e della versione precedente di /opt/apigee/customer/application/zookeeper.properties.

    Questi file verranno utilizzati per ripristinare le impostazioni predefinite quando viene eseguito il backup della connettività di rete tra i data center.

  3. Disabilita la notazione osservatore per il nodo osservatore. Per farlo, aggiungi la seguente configurazione nella parte superiore di /opt/apigee/customer/application/zookeeper.properties:

    conf_zoo_peertype=
  4. Modifica il file /opt/apigee/data/apigee-zookeeper/data/myid come segue:

    • Per server.1, modifica la voce all'interno di myid da 4 a 1.
    • Per server.2, modifica il valore di myid da 5 a 2.
    • Per server.3, modifica il valore di myid da 6 a 3.
  5. Riavvia i nodi ZooKeeper nella regione in cui hai riconfigurato il cluster ZooKeeper.
  6. Ripeti la configurazione precedente dal passaggio #1b al passaggio# 5 su tutti i nodi ZooKeeper in DC-2.
  7. Verifica che i nodi siano in linea con una leader:
    $ 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
    

    L'output di questo comando conterrà una riga che dice "mode" seguito da "leader" se è il leader o "follower" se è un follower.

    Quando la rete tra i data center viene ristabilita, le modifiche alla configurazione di ZooKeeper possono essere annullate sui nodi ZooKeeper in DC-2.

Soluzione 3

  1. Se i nodi ZooKeeper nel cluster non sono avviati, riavvialo.
  2. Controlla i log di ZooKeeper per determinare il motivo dell'arresto anomalo del nodo ZooKeeper.

    I log di ZooKeeper sono disponibili nella seguente directory:

    $ 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. Contatta l'assistenza Apigee e fornisci i log ZooKeeper per risolvere la causa di eventuali nodi ZooKeeper che potrebbero essere stati arrestati.

Il nodo ZooKeeper non gestisce le richieste

Un nodo ZooKeeper nell'ensemble potrebbe non essere integro e non essere in grado di rispondere alle richieste del client. I motivi potrebbero essere i seguenti:

  1. Il nodo è stato arrestato senza essere stato riavviato.
  2. Il nodo è stato riavviato senza che l'avvio automatico fosse abilitato.
  3. Il carico di sistema sul nodo ne ha causato l'arresto o lo stato non integro.

Diagnostica

  1. Esegui i seguenti comandi di controllo di integrità di ZooKeeper su ciascuno dei nodi ZooKeeper e controlla l'output:
    1. $ echo "ruok" | nc localhost 2181
      

      Output di esempio:

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

      Controlla la modalità per determinare se il nodo ZooKeeper è un leader o un follower.

      Output di esempio per un singolo nodo ZooKeeper all-in-one:

      $ 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
      

      Questo comando elenca le variabili ZooKeeper che possono essere utilizzate per verificare l'integrità del cluster ZooKeeper.

      Output di esempio:

      $ 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
      

      Questo comando elenca le statistiche sulle prestazioni e sui client connessi.

      Output di esempio:

      $ 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
      

      Questo comando fornisce dettagli estesi sulle connessioni ZooKeeper.

      Output di esempio:

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

      Se uno degli ultimi tre comandi di controllo di integrità mostra il seguente messaggio:

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

      Quindi indica che specifici nodi ZooKeeper non gestiscono le richieste.

  2. Controlla i log di ZooKeeper sul nodo specifico e prova a individuare eventuali errori che causano l'interruzione di ZooKeeper. I log di ZooKeeper sono disponibili nella seguente directory:
    $ 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
    

Risoluzione

  1. Riavvia uno alla volta tutti gli altri nodi ZooKeeper nel cluster.
  2. Esegui nuovamente i comandi per il controllo di integrità di ZooKeeper su ciascun nodo e controlla se ottieni l'output previsto.

Contatta l'assistenza Apigee per risolvere la causa del carico del sistema se persiste o se i riavvii non risolvono il problema.