2014-11-04 2 views
3

documentation 다음 3 개 노드의 앙상블을 구성하려고합니다. 그들 모두는 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 파일에는 노드 (ip.of.zk1)에 1이 들어 있습니다.

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을 사용하여 해당 포트를 열었습니다. 예를 들어 : 체인 입력 (정책 동의)

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

답변

2

은 확인 :

  • 당신은 echo ruok | netcat ip.of.zk2 2181을 실행하여
  • 모든 서버가 오류가 아닌 모드에서 실행되는 모든 3 개 서버에서 사육사 서버를 시작했습니다. 확인하면, 서버는 첫 번째 서버에서 다른 2 개 서버를 ping 할 수
  • 각각
  • /home/zkuser/zookeeper_data/myid 각 서버에 대해 값 1/2/3을 포함 (참고로, 여기에 list of all supported 4-letter commands이야) imok 응답해야

관심이 있다면, 3 노드 가상 사육업자 클러스터를 만드는 방랑자 + 무언가 스크립트를 만들었습니다. https://github.com/mkrcah/virtual-zookeeper-cluster

3

비슷한 문제가있었습니다. 문제의 원인에 대한 몇 가지 힌트를 herehere에서 얻었습니다. 내 경우, 명령 netstat -plutn 의 출력은

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

에 같은 것을에서, 나는 서버 N에 zoo.cfg의 일부를 변경하여 문제를 해결 한 선거 포트 3888. 포함한 뭔가 127.0.0.1:3888을 보여주는데
server.1=name.of.s1:2888.3888 
... 
server.n=0.0.0.0:2888:3888 
... 

ZooKeeper를 다시 시작하면 netstat -plutn의 결과는 :::3888입니다.

은 분명히이이 경우이 문제를 해결 했는가 3888.

관련 문제