Impossibile avviare Zookeeper

Stai visualizzando la documentazione di Apigee Edge.
Vai alla sezione Documentazione di Apigee X.
Informazioni

Sintomo

Impossibile avviare il processo ZooKeeper.

Messaggi di errore

Quando tenti di avviare il processo di ZooKeeper, viene restituito il seguente messaggio di errore che indica che non è stato possibile avviare ZooKeeper:

+ apigee-service apigee-zookeeper status
apigee-service: apigee-zookeeper: Not running (DEAD)
apigee-all: Error: status failed on [apigee-zookeeper]

Possibili cause

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

Causa Per
Myid ZooKeeper configurato in modo errato Utenti Edge Private Cloud
Porta ZooKeeper in uso Utenti Edge Private Cloud
ID di processo errato nel file apigee-zookeeper.pid Utenti Edge Private Cloud
Errore durante le elezioni leader di ZooKeeper Utenti Edge Private Cloud

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

Myid ZooKeeper configurato in modo errato

Le seguenti sezioni forniscono una panoramica del file myid e descrivono come diagnosticare e risolvere i problemi di configurazione errata.

Panoramica del file myid

Su ogni nodo di ZooKeeper sono presenti due file:

  1. Il file /opt/apigee/apigee-zookeeper/conf/zoo.cfg che contiene un elenco di IP per tutti i nodi ZooKeeper nel cluster.

    Ad esempio, se /opt/apigee/apigee-zookeeper/conf/zoo.cfg contiene il parametro IP di 3 nodi ZooKeeper che fanno parte del cluster come segue:

    server.1=11.11.11.11:2888:3888
    server.2=22.22.22.22:2888:3888
    server.3=33.33.33.33:2888:3888
    
  2. Il file /opt/apigee/data/apigee-zookeeper/data/myid contiene una singola riga di che corrisponde al numero di server di quel particolare nodo ZooKeeper. The myid di server 1 conterrà il testo "1" e nient'altro. L'ID deve essere univoco all'interno dell'insieme e deve avere un valore compreso tra 1 e 255.

    Ad esempio, sul server ZooKeeper.1, la proprietà Il file /opt/apigee/data/apigee-zookeeper/data/myid deve contenere solo il testo 1 come mostrato di seguito:

    $ cat myid
    1
    

Diagnosi

  1. Controlla il log ZooKeeper /opt/apigee/var/log/apigee-zookeeper/zookeeper.log per errori.
  2. Se viene visualizzato un messaggio WARN simile a "Connessione interrotta per ID #, mio ID = #", come illustrato nella figura seguente, la possibile causa potrebbe essere che il server # nel file myid non è configurato correttamente o è danneggiato.
    [myid:2] - WARN [RecvWorker:2:QuorumCnxManager$RecvWorker@762] -
      Connection broken for id 2, my id = 2, error = java.io.EOFException
        at java.io.DataInputStream.readInt(DataInputStream.java:375)
        at org.apache.zookeeper.server.quorum.QuorumCnxManager$RecvWorker.
          run(QuorumCnxManager.java:747)
    
  3. Controlla il file /opt/apigee/apigee-zookeeper/conf/zoo.cfg e prendi nota delle server.# per il nodo ZooKeeper attuale.
  4. Controlla il file /opt/apigee/data/apigee-zookeeper/data/myid e verifica se il testo in questo file corrisponde al server.# indicato nel passaggio #2.
  5. Se c'è una mancata corrispondenza, significa che hai identificato la causa del mancato funzionamento di ZooKeeper. per iniziare.

Risoluzione

Se il file myid non è configurato correttamente, modificalo e sostituisci il valore con un testo corretto che rappresenta il parametro server.# nel zoo.cfg.

Porta ZooKeeper in uso

Diagnosi

  1. Controlla il log ZooKeeper /opt/apigee/var/log/apigee-zookeeper/zookeeper.log per errori.
  2. Se noti l'eccezione java.net.BindException: Address already in use mentre è associato alla porta #2181, come mostrato nella figura seguente, indica che lo ZooKeeper la porta 2181 è utilizzata da un altro processo. Di conseguenza, ZooKeeper non può essere avviato.
    2017-04-26 07:00:10,420 [myid:3] - INFO  [main:NIOServerCnxnFactory@94] -
      binding to port 0.0.0.0/0.0.0.0:2181
    2017-04-26 07:00:10,421 [myid:3] - ERROR [main:QuorumPeerMain@89] -
      Unexpected exception, exiting abnormally
      java.net.BindException: Address already in use
        at sun.nio.ch.Net.bind0(Native Method)
        at sun.nio.ch.Net.bind(Net.java:433)
        at sun.nio.ch.Net.bind(Net.java:425)
        at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:223)
        at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:74)
        at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:67)
        at org.apache.zookeeper.server.NIOServerCnxnFactory.configure(NIOServerCnxnFactory.java:95)
        at org.apache.zookeeper.server.quorum.QuorumPeerMain.runFromConfig(QuorumPeerMain.java:130)
        at org.apache.zookeeper.server.quorum.QuorumPeerMain.initializeAndRun(QuorumPeerMain.java:111)
        at org.apache.zookeeper.server.quorum.QuorumPeerMain.main(QuorumPeerMain.java:78)
    
  3. Utilizza il seguente comando netstat per verificare che la porta 2181 di ZooKeeper sia effettivamente in uso con un altro processo:
    netstat -an | grep 2181
    

Risoluzione

Se la porta 2181 di ZooKeeper è ancora in uso, segui questi passaggi per risolvere il problema problema:

  1. Utilizza il comando netstat per trovare il processo che mantiene la porta 2181. Termina il processo che utilizza la porta 2181 di ZooKeeper:
    $ netstat -antp | grep 2181
    tcp        0      0 0.0.0.0:2181            0.0.0.0:*
    LISTEN      28016/java <defunct>
    $ kill -9 28016
    
  2. Pulisci i file PID e Blocca, se presenti:
    /opt/apigee/var/run/apigee-zookeeper/apigee-zookeeper.pid
    /opt/apigee/var/run/apigee-zookeeper/apigee-zookeeper.lock
    
  3. Riavvia ZooKeeper:
    /opt/apigee/apigee-service/bin/apigee-service apigee-zookeeper restart
    

ID di processo errato nel file apigee-zookeeper.pid

Quando tenti di arrestare/riavviare ZooKeeper, l'operazione potrebbe non riuscire perché apigee-zookeeper.pid file contiene PID obsoleto/non corretto e non quello del file attuale che esegue il processo ZooKeeper. Questo può accadere se il processo ZooKeeper si è arrestato in modo imprevisto o improvvisamente per qualche motivo e il file apigee-zookeeper.pid non è stato eliminato.

Diagnosi

  1. Ottieni l'ID del processo ZooKeeper attualmente in esecuzione eseguendo il comando Comando ps:
    ps -ef | grep zookeeper
    
  2. Controlla se il file /opt/apigee/var/run/apigee-ZooKeeper/apigee-zookeeper.pid esiste già. Se esiste, annota l'ID di processo scritto in questo file.
  3. Confronta gli ID di processo presi ai passaggi 1 e 2. Se ci sono differenze, la causa per questo problema è avere un ID processo errato in apigee-zookeeper.pid file.

Risoluzione

  1. Modifica il file apigee-zookeeper.pid e sostituisci l'ID di processo errato con quello corretto ID processo ottenuto dal comando ps (passaggio 1 sopra).
  2. Riavvia ZooKeeper:
    /opt/apigee/apigee-service/bin/apigee-service apigee-zookeeper restart
    

Errore elettorale leader di ZooKeeper

Diagnosi

Per eseguire la diagnosi:

  1. Controlla il log ZooKeeper /opt/apigee/var/log/apigee-zookeeper/zookeeper.log per errori.
  2. Controlla se sono state apportate modifiche alla configurazione che potrebbero causare l'elezione del metodo ZooKeeper il leader fallisce.
  3. Controlla il /opt/apigee/apigee-zookeeper/conf/zoo.cfg e assicurati che tutti Gli ZooKeeper nel cluster hanno il numero e gli indirizzi IP corretti per il parametro server.#. Inoltre, tieni presente che, affinché l'elezione dei leader abbia successo, è necessario che ci siano almeno 3 elettori e il numero di elettori deve essere dispari. Se il numero di elettori è troppo basso, ad esempio 2 elettori, non può giungere al quorum per decidere un leader tra soli due elettori.

Risoluzione

Generalmente, l'errore elettorale di ZooKeeper è causato da un myid configurato in modo errato. Utilizza la risoluzione in Configurazione errata di ZooKeeper myid per risolvere il problema delle elezioni.

Se il problema persiste e sono necessarie ulteriori diagnosi, contatta l'assistenza Apigee Edge.