Вы просматриваете документацию Apigee Edge .
Перейдите в документацию Apigee X.info
Симптом
Не удалось запустить процесс ZooKeeper.
Сообщения об ошибках
При попытке запуска процесса ZooKeeper возвращается следующее сообщение об ошибке, указывающее на то, что ZooKeeper не удалось запустить:
+ apigee-service apigee-zookeeper status apigee-service: apigee-zookeeper: Not running (DEAD) apigee-all: Error: status failed on [apigee-zookeeper]
Возможные причины
В таблице ниже перечислены возможные причины этой проблемы:
| Причина | Для |
|---|---|
| Неправильно настроен идентификатор пользователя ZooKeeper (myid). | Пользователи Edge Private Cloud |
| Порт ZooKeeper используется | Пользователи Edge Private Cloud |
| Неверный идентификатор процесса в файле apigee-zookeeper.pid. | Пользователи Edge Private Cloud |
| Провал выборов лидера зоопарка | Пользователи Edge Private Cloud |
Нажмите на ссылку в таблице, чтобы увидеть возможные решения данной проблемы.
Неправильно настроен идентификатор пользователя ZooKeeper (myid).
В следующих разделах представлен обзор файла myid и описано, как диагностировать и устранять проблемы, связанные с неправильной конфигурацией.
Обзор файла myid
На каждом узле ZooKeeper находятся два файла:
- Файл
/opt/apigee/apigee-zookeeper/conf/zoo.cfgсодержит список IP-адресов всех узлов ZooKeeper в кластере.Например, если файл
/opt/apigee/apigee-zookeeper/conf/zoo.cfgсодержит IP-адреса 3 узлов 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и убедитесь, что текст в этом файле совпадает с server.#, указанным в шаге #2. - Если обнаружено несоответствие, значит, вы определили причину, по которой ZooKeeper не запускается.
Разрешение
Если файл myid настроен неправильно, отредактируйте его и замените значение на правильный текст, представляющий параметр server.# из файла zoo.cfg.
Порт ZooKeeper используется
Диагноз
- Проверьте журнал ZooKeeper
/opt/apigee/var/log/apigee-zookeeper/zookeeper.logна наличие ошибок. - Если вы обратите внимание на исключение
java.net.BindException: Address already in usewhile binding to the port #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, чтобы убедиться, что порт 2181 ZooKeeper действительно используется другим процессом:
netstat -an | grep 2181
Разрешение
Если порт 2181 в ZooKeeper по-прежнему используется, выполните следующие действия для решения этой проблемы:
- Используйте команду
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 и блокировки, если они существуют:
/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 содержит устаревший/некорректный PID, а не 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
/opt/apigee/var/log/apigee-zookeeper/zookeeper.logна наличие ошибок. - Проверьте, не были ли внесены какие-либо изменения в конфигурацию, которые могли бы привести к сбою выбора лидера ZooKeeper.
- Проверьте файл
/opt/apigee/apigee-zookeeper/conf/zoo.cfgи убедитесь, что все ZooKeeper в кластере имеют правильное количество и IP-адреса для параметра server.#. Также обратите внимание, что для успешного проведения выборов лидера необходимо как минимум 3 избирателя, и это число должно быть нечетным. Если избирателей слишком мало, например, всего 2, то кворум для определения лидера из 2 избирателей не будет достигнут.
Разрешение
Как правило, сбой при выборе ZooKeeper вызван неправильно настроенным myid. Используйте решение, описанное в разделе «Неправильно настроенный myid ZooKeeper», чтобы устранить сбой при выборе ZooKeeper.
Если проблема сохраняется и требуется дальнейшая диагностика, обратитесь в службу поддержки Apigee Edge .