Вы просматриваете документацию 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 есть два файла:
- Файл
/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
- Файл
/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
Диагностика
- Проверьте журнал ZooKeeper
/opt/apigee/var/log/apigee-zookeeper/zookeeper.log
на наличие ошибок. - Если вы видите сообщение 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)
- Проверьте файл
/opt/apigee/apigee-zookeeper/conf/zoo.cfg
и запишите server.# для текущего узла ZooKeeper. - Проверьте файл
/opt/apigee/data/apigee-zookeeper/data/myid
и посмотрите, соответствует ли текст в этом файле серверу.#, указанному на шаге №2. - Если есть несоответствие, значит, вы определили причину, по которой ZooKeeper не запускается.
Разрешение
Если файл myid настроен неправильно, отредактируйте файл myid и замените значение на правильный текст, представляющий параметр server.# в файле Zoo.cfg.
Порт ZooKeeper используется
Диагностика
- Проверьте журнал ZooKeeper
/opt/apigee/var/log/apigee-zookeeper/zookeeper.log
на наличие ошибок. - Если вы заметили исключение
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)
- Используйте приведенную ниже команду netstat, чтобы убедиться, что порт ZooKeeper 2181 действительно используется другим процессом:
netstat -an | grep 2181
Разрешение
Если порт ZooKeeper 2181 все еще используется, выполните следующие действия для решения этой проблемы:
- Используйте команду
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
- Очистите файлы pid и lock, если они существуют:
/opt/apigee/var/run/apigee-zookeeper/apigee-zookeeper.pid /opt/apigee/var/run/apigee-zookeeper/apigee-zookeeper.lock
- Перезапустите ZooKeeper:
/opt/apigee/apigee-service/bin/apigee-service apigee-zookeeper restart
Неверный идентификатор процесса в файле apigee-zookeeper.pid.
Когда вы попытаетесь остановить/перезапустить ZooKeeper, это может потерпеть неудачу, поскольку файл apigee-zookeeper.pid
содержит более старый/неправильный идентификатор, а не идентификатор текущего запущенного процесса ZooKeeper. Это может произойти, если процесс ZooKeeper по какой-либо причине неожиданно или внезапно завершился, а файл apigee-zookeeper.pid
не был удален.
Диагностика
- Получите идентификатор текущего процесса ZooKeeper, выполнив команду
ps
:ps -ef | grep zookeeper
- Проверьте, существует ли файл
/opt/apigee/var/run/apigee-ZooKeeper/apigee-zookeeper.pid
. Если он существует, запишите идентификатор процесса, записанный в этот файл. - Сравните идентификаторы процессов, полученные на шагах №1 и №2. Если они разные, то причиной этой проблемы является неправильный идентификатор процесса в
apigee-zookeeper.pid file.
Разрешение
- Отредактируйте файл apigee-zookeeper.pid и замените неправильный идентификатор процесса правильным идентификатором процесса, полученным с помощью команды ps (шаг № 1 выше).
- Перезапустите ZooKeeper:
/opt/apigee/apigee-service/bin/apigee-service apigee-zookeeper restart
Провал выборов лидера ZooKeeper
Диагностика
Для диагностики:
- Проверьте журнал ZooKeeper
/opt/apigee/var/log/apigee-zookeeper/zookeeper.log
на наличие ошибок. - Проверьте, не произошли ли какие-либо изменения в конфигурации, которые могут привести к сбою выбора лидера ZooKeeper.
- Проверьте файл
/opt/apigee/apigee-zookeeper/conf/zoo.cfg
и убедитесь, что все ZooKeeper в кластере имеют правильный номер и IP-адреса для параметра server.#. Также обратите внимание, что для успеха выборов лидера должно быть как минимум 3 избирателя, а число избирателей должно быть нечетным. Если избирателей слишком мало, например, всего 2 избирателя, не может быть достигнут кворум, чтобы определить лидера среди всего лишь 2 избирателей.
Разрешение
Как правило, сбой при выборе ZooKeeper вызван неправильной настройкой myid. Используйте разрешение в Misconfigured ZooKeeper myid, чтобы исправить ошибку выборов.
Если проблема не устранена и необходима дальнейшая диагностика, обратитесь в службу поддержки Apigee Edge .