Errori di perdita della connessione a Zookeeper

Stai visualizzando la documentazione di Apigee Edge.
Vai alla sezione 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 API di gestione non vanno a buon fine e vengono generati errori 5XX
  3. I router o i processori di messaggi non si avviano
  4. I componenti di analisi segnalano la perdita di connessione di ZooKeeper in system.logs

Messaggi di errore

Di seguito vengono forniti esempi di messaggi di errore che possono essere osservati in presenza di perdita di connessione con i nodi ZooKeeper.

  1. Quando viene eseguito un deployment di un proxy API, viene restituito il seguente errore nei log del server di gestione non riesce a causa della perdita di connessione di 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. Se ci sono di connettività con ZooKeeper, questi componenti non inizieranno con quanto segue 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. L'UI di Edge potrebbe visualizzare il seguente errore che indica che non è stato possibile controllare il 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 tra diversi data center Utenti Edge Private Cloud
Il nodo ZooKeeper non gestisce le richieste Utenti Edge Private Cloud

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

Problema di connettività di rete tra diversi data center

Diagnosi

Un cluster ZooKeeper può avere nodi distribuiti in più regioni/data center, DC-1 e DC-2. La tipica topologia DC 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 viene interrotta, I nodi di ZooKeeper non possono eleggere un nuovo leader in DC-2 e non comunicano con il leader nodo. Gli osservatori di ZooKeeper non possono eleggere un nuovo leader e i due elettori rimanenti nel DC-2 no avere un quorum di almeno 3 nodi elettorali per eleggere un nuovo leader. Pertanto, ZooKeepers in DC-2 non sarà in grado di elaborare alcuna richiesta. I restanti nodi ZooKeeper in DC-2 continueranno a essere loop nuovo tentativo di ricontattare gli 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 data center on-premise.
  2. Quando il gruppo ZooKeeper è in grado di comunicare tra i data center e di scegliere una Il leader di ZooKeeper, i nodi devono essere integri ed essere in grado di elaborare le richieste.

Soluzione 2

  1. Se la riparazione della connettività di rete richiede tempo, una soluzione alternativa è riconfigurare Nodi ZooKeeper nella regione in cui sono inattivi. Ad esempio, riconfigura ZooKeeper cluster in DC-2 in modo che i 3 nodi ZooKeeper in questa regione siano tutti elettori e rimuovi server.# nel zoo.cfg dello ZooKeepers della regione DC-1.
    1. Nell'esempio seguente, zoo.cfg configura i nodi per due regioni in cui DC-1 utilizza us-ea nomi host che indicano la regione US-East, mentre DC-2 utilizza us-wo nomi host che indicano la regione US-West. 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 codice con config, crea un file /opt/apigee/customer/application/zookeeper.properties con quanto segue:
      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 di Stati Uniti-Est vengono rimossi, mentre quelli di Stati Uniti-Ovest vengono promossi a votanti quando l'annotazione :observer viene rimossa.

  2. Backup di /opt/apigee/apigee-zookeeper/conf/zoo.cfg e versioni precedenti /opt/apigee/customer/application/zookeeper.properties.

    Questi file verranno utilizzati per ripristinare i valori predefiniti quando viene ripristinata la connettività di rete tra i data center.

  3. Disabilita la notazione osservatore per il nodo osservatore. Per farlo, aggiungi la seguente configurazione all'inizio 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 myid da 6 a 3.
  5. Riavvia i nodi ZooKeeper nella regione in cui hai riconfigurato ZooKeeper in un cluster Kubernetes.
  6. Ripeti la configurazione precedente dal passaggio 1b al passaggio 5 su tutti i nodi ZooKeeper in DC-2.
  7. Verifica che i nodi corrispondano a 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 con la dicitura "mode" seguito da "leader" se è il leader o "follower" se è un follower.

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

Soluzione 3

  1. Se i nodi ZooKeeper nel cluster non vengono avviati, riavvialo.
  2. Controlla i log di ZooKeeper per determinare perché il nodo ZooKeeper si è arrestato.

    I log di ZooKeeper sono disponibili nella directory seguente:

    $ 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 il Log di ZooKeeper per risolvere i problemi relativi alla causa di qualsiasi nodo ZooKeeper che potrebbe essere stato interrotto.

Il nodo ZooKeeper non gestisce le richieste

Un nodo ZooKeeper nell'ensemble potrebbe diventare non integro e non essere in grado di rispondere al client richieste. Il motivo potrebbe essere uno dei seguenti:

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

Diagnosi

  1. Esegui i seguenti comandi per il controllo di integrità di ZooKeeper su ciascuno dei nodi di ZooKeeper 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à nell'ammasso 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 di 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
      

      Indica quindi che uno o più nodi ZooKeeper non gestiscono le richieste.

  2. Controlla i log di ZooKeeper sul nodo specifico e prova a individuare eventuali errori che causano il ZooKeeper sia inattivo. I log di ZooKeeper sono disponibili nella directory seguente:
    $ 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 di nuovo i comandi per il controllo di integrità di ZooKeeper su ciascun nodo e verifica se ottieni come output.

Contatta l'assistenza Apigee per risolvere la causa del se il problema persiste o se il riavvio non risolve il problema.