Вы просматриваете документацию по Apigee Edge.
Перейдите к документации по Apigee X. Информация
Symptom
Не удалось запустить процесс ZooKeeper.
Сообщения об ошибках
При попытке запустить процесс ZooKeeper возвращается следующее сообщение об ошибке, указывающее на то, что ZooKeeper не удалось запустить:
+ apigee-service apigee-zookeeper status apigee-service: apigee-zookeeper: Not running (DEAD) apigee-all: Error: status failed on [apigee-zookeeper]
Возможные причины
В таблице ниже перечислены возможные причины этой проблемы.
| Причина | Для кого |
|---|---|
| Неправильно настроенный файл myid в ZooKeeper | Пользователи Edge Private Cloud |
| Используется порт ZooKeeper | Пользователи Edge Private Cloud |
| Неправильный идентификатор процесса в файле apigee-zookeeper.pid | Пользователи Edge Private Cloud |
| Сбой при выборе лидера ZooKeeper | Пользователи Edge Private Cloud |
Нажмите на ссылку в таблице, чтобы посмотреть возможные решения.
Неправильно настроенный идентификатор myid в 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.1 файл
/opt/apigee/data/apigee-zookeeper/data/myidдолжен содержать только текст 1, как показано ниже:$ cat myid 1
диагностика;
- Проверьте журнал ZooKeeper
/opt/apigee/var/log/apigee-zookeeper/zookeeper.logна наличие ошибок. - Если вы видите предупреждение, похожее на "Connection broken for id #, my id = #" (Соединение с идентификатором # разорвано, мой идентификатор – #), как показано на рисунке ниже, то, возможно, сервер # в файле 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и запишите номер сервера для текущего узла ZooKeeper. - Проверьте файл
/opt/apigee/data/apigee-zookeeper/data/myidи убедитесь, что текст в нем соответствует серверу, указанному на шаге 2. - Если они не совпадают, вы нашли причину, по которой не запускается ZooKeeper.
Разрешение
Если файл myid настроен неправильно, отредактируйте его и замените значение на правильный текст, представляющий параметр server.# в файле zoo.cfg.
Используется порт ZooKeeper
диагностика;
- Проверьте журнал ZooKeeper
/opt/apigee/var/log/apigee-zookeeper/zookeeper.logна наличие ошибок. - Если при подключении к порту 2181 вы видите исключение
java.net.BindException: Address already in use, как показано на рисунке ниже, это означает, что порт 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)
- Чтобы убедиться, что порт ZooKeeper 2181 используется другим процессом, выполните приведенную ниже команду netstat:
netstat -an | grep 2181
Разрешение
Если порт ZooKeeper 2181 по-прежнему используется, выполните следующие действия:
- Чтобы найти процесс, который удерживает порт 2181, используйте команду
netstat. Завершите процесс, использующий порт ZooKeeper 2181:$ 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 указан устаревший или неверный идентификатор процесса, а не идентификатор текущего процесса 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.#. Обратите внимание, что для успешного выбора лидера необходимо как минимум три голосующих, и их количество должно быть нечетным. Если голосующих слишком мало, например всего два, то кворум не будет достигнут и лидера выбрать не получится.
Разрешение
Обычно сбой в выборе ZooKeeper вызван неправильной настройкой myid. Чтобы устранить проблему с выбором, используйте разрешение в разделе Неправильно настроенный myid ZooKeeper.
Если проблема не исчезнет и потребуется дополнительная диагностика, обратитесь в службу поддержки Apigee Edge.