Errori di perdita della connessione a Zookeeper

Stai visualizzando la documentazione di Apigee Edge.
Consulta la documentazione di Apigee X.
info

Sintomo

I problemi di connettività di ZooKeeper possono manifestarsi con diversi sintomi, ad esempio:

  1. Errori di deployment dei proxy API
  2. Chiamate API di gestione che generano errori 5XX
  3. Impossibilità di avviare router o processori di messaggi
  4. Componenti di analisi che segnalano la perdita della connessione ZooKeeper in system.logs

Messaggi di errore

Di seguito sono riportati alcuni esempi di messaggi di errore che potrebbero essere visualizzati in caso di perdita della connessione ai nodi ZooKeeper.

  1. Il seguente errore viene restituito nei log del server di gestione quando il deployment di un proxy API non riesce 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. Se si verificano problemi di connettività con ZooKeeper, questi componenti non verranno avviati e verrà visualizzato 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. L'interfaccia utente Edge 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

La tabella seguente elenca le possibili cause di questo problema:

Causa Per
Problema di connettività di rete tra diversi data center Utenti di Edge Private Cloud
Il nodo ZooKeeper non gestisce le richieste Utenti di Edge Private Cloud

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

Problema di connettività di rete tra diversi data center

Diagnosi

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

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

Se la regione DC-1 non è disponibile o la connettività di rete tra DC-1 e DC-2 è interrotta, allora i nodi ZooKeeper non possono eleggere un nuovo leader in DC-2 e non riescono a comunicare con il nodo leader. Gli osservatori ZooKeeper non possono eleggere un nuovo leader e i due votanti rimanenti in DC-2 non hanno un quorum di almeno 3 nodi votanti per eleggere un nuovo leader. Di conseguenza, gli ZooKeeper in DC-2 non saranno in grado di elaborare le richieste. I nodi ZooKeeper rimanenti in DC-2 continueranno a eseguire un loop di tentativi di riconnessione ai votanti ZooKeeper per trovare il leader.

Risoluzione

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

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

Soluzione n. 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 dovrebbero diventare integri ed essere in grado di elaborare le richieste.

Soluzione n. 2

  1. Se la riparazione della connettività di rete richiede tempo, una soluzione alternativa consiste nel riconfigurare i nodi ZooKeeper nella regione in cui non sono disponibili. Ad esempio, riconfigura il cluster ZooKeeper in DC-2 in modo che i 3 nodi ZooKeeper in questa regione siano tutti votanti e rimuovi server.# in zoo.cfg degli 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 US-East e 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 il codice con la configurazione, crea un file /opt/apigee/customer/application/zookeeper.properties con i seguenti contenuti:
      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\

    Nell'esempio precedente, i nodi di US-East vengono rimossi e i nodi di US-West vengono promossi a votanti quando viene rimossa l'annotazione :observer.

  2. Esegui il backup di /opt/apigee/apigee-zookeeper/conf/zoo.cfg e del vecchio /opt/apigee/customer/application/zookeeper.properties.

    Questi file verranno utilizzati per ripristinare le impostazioni predefinite quando la connettività di rete sarà di nuovo attiva tra i data center.

  3. Disattiva la notazione dell'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 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 il cluster ZooKeeper cluster.
  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 attivi con un 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 "mode" seguito da "leader" se è il leader o "follower" se è un follower.

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

Soluzione n. 3

  1. Se i nodi ZooKeeper nel cluster non sono stati avviati, riavviali.
  2. Controlla i log di ZooKeeper per determinare perché il nodo ZooKeeper non è disponibile.

    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 di 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'insieme potrebbe diventare non integro e non essere in grado di rispondere alle richieste dei client. I motivi potrebbero essere i seguenti:

  1. Il nodo è stato arrestato senza essere riavviato.
  2. Il nodo è stato riavviato senza che l'avvio automatico fosse attivato.
  3. Il carico di sistema sul nodo ha causato l'arresto o la perdita di integrità.

Diagnosi

  1. Esegui i seguenti comandi di controllo dell'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 nodo ZooKeeper singolo e 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 controllare 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 relative al rendimento e ai 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 dell'integrità mostra il seguente messaggio:

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

      Indica che i nodi ZooKeeper specifici non gestiscono le richieste.

  2. Controlla i log di ZooKeeper sul nodo specifico e prova a individuare eventuali errori che causano l' arresto 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 tutti gli altri nodi ZooKeeper nel cluster uno alla volta.
  2. Esegui di nuovo i comandi di controllo dell'integrità di ZooKeeper su ogni nodo e verifica se ottieni l'output previsto.

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