Não é possível iniciar o Zookeeper

Esta é a documentação do Apigee Edge.
Acesse Documentação da Apigee X.
informações

Sintoma

Não foi possível iniciar o processo do ZooKeeper.

Mensagens de erro

Quando você tenta iniciar o processo do ZooKeeper, a seguinte mensagem de erro é retornada indicando que não foi possível iniciar o ZooKeeper:

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

Causas possíveis

A tabela a seguir lista as possíveis causas desse problema:

Causa Para
MiID do ZooKeeper configurado incorretamente Usuários da nuvem privada de borda
Porta do ZooKeeper em uso Usuários da nuvem privada de borda
ID de processo incorreto no arquivo apigee-zookeeper.pid Usuários da nuvem privada de borda
Falha na eleição do líder do ZooKeeper Usuários da nuvem privada de borda

Clique em um link na tabela e consulte as possíveis soluções para essa causa.

Meu ID do ZooKeeper configurado incorretamente

As seções a seguir fornecem uma visão geral do arquivo myid e descrevem como diagnosticar e e resolver problemas de configuração incorreta.

Visão geral do arquivo myid

Em cada nó do ZooKeeper, há dois arquivos:

  1. O arquivo /opt/apigee/apigee-zookeeper/conf/zoo.cfg, que contém uma lista de IPs para todos os nós do ZooKeeper no cluster.

    Por exemplo, se /opt/apigee/apigee-zookeeper/conf/zoo.cfg contiver o IPs de três nós do ZooKeeper que fazem parte do cluster da seguinte maneira:

    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. O arquivo /opt/apigee/data/apigee-zookeeper/data/myid contém uma única linha de que corresponde ao número do servidor desse nó do ZooKeeper específico. Meu ajuda de servidor 1 conteria o texto "1" e nada mais. O ID precisa ser exclusivo no ensemble e deve ter um valor entre 1 e 255.

    Por exemplo, no ZooKeeper server.1, a O arquivo /opt/apigee/data/apigee-zookeeper/data/myid precisa conter apenas o texto 1 conforme mostrado abaixo:

    $ cat myid
    1
    

Diagnóstico

  1. Verifique o registro /opt/apigee/var/log/apigee-zookeeper/zookeeper.log do ZooKeeper para erros.
  2. Se você receber uma mensagem de WARN semelhante a "Conexão quebrada para o ID #, meu id = #", conforme mostrado na figura abaixo, a possível causa desse problema poderia ser o erro no no arquivo myid está configurada incorretamente ou está corrompida.
    [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. Verifique o arquivo /opt/apigee/apigee-zookeeper/conf/zoo.cfg e anote as server.# do nó atual do ZooKeeper.
  4. Verifique o arquivo /opt/apigee/data/apigee-zookeeper/data/myid e veja se o texto neste arquivo corresponde ao server.# anotado na etapa 2.
  5. Se houver uma incompatibilidade, você terá identificado a causa da falha no ZooKeeper. começar.

Resolução

Se o arquivo myid estiver configurado incorretamente, edite o arquivo myid e substitua o valor por um texto correto que representa o parâmetro server.# no zoo.cfg.

Porta do ZooKeeper em uso

Diagnóstico

  1. Verificar o registro /opt/apigee/var/log/apigee-zookeeper/zookeeper.log do ZooKeeper por erros.
  2. Se você encontrar a exceção java.net.BindException: Address already in use ao vincular à porta no 2181, como mostra a figura abaixo, indica que o ZooKeeper a porta 2181 está sendo usada por outro processo. Portanto, o ZooKeeper não pôde ser iniciado.
    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. Use o comando netstat abaixo para confirmar se a porta 2181 do ZooKeeper está sendo usada de fato por outro processo:
    netstat -an | grep 2181
    

Resolução

Se a porta 2181 do ZooKeeper ainda estiver em uso, siga as etapas abaixo para solucionar isso problema:

  1. Use o comando netstat para encontrar o processo que está mantendo a porta 2181. Encerre o processo que está usando a porta 2181 do 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. Limpe os arquivos pid e de bloqueio, se houver:
    /opt/apigee/var/run/apigee-zookeeper/apigee-zookeeper.pid
    /opt/apigee/var/run/apigee-zookeeper/apigee-zookeeper.lock
    
  3. Reinicie o ZooKeeper:
    /opt/apigee/apigee-service/bin/apigee-service apigee-zookeeper restart
    

ID de processo incorreto no arquivo apigee-zookeeper.pid

Quando você tenta parar/reiniciar o ZooKeeper, pode ocorrer uma falha porque o O arquivo apigee-zookeeper.pid contém um pid antigo/incorreto e não o do arquivo que executa o processo ZooKeeper. Isso pode acontecer se o processo do ZooKeeper for encerrado inesperadamente ou abruptamente por algum motivo e o arquivo apigee-zookeeper.pid não foi excluído.

Diagnóstico

  1. Obtenha o ID do processo do ZooKeeper em execução no momento executando a propriedade Comando ps:
    ps -ef | grep zookeeper
    
  2. Verifique se o arquivo /opt/apigee/var/run/apigee-ZooKeeper/apigee-zookeeper.pid existe. Se existir, anote o ID do processo gravado nesse arquivo.
  3. Compare os IDs de processo das etapas 1 e 2. Se forem diferentes, a causa para este problema é ter o ID de processo incorreto no apigee-zookeeper.pid file.

Resolução

  1. Edite o arquivo apigee-zookeeper.pid e substitua o ID de processo incorreto pelo ID de processo obtido do comando ps (etapa 1 acima).
  2. Reinicie o ZooKeeper:
    /opt/apigee/apigee-service/bin/apigee-service apigee-zookeeper restart
    

Falha nas eleições do líder do ZooKeeper

Diagnóstico

Para diagnosticar:

  1. Verifique o registro /opt/apigee/var/log/apigee-zookeeper/zookeeper.log do ZooKeeper para erros.
  2. Verifique se houve alguma alteração na configuração que possa causar a eleição do ZooKeeper do a fracasso do líder.
  3. Verifique o /opt/apigee/apigee-zookeeper/conf/zoo.cfg e confira se todos Os ZooKeepers no cluster têm o número e os endereços IP apropriados para o parâmetro server.#. Observe também que, para que a eleição do líder seja bem-sucedida, é necessário ter pelo menos 3 votos e o número de eleitores deve ter números ímpares. Se houver poucos eleitores, como apenas dois eleitores, não pode chegar a um quórum para decidir um líder entre apenas dois eleitores.

Resolução

Normalmente, as falhas eleitorais do ZooKeeper são causadas por um ID configurado incorretamente. Usar a resolução em Miid do ZooKeeper configurado incorretamente para lidar com o fracasso da eleição.

Se o problema persistir e precisar de mais diagnósticos, entre em contato com o suporte do Apigee Edge.