Невозможно запустить Zookeeper

Вы просматриваете документацию Apigee Edge .
Перейдите к документации Apigee X.
информация

Симптом

Невозможно запустить процесс ZooKeeper.

Сообщения об ошибках

При попытке запустить процесс ZooKeeper возвращается следующее сообщение об ошибке, указывающее, что ZooKeeper не удалось запустить:

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

Возможные причины

В следующей таблице перечислены возможные причины этой проблемы:

Причина Для
Неправильно настроен мой идентификатор ZooKeeper. Пользователи Edge Private Cloud
Порт ZooKeeper используется Пользователи Edge Private Cloud
Неверный идентификатор процесса в файле apigee-zookeeper.pid. Пользователи Edge Private Cloud
Провал выборов лидера ZooKeeper Пользователи Edge Private Cloud

Щелкните ссылку в таблице, чтобы просмотреть возможные решения этой проблемы.

Неправильно настроен мой идентификатор ZooKeeper.

В следующих разделах представлен обзор файла myid и описано, как диагностировать и устранять проблемы неправильной конфигурации.

Обзор файла myid

На каждом узле ZooKeeper есть два файла:

  1. Файл /opt/apigee/apigee-zookeeper/conf/zoo.cfg , содержащий список IP-адресов для всех узлов ZooKeeper в кластере.

    Например, если /opt/apigee/apigee-zookeeper/conf/zoo.cfg содержит IP-адреса трех узлов ZooKeeper, входящих в состав кластера, следующим образом:

    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. Файл /opt/apigee/data/apigee-zookeeper/data/myid содержит одну строку текста, которая соответствует номеру сервера этого конкретного узла ZooKeeper. Myid сервера 1 будет содержать текст «1» и ничего больше. Идентификатор должен быть уникальным в пределах ансамбля и иметь значение от 1 до 255.

    Например, на ZooKeeper server.1 файл /opt/apigee/data/apigee-zookeeper/data/myid должен содержать только текст 1, как показано ниже:

    $ cat myid
    1

Диагностика

  1. Проверьте журнал ZooKeeper /opt/apigee/var/log/apigee-zookeeper/zookeeper.log на наличие ошибок.
  2. Если вы видите сообщение WARN, похожее на «Соединение разорвано для идентификатора #, мой идентификатор = #», как показано на рисунке ниже, возможной причиной этой проблемы может быть то, что сервер # в файле myid неправильно настроен или поврежден.
    [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. Проверьте файл /opt/apigee/apigee-zookeeper/conf/zoo.cfg и запишите server.# для текущего узла ZooKeeper.
  4. Проверьте файл /opt/apigee/data/apigee-zookeeper/data/myid и посмотрите, соответствует ли текст в этом файле серверу.#, указанному на шаге №2.
  5. Если есть несоответствие, значит, вы определили причину, по которой ZooKeeper не запускается.

Разрешение

Если файл myid настроен неправильно, отредактируйте файл myid и замените значение на правильный текст, представляющий параметр server.# в файле Zoo.cfg.

Порт ZooKeeper используется

Диагностика

  1. Проверьте журнал ZooKeeper /opt/apigee/var/log/apigee-zookeeper/zookeeper.log на наличие ошибок.
  2. Если вы заметили исключение java.net.BindException: Address already in use при привязке к порту № 2181, как показано на рисунке ниже, это указывает на то, что порт 2181 ZooKeeper используется другим процессом. Следовательно, ZooKeeper не удалось запустить.
    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. Используйте приведенную ниже команду netstat, чтобы убедиться, что порт ZooKeeper 2181 действительно используется другим процессом:
    netstat -an | grep 2181

Разрешение

Если порт ZooKeeper 2181 все еще используется, выполните следующие действия для решения этой проблемы:

  1. Используйте команду netstat , чтобы найти процесс, использующий порт 2181. Завершите процесс, использующий порт 2181 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. Очистите файлы pid и lock, если они существуют:
    /opt/apigee/var/run/apigee-zookeeper/apigee-zookeeper.pid
    /opt/apigee/var/run/apigee-zookeeper/apigee-zookeeper.lock
  3. Перезапустите ZooKeeper:
    /opt/apigee/apigee-service/bin/apigee-service apigee-zookeeper restart

Неверный идентификатор процесса в файле apigee-zookeeper.pid.

Когда вы попытаетесь остановить/перезапустить ZooKeeper, это может потерпеть неудачу, поскольку файл apigee-zookeeper.pid содержит более старый/неправильный идентификатор, а не идентификатор текущего запущенного процесса ZooKeeper. Это может произойти, если процесс ZooKeeper по какой-либо причине неожиданно или внезапно завершился, а файл apigee-zookeeper.pid не был удален.

Диагностика

  1. Получите идентификатор текущего процесса ZooKeeper, выполнив команду ps :
    ps -ef | grep zookeeper
  2. Проверьте, существует ли файл /opt/apigee/var/run/apigee-ZooKeeper/apigee-zookeeper.pid . Если он существует, запишите идентификатор процесса, записанный в этот файл.
  3. Сравните идентификаторы процессов, полученные на шагах №1 и №2. Если они разные, то причиной этой проблемы является неправильный идентификатор процесса в apigee-zookeeper.pid file.

Разрешение

  1. Отредактируйте файл apigee-zookeeper.pid и замените неправильный идентификатор процесса правильным идентификатором процесса, полученным с помощью команды ps (шаг № 1 выше).
  2. Перезапустите ZooKeeper:
    /opt/apigee/apigee-service/bin/apigee-service apigee-zookeeper restart

Провал выборов лидера ZooKeeper

Диагностика

Для диагностики:

  1. Проверьте журнал ZooKeeper /opt/apigee/var/log/apigee-zookeeper/zookeeper.log на наличие ошибок.
  2. Проверьте, не произошли ли какие-либо изменения в конфигурации, которые могут привести к сбою выбора лидера ZooKeeper.
  3. Проверьте файл /opt/apigee/apigee-zookeeper/conf/zoo.cfg и убедитесь, что все ZooKeeper в кластере имеют правильный номер и IP-адреса для параметра server.#. Также обратите внимание, что для успеха выборов лидера должно быть как минимум 3 избирателя, а число избирателей должно быть нечетным. Если избирателей слишком мало, например, всего 2 избирателя, не может быть достигнут кворум, чтобы определить лидера среди всего лишь 2 избирателей.

Разрешение

Как правило, сбой при выборе ZooKeeper вызван неправильной настройкой myid. Используйте разрешение в Misconfigured ZooKeeper myid, чтобы исправить ошибку выборов.

Если проблема не устранена и необходима дальнейшая диагностика, обратитесь в службу поддержки Apigee Edge .