Подтвердить что ты не робот

Ошибка подключения Zookeeper

У нас есть автономная установка zookeeper на dev-машине. Он отлично работает для каждой другой машины-разработчика, кроме этой одной машины testdev.

Мы повторяем эту ошибку снова и снова при попытке подключиться к zookeeper с помощью testdev:

2012-11-09 14:06:53,909 - INFO  [main-SendThread(zk01.dev.bunchball.net:2181):[email protected]] - Socket connection established to zk01.dev.bunchball.net/192.168.8.58:2181, initiating session
2012-11-09 14:06:53,911 - INFO  [main-SendThread(zk01.dev.bunchball.net:2181):[email protected]] - Unable to read additional data from server sessionid 0x0, likely server has closed socket, closing socket connection and attempting reconnect
2012-11-09 14:06:55,366 - INFO  [main-SendThread(zk01.dev.bunchball.net:2181):[email protected]] - Opening socket connection to server zk01.dev.bunchball.net/192.168.8.58:2181
2012-11-09 14:06:55,368 - INFO  [main-SendThread(zk01.dev.bunchball.net:2181):[email protected]] - Socket connection established to zk01.dev.bunchball.net/192.168.8.58:2181, initiating session
2012-11-09 14:06:55,368 - INFO  [main-SendThread(zk01.dev.bunchball.net:2181):[email protected]] - Unable to read additional data from server sessionid 0x0, likely server has closed socket, closing socket connection and attempting reconnect
2012-11-09 14:06:57,271 - INFO  [main-SendThread(zk01.dev.bunchball.net:2181):[email protected]] - Opening socket connection to server zk01.dev.bunchball.net/192.168.8.58:2181
2012-11-09 14:06:57,274 - INFO  [main-SendThread(zk01.dev.bunchball.net:2181):[email protected]] - Socket connection established to zk01.dev.bunchball.net/192.168.8.58:2181, initiating session
2012-11-09 14:06:57,275 - INFO  [main-SendThread(zk01.dev.bunchball.net:2181):[email protected]] - Unable to read additional data from server sessionid 0x0, likely server has closed socket, closing socket connection and attempting reconnect

Мы попытались перезапустить тестовую машину, а также перезапустить хост-хостер, но ничего не получилось. Мы совершенно сбиты с толку, почему он отлично работает с другими машинами, кроме этого. Что может быть причиной этого?

4b9b3361

Ответ 1

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

Именно по этой причине вы сконфигурировали четное количество zookeepers, которые непосредственно приводят к эту проблему, попробуйте изменить свой номер zookeeper node на нечетный.

например, исходное состояние моего кластера zookeeper состоит из 4 узлов, а затем просто удалите один из них, в результате число node будет равным 3 ну, теперь его нормально запускать кластер zookeeper

ниже - результат успешного подключения к серверу zookeeper

2013-04-22 22:07:05,654 [myid:] - INFO  [main:[email protected]] - Initiating client connection, connectString=localhost:2181 sessionTimeout=30000 [email protected]
Welcome to ZooKeeper!
2013-04-22 22:07:05,704 [myid:] - INFO  [main-SendThread(localhost:2181):[email protected]] - Opening socket connection to server localhost/127.0.0.1:2181. Will not attempt to authenticate using SASL (unknown error)
JLine support is enabled
2013-04-22 22:07:05,727 [myid:] - INFO  [main-SendThread(localhost:2181):[email protected]] - Socket connection established to localhost/127.0.0.1:2181, initiating session
[zk: localhost:2181(CONNECTING) 0] 2013-04-22 22:07:05,846 [myid:] - INFO  [main-SendThread(localhost:2181):[email protected]] - Session establishment complete on server localhost/127.0.0.1:2181, sessionid = 0x13e3211c06e0000, negotiated timeout = 30000

Ответ 2

Я столкнулся с той же проблемой и обнаружил, что из-за узлов кластера zookeeper нужны порты, открытые для связи друг с другом.

server.1=xx.xx.xx.xx:2888:3888

server.2=xx.xx.xx.xx:2888:3888

server.3=xx.xx.xx.xx:2888:3888

как только я разрешил эти порты через группу безопасности aws и перезапустил. Все работало отлично для меня

Ответ 3

Я только что решил проблему. Я использую centos 7. И создатель проблемы - это firewall. Использование "systemctl stop firewalld", чтобы закрыть все это на каждом сервере, может просто решить проблему. Или вы можете использовать команду, например

firewall-cmd --zone=public --add-port=2181/udp --add-port=2181/tcp --permanent" to configure all three ports ,include 2181,2888,3888 in each server.And then "firewall-cmd --reload

Наконец, используйте

zkServer.sh restart

чтобы перезагрузить сервер и решить проблему.

Ответ 4

В моем случае я config zoo.cfg вот так:

server.1=host-1:2888:3888
server.2=host-2:2888:3888
server.3=host-3:2888:3888

Но, в host-1, я config host-1 разрешает 127.0.0.1 в /etc/hosts:

127.0.0.1   localhost host-1

который может привести к тому, что другие хосты не смогут с ним общаться. Разрешить хост-1 его реальному ip решил эту проблему.

Надеюсь, это поможет.

Ответ 5

У меня тоже была эта проблема, и оказалось, что я говорил zookeeper подключиться к неправильному порту. Вы проверили, что zookeeper фактически работает на порту 2181 на машине dev?

Ответ 6

У меня была та же ошибка, когда я пытался соединить моего брокера с моим ансамблем Zookeeper, используя записи A для указания IP-адресов Zookeeper. Проблема была в моих зоопарках. Моим зоопаркам не удалось привязаться к порту 2181, потому что я указывал свои записи A на общедоступный IP-адрес. Это мешало ансамблю зоопарка выбирать лидера и общаться друг с другом. Указание записей на частный IP позволило ансамблю zookeeper выбрать лидера, и кластер стал активным. После этого, когда я попытался подключить одного из моих брокеров к ансамблю, он успешно подключился.

Ответ 7

У меня тоже была эта проблема, и я обнаружил, что мне просто нужно перезапустить zookeeper, а затем перезагрузить tomcat, чтобы мой webapp был хорошо подключен, а затем

Ответ 8

Я смог начать с zookeeper и kafka, имеющих по 2 узла. Я получил ошибку, потому что я начал zookeeper с. /zkServer.sh вместо оболочки kafka bin/zookeeper-server-start.sh config/zookeeper.properties

Ответ 9

Убедитесь, что все необходимые службы запущены

Шаг 1: проверьте, работает ли hbase-master

sudo /etc/init.d/hbase-master status

если нет, тогда запустите его sudo /etc/init.d/hbase-master start

Шаг 2. Проверьте, работает ли hbase-regionserver

sudo /etc/init.d/hbase-regionserver status

если нет, тогда запустите его sudo /etc/init.d/hbase-regionserver start

Шаг 3. Проверьте, работает ли zookeeper-сервер

sudo /etc/init.d/zookeeper-server status

если нет, тогда запустите его sudo /etc/init.d/zookeeper-server start


или просто запустите эти 3 команды в строке.

sudo /etc/init.d/hbase-master restart
sudo /etc/init.d/hbase-regionserver restart
sudo /etc/init.d/zookeeper-server restart

после этого не забудьте проверить статус

sudo /etc/init.d/hbase-master status
sudo /etc/init.d/hbase-regionserver status
sudo /etc/init.d/zookeeper-server status

Вы можете обнаружить, что zookeeper все еще не запущен: то вы можете запустить zookeeper

sudo /usr/lib/zookeeper/bin/zkServer.sh stop
sudo /usr/lib/zookeeper/bin/zkServer.sh start

после этого снова проверьте состояние и убедитесь, что его запуск

sudo /etc/init.d/zookeeper-server status

Это должно работать.

Ответ 10

Я запускаю автономный экземпляр на своей машине и сталкиваюсь с той же проблемой. Наконец, я перехожу из ip "127.0.0.1" в "localhost", и проблема исчезла.

Ответ 11

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

my conf/zoo.cfg примерно так:

server.1=10.194.236.32:2888:3888
server.2=10.194.236.33:2888:3888
server.3=10.208.177.15:2888:3888
server.4=10.210.154.23:2888:3888
server.5=10.210.154.22:2888:3888

тогда я устанавливаю data/myid содержимое файла следующим образом:

1      //at host  10.194.236.32
2      //at host  10.194.236.33
3      //at host  10.208.177.15
4      //at host  10.210.154.23
5      //at host  10.210.154.22

наконец перезапустить zookeeper

Ответ 12

Это может произойти, если слишком много открытых подключений.

Попробуйте увеличить настройку maxClientCnxns.

Из документация:

maxClientCnxns (Нет системного свойства Java)

Ограничивает количество параллельных подключений (на уровне сокета), которые один клиент, идентифицированный по IP-адресу, может сделать одному члену ансамбля ZooKeeper. Это используется для предотвращения определенных классов DoS-атак, включая исчерпывание дескриптора файла. Установка этого значения в 0 или его удаление полностью устраняет ограничение на одновременные соединения.

Вы можете редактировать настройки в файле конфигурации. Скорее всего, его можно найти в /etc/zookeeper/conf/zoo.cfg.

В современных версиях ZooKeeper значение по умолчанию равно 60. Вы можете увеличить его, добавив строку maxClientCnxns=4096 в конец файла конфигурации.

Ответ 13

Я также столкнулся с этой проблемой на прошлой неделе и сумел исправить это сейчас. Мне пришла в голову идея решить эту проблему из ответа @gukoff.

Мое требование и ситуация немного отличались от тех, о которых я уже говорил, но проблема была в основном той же, поэтому я решил поделиться ею в этой теме.

На самом деле я пытался запросить кворум zookeeper (через каждые 30 секунд) для получения некоторой информации из моего приложения и использовал для этого платформу Curator (методы, доступные в классе LeaderLatch). Итак, по сути, я запускал клиент CuratorFramework и предоставлял его объекту LeaderLatch.

Только после того, как я столкнулся с ошибкой, упомянутой в этой теме, я понял, что не закрывал клиентские соединения zookeeper, установленные в моих приложениях. Свойство maxClientCnxns имело значение 60, и как только число подключений (все они были устаревшими) достигло 60, мое приложение начало жаловаться на эту ошибку.

О количестве открытых соединений я узнал по:

  1. Проверка журналов zookeeper, где были сообщения с предупреждением "Слишком много соединений с {IP-адрес хоста}"

  2. Выполнение следующей команды netstat с того же хоста, который указан в журналах выше, где выполнялось мое приложение:

netstat -no | grep: 2181 | туалет -l

Примечание. Порт 2181 используется по умолчанию для zookeeper, предоставляемого в качестве параметра в grep для соответствия соединениям zookeeper.

Чтобы исправить это, я очистил все эти устаревшие соединения вручную, а затем добавил код для корректного закрытия клиентских соединений zookeeper в моем приложении.

Надеюсь, это поможет!

Ответ 14

Также проверьте локальный брандмауэр, статус службы firewalld

Если он работает, просто остановите его службу firewalld stop

А потом попробуй.

Ответ 15

Проверьте журналы zookeeper (/var/log/zookeeper). Похоже, что установлено соединение, которое должно означать, что есть запись об этом.

У меня была такая же ситуация, и это было потому, что процесс открыл соединения и не смог их закрыть. Это в конечном итоге превысило лимит подключения к одному хосту, и мои журналы были переполнены с помощью

2016-08-03 15:21:13,201 [myid:] - WARN  [NIOServerCxn.Factory:0.0.0.0/0.0.0.0:2181:[email protected]] - Too many connections from /172.31.38.64 - max is 50

Предполагая, что zookeeper находится на обычном порту, вы можете сделать чек для этого:

lsof -i -P | grep 2181

Ответ 16

Я тоже столкнулся с такой же проблемой. В моем случае проблема связана с правилами iptables.

Для связи с zookeeper node, порт 2181 должен принимать входящий запрос, а также для внутренней связи между узлами zookeeper. Для входящего запроса должны быть открыты порты 2888,3888.

iptables -t nat -I PREROUTING -p tcp -s 10.0.0.0/24 --dport 2181 -j DNAT --to-destination serverIp:2181
iptables -t nat -I PREROUTING -p udp -s 10.0.0.0/24 --dport 2181 -j DNAT --to-destination serverIp:2181

iptables -t nat -I PREROUTING -p tcp -s 10.0.0.0/24 --dport 2888 -j DNAT --to-destination serverIp:2888
iptables -t nat -I PREROUTING -p udp -s 10.0.0.0/24 --dport 2888 -j DNAT --to-destination serverIp:2888

iptables -t nat -I PREROUTING -p tcp -s 10.0.0.0/24 --dport 3888 -j DNAT --to-destination serverIp:3888
iptables -t nat -I PREROUTING -p udp -s 10.0.0.0/24 --dport 3888 -j DNAT --to-destination serverIp:3888

sudo service iptables save

Ответ 17

Это обычная проблема, если сервер Zookeeper не работает или больше не работает (т.е. он разбился после его запуска).

Итак, сначала убедитесь, что у вас запущен сервер Zookeeper. Простым способом проверки является grep запущенных процессов:

# ps -ef | grep zookeeper

(запустите это несколько раз, чтобы узнать, остается ли там тот же самый идентификатор процесса), возможно, он перезапустится с новым идентификатором процесса. В качестве альтернативы вы можете использовать "systemctl status zookeeper", если ваша система поддержки дистрибутива Linuxdd)

Вы должны увидеть процесс, выполняемый как Java-процесс:

# ps -ef | grep zookeeper
root       492     0  0 00:01 pts/1    00:00:00 java -Dzookeeper.log.dir=. -Dzookeeper.root.logger=INFO,CONSOLE -cp /root/zookeeper-3.5.0-alpha/bin/../build/classes:/root/zookeeper-3.5.0-alpha/bin/../build/lib/*.jar:/root/zookeeper-3.5.0-alpha/bin/../lib/slf4j-log4j12-1.7.5.jar:/root/zookeeper-3.5.0-alpha/bin/../lib/slf4j-api-1.7.5.jar:/root/zookeeper-3.5.0-alpha/bin/../lib/servlet-api-2.5-20081211.jar:/root/zookeeper-3.5.0-alpha/bin/../lib/netty-3.7.0.Final.jar:/root/zookeeper-3.5.0-alpha/bin/../lib/log4j-1.2.16.jar:/root/zookeeper-3.5.0-alpha/bin/../lib/jline-2.11.jar:/root/zookeeper-3.5.0-alpha/bin/../lib/jetty-util-6.1.26.jar:/root/zookeeper-3.5.0-alpha/bin/../lib/jetty-6.1.26.jar:/root/zookeeper-3.5.0-alpha/bin/../lib/javacc.jar:/root/zookeeper-3.5.0-alpha/bin/../lib/jackson-mapper-asl-1.9.11.jar:/root/zookeeper-3.5.0-alpha/bin/../lib/jackson-core-asl-1.9.11.jar:/root/zookeeper-3.5.0-alpha/bin/../lib/commons-cli-1.2.jar:/root/zookeeper-3.5.0-alpha/bin/../zookeeper-3.5.0-alpha.jar:/root/zookeeper-3.5.0-alpha/bin/../src/java/lib/*.jar:/root/zookeeper-3.5.0-alpha/bin/../conf: -Xmx1000m -Xmx1000m -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.local.only=false org.apache.zookeeper.server.quorum.QuorumPeerMain /root/zookeeper-3.5.0-alpha/bin/../conf/zoo.cfg

Если его там нет, тогда в файле журнала zookeeper может появиться что-то, указывающее на проблему.

Чтобы найти файл журнала zookeeper, вы должны сначала выяснить, где его настроить для ведения журнала. В моем случае у меня есть zookeeper, установленный в моем корневом каталоге (не предлагая установить его там):

[[email protected]_zookeeper conf]# pwd
/root/zookeeper-3.5.0-alpha/conf

И вы можете найти параметр журнала в этом файле:

[[email protected]_zookeeper conf]# grep "zookeeper.log" log4j.properties 
zookeeper.log.dir=/var/log
zookeeper.log.file=zookeeper.log
zookeeper.log.threshold=INFO
zookeeper.log.maxfilesize=256MB
zookeeper.log.maxbackupindex=20

Итак, Zookeeper настроен на запись в /var/log.

Тогда обычно есть файл zookeeper.log и/или zookeeper.out, который должен указывать вашу ошибку при запуске.

Ответ 18

Произошла такая же ошибка при настройке в кластере 2 node. Я обнаружил, что перепутал содержимое файла myid с файлом server.id = HOST_IP: port.

По существу, если у вас есть два сервера (SERVER1 и SERVER2), для которых вы создали файлы "myid" в dataDir для zookeeper, как показано ниже

SERVER1 (myid)
1

SERVER2 (myid)
2

Убедитесь, что запись в вашем файле zoo.cfg соответствует каждому из этих серверов i.e.1 должна использовать имя сервера и серверное имя сервера SERVER1.2 следует использовать имя хоста SERVER2, за которым следует порт, как показано ниже

SERVER1 (zoo.cfg)
... (other config omitted)
server.1=SERVER1:2888:3888
server.2=SERVER2:2888:3888

SERVER2 (zoo.cfg)
... (other config omitted)
server.1=SERVER1:2888:3888
server.2=SERVER2:2888:3888

Чтобы убедиться, я также удалил папку version- * в dataDir, а затем перезапустил Zookeeper, чтобы заставить его работать.

Ответ 19

Невозможно прочитать дополнительные данные с идентификатора сеанса сервера 0x0, вероятно, сервер закрыл сокет, закрыл соединение с сокетом и попытался восстановить соединение (org.apache.zookeeper.ClientCnxn)

Я изменил только количество брокеров в файле zoo.cfg и перезапустил сервис zookeeper и kafka

Ответ 20

Я также получаю ту же ошибку, когда запускаю свой реплицированный zk, один из zkClient не может подключиться к localhost: 2181, я проверил файл журнала в каталоге apache-zookeeper-3.5.5-bin/logs и обнаружил следующее:

2019-08-20 11: 30: 39,763 [myid: 5] - WARN [QuorumPeermyid = 5 (обеспечение = отключено): QuorumCnxManager @677] - Невозможно открыть канал до 3 по адресу выбора /xxxx: 3888 java.net.SocketTimeoutException: истекло время ожидания соединения java.net.PlainSocketImpl.socketConnect (собственный метод) в java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)   в java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)   в java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)   в java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) в java.net.Socket.connect(Socket.java:589) в org.apache.zookeeper.server.quorum.QuorumCnxManager.connectOne(QuorumCnxManager.java:648)   в org.apache.zookeeper.server.quorum.QuorumCnxManager.connectOne(QuorumCnxManager.java:705)   в org.apache.zookeeper.server.quorum.QuorumCnxManager.connectAll(QuorumCnxManager.java:733)   в org.apache.zookeeper.server.quorum.FastLeaderElection.lookForLeader(FastLeaderElection.java:910)   в org.apache.zookeeper.server.quorum.QuorumPeer.run(QuorumPeer.java:1247) 2019-08-20 11: 30: 44,768 [myid: 5] - WARN [QuorumPeermyid = 5 (обеспечение = отключено): QuorumCnxManager @677] - Невозможно открыть канал до 4 по адресу выбора /xxxxxx: 3888 java.net.SocketTimeoutException: истекло время ожидания соединения в java.net.PlainSocketImpl.socketConnect (собственный метод) в java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)   в java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)   в java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)   в java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) в java.net.Socket.connect(Socket.java:589) в org.apache.zookeeper.server.quorum.QuorumCnxManager.connectOne(QuorumCnxManager.java:648)   в org.apache.zookeeper.server.quorum.QuorumCnxManager.connectOne(QuorumCnxManager.java:705)   в org.apache.zookeeper.server.quorum.QuorumCnxManager.connectAll(QuorumCnxManager.java:733)   в org.apache.zookeeper.server.quorum.FastLeaderElection.lookForLeader(FastLeaderElection.java:910)   в org.apache.zookeeper.server.quorum.QuorumPeer.run(QuorumPeer.java:1247) 2019-08-20 11: 30: 44,769 [myid: 5] - ИНФОРМАЦИЯ [QuorumPeermyid = 5 (обеспечение = отключено): FastLeaderElection @919] - Время ожидания уведомления: 51200

это означает, что этот zk-сервер не может подключиться к другим серверам, и я обнаружил, что этот сервер пропингует другие серверы, и после удаления этого сервера из реплики проблема решена.

надеюсь, это будет полезно.

Ответ 21

Сейчас я решил тот же вопрос и разместил blog.

Вкратце, если xx zoo.cfg like:

server.1=xx:2888:3888
server.2=yy:2888:3888
server.3=zz:2888:3888

то xx myid = 1 обязательно