Ансамбль смотрителя зоопарка не появится

Я пытаюсь настроить ансамбль из 3 узлов в соответствии с документацией. . Все они на Linux Ubuntu. на всех трех узлах файл конфигурации выглядит так:

zoo.cfg в $ZOOKEEPER_HOME/conf

tickTime=2000
dataDir=/home/zkuser/zookeeper_data
clientPort=2181
initLimit=5
syncLimit=2
server.1=ip.of.zk1:2888:3888
server.2=ip.of.zk2:2888:3888
server.3=ip.of.zk3:2888:3888

Я также поместил соответствующие файлы «myid» в каталог /home/zkuser/zookeeper_data/. Эти файлы myid содержат 1, который находится на узле (ip.of.zk1), и так далее, и тому подобное.

Когда я запускаю сервер zk с помощью bin/zkServer.sh, запускается без отображения каких-либо исключений на консоли. Однако, когда я открываю файлы zookeeper.out в каталоге bin, я вижу следующие ошибки.

2014-11-04 00:23:49,120 [myid:3] - WARN  [WorkerSender[myid=3]:QuorumCnxManager@382] - Cannot open channel to 1 at election address /ip.of.zk1:3888
java.net.NoRouteToHostException: No route to host
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:327)
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:193)
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:180)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:385)
    at java.net.Socket.connect(Socket.java:546)
    at org.apache.zookeeper.server.quorum.QuorumCnxManager.connectOne(QuorumCnxManager.java:368)
    at org.apache.zookeeper.server.quorum.QuorumCnxManager.toSend(QuorumCnxManager.java:341)
    at org.apache.zookeeper.server.quorum.FastLeaderElection$Messenger$WorkerSender.process(FastLeaderElection.java:449)
    at org.apache.zookeeper.server.quorum.FastLeaderElection$Messenger$WorkerSender.run(FastLeaderElection.java:430)
    at java.lang.Thread.run(Thread.java:701)
2014-11-04 00:23:49,123 [myid:3] - WARN  [WorkerSender[myid=3]:QuorumCnxManager@382] - Cannot open channel to 2 at election address /ip.of.zk2:3888
java.net.ConnectException: Connection refused
    at java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:327)
    at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:193)
    at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:180)
    at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:385)
    at java.net.Socket.connect(Socket.java:546)
    at org.apache.zookeeper.server.quorum.QuorumCnxManager.connectOne(QuorumCnxManager.java:368)
    at org.apache.zookeeper.server.quorum.QuorumCnxManager.toSend(QuorumCnxManager.java:341)
    at org.apache.zookeeper.server.quorum.FastLeaderElection$Messenger$WorkerSender.process(FastLeaderElection.java:449)
    at org.apache.zookeeper.server.quorum.FastLeaderElection$Messenger$WorkerSender.run(FastLeaderElection.java:430)
    at java.lang.Thread.run(Thread.java:701)

Примечание. Я открыл соответствующие порты с помощью iptables на каждой машине. Например: Chain INPUT (политика ACCEPT)

target     prot opt source               destination         
ACCEPT     all  --  IP.of.ZK1       anywhere            
ACCEPT     all  --  IP.of.ZK2       anywhere            
ACCEPT     all  --  IP.of.ZK3       anywhere            

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination    

Может ли кто-нибудь сказать мне, что мне не хватало?

С уважением, JE


person java_enthu    schedule 04.11.2014    source источник
comment
Как вы решили эту проблему? Я также сталкиваюсь с той же проблемой.   -  person arsenal    schedule 09.02.2015


Ответы (2)


Гарантировать, что:

  • вы запустили сервер Zookeeper на всех 3-х серверах
  • все серверы работают в режиме без ошибок, запустив echo ruok | netcat ip.of.zk2 2181. Если все в порядке, сервер должен ответить imok (к сведению, вот список всех поддерживаемые 4-буквенные команды)
  • /home/zkuser/zookeeper_data/myid содержит значения 1/2/3 для каждого сервера соответственно
  • вы можете пинговать другие 2 сервера с первого сервера

Если интересно, я создал сценарий vagrant+ansible для создания виртуального кластера Zookeeper с тремя узлами, см. https://github.com/mkrcah/virtual-zookeeper-cluster

person Marcel Krcah    schedule 03.01.2015

У меня была аналогичная проблема. У меня есть некоторые намеки на то, в чем может быть проблема, от здесь и здесь. В моем случае выходные данные команды netstat -plutn показывали что-то, включая 127.0.0.1:3888 для порта выборов 3888. Я решил проблему, изменив часть zoo.cfg на сервере n с чего-то вроде

server.1=name.of.s1:2888.3888
...
server.n=localhost:2888:3888
...

to

server.1=name.of.s1:2888.3888
...
server.n=0.0.0.0:2888:3888
...

После перезапуска ZooKeeper вывод netstat -plutn включает :::3888.

По-видимому, это необходимо для того, чтобы ZooKeeper правильно отображал порт выборов, в данном случае 3888.

person zircon    schedule 16.02.2016