2014-11-04 61 views
3

我試圖配置3個節點的合奏後documentation。所有這些都在Linux Ubuntu上。 在所有三個節點配置文件看起來是這樣的:在$ ZOOKEEPER_HOME動物園管理員合奏不會出現

zoo.cfg/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 

我也放在/home/zkuser/zookeeper_data/目錄下相應的 「myid」 的文件。 這個myid文件包含1節點(ip.of.zk1),等等。

當我使用bin/zkServer.sh啓動zk服務器啓動時,控制檯上沒有顯示任何異常。 但是,當我打開bin目錄下的zookeeper.out文件時,我看到以下錯誤。

2014-11-04 00:23:49,120 [myid:3] - WARN [WorkerSender[myid=3]:[email protected]] - 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]:[email protected]] - 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相應的端口。 例如: 鏈INPUT(政策接受)

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

+0

你是如何解決這個問題的?我也面臨同樣的問題。 – ferhan 2015-02-09 07:55:25

回答

2

確保:

  • 您已經通過運行echo ruok | netcat ip.of.zk2 2181開始了動物園管理員服務器的所有3個服務器
  • 所有服務器在非糾錯模式下運行。如果正常,服務器端應迴應imok(僅供參考,這裏有一個list of all supported 4-letter commands
  • /home/zkuser/zookeeper_data/myid包含的值1/2/3爲每個服務器,分別爲
  • ,你可以從第一臺服務器ping其他的2臺服務器

如果有興趣,我已經創建了一個流浪漢+劇本腳本來創建一個3節點虛擬Zookeeper集羣,請參閱https://github.com/mkrcah/virtual-zookeeper-cluster

3

我有類似的問題。我對herehere的問題有一些提示。在我的情況下,命令netstat -plutn 的輸出是表示我已經通過在服務器N改變zoo.cfg的一部分,解決了這個問題選端口3888的東西,包括127.0.0.1:3888,從類似

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

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

ZooKeeper重啓後,netstat -plutn的輸出包括:::3888

顯然這是ZooKeeper正確公開選舉端口所需要的,在這種情況下是3888.