Windows에서 Debian으로 마이그레이션할 때 리더 선택과 관련된 Zookeeper DNS 이름

Windows에서 Debian으로 마이그레이션할 때 리더 선택과 관련된 Zookeeper DNS 이름

Windows의 kafka/zookeeper 클러스터를 Debian wheezy로 마이그레이션하고 있습니다.

  • 자바 버전: 1.7.0_80
  • 데비안 버전: 7.9
  • 사육사 버전: 3.3.5+dfsg1-2 0
  • 카프카 버전: 2.10-0.8.2.1

다른 Debian 서버의 IP 주소를 사용하여 Debian 서버에 Zookeeper를 구성하면 모든 것이 잘 작동합니다. 대신 DNS 이름을 사용하면 Debian 서버에서 리더 선택이 실패합니다.

Debian 서버에서는 "host" 명령을 사용하여 다른 Debian 서버의 IP를 찾을 수 있으므로 DNS 확인이 제대로 작동합니다.

서버 생성, 데비안 설치, 사육사 설치, 사육사 구성 등 모든 것이 자동화되어 있으므로 수동 구성 오류에 대한 창이 최소화되고 재현 또는 변경이 쉽습니다.

사용해도 clientPortAddress=DNSNAME아무런 차이가 없습니다. 여전히 실패합니다. iptables에는 아무것도 구성되어 있지 않습니다. 이들 서버 사이에는 방화벽이 없습니다.

서버 1-3은 Windows 2012R2 서버이고, 서버 4-6은 Debian 서버입니다.

이 구성은 다음과 같이 작동합니다.

 server.1=testkafka400:2888:3888
 server.2=testkafka401:2888:3888
 server.3=testkafka402:2888:3888
 server.4=10.1.132.152:2888:3888
 server.5=10.1.132.153:2888:3888
 server.6=10.1.132.154:2888:3888

이 구성은 작동하지 않습니다.

 server.1=testkafka400:2888:3888
 server.2=testkafka401:2888:3888
 server.3=testkafka402:2888:3888
 server.4=testkafka403:2888:3888
 server.5=testkafka404:2888:3888
 server.6=testkafka405:2888:3888

DNS 이름을 사용하면 다음과 같은 출력이 표시됩니다. 여기서 예외가 반복됩니다. 다음 로그는 다음을 포함하는 클러스터 설정에서 나온 것입니다.오직테스트 목적으로 DNS 이름을 사용하는 데비안 서버. IP로 전환하면 클러스터가 작동하고 선거가 이루어집니다.

[2015-11-03 13:55:52,309] INFO Reading configuration from: /etc/zookeeper/config/zookeeper.properties (org.apache.zookeeper.server.quorum.QuorumPeerConfig)
[2015-11-03 13:55:52,322] INFO Defaulting to majority quorums (org.apache.zookeeper.server.quorum.QuorumPeerConfig)
[2015-11-03 13:55:52,344] INFO autopurge.snapRetainCount set to 3 (org.apache.zookeeper.server.DatadirCleanupManager)
[2015-11-03 13:55:52,344] INFO autopurge.purgeInterval set to 24 (org.apache.zookeeper.server.DatadirCleanupManager)
[2015-11-03 13:55:52,345] INFO Purge task started. (org.apache.zookeeper.server.DatadirCleanupManager)
[2015-11-03 13:55:52,454] INFO Purge task completed. (org.apache.zookeeper.server.DatadirCleanupManager)
[2015-11-03 13:55:52,472] INFO Starting quorum peer (org.apache.zookeeper.server.quorum.QuorumPeerMain)
[2015-11-03 13:55:52,581] INFO binding to port 0.0.0.0/0.0.0.0:2181 (org.apache.zookeeper.server.NIOServerCnxnFactory)
[2015-11-03 13:55:52,601] INFO tickTime set to 3000 (org.apache.zookeeper.server.quorum.QuorumPeer)
[2015-11-03 13:55:52,601] INFO minSessionTimeout set to -1 (org.apache.zookeeper.server.quorum.QuorumPeer)
[2015-11-03 13:55:52,601] INFO maxSessionTimeout set to -1 (org.apache.zookeeper.server.quorum.QuorumPeer)
[2015-11-03 13:55:52,601] INFO initLimit set to 20 (org.apache.zookeeper.server.quorum.QuorumPeer)
[2015-11-03 13:55:52,626] INFO Reading snapshot /etc/zookeeper/data/version-2/snapshot.0 (org.apache.zookeeper.server.persistence.FileSnap)
[2015-11-03 13:55:52,675] INFO My election bind port: testkafka403.prod.local/127.0.1.1:3888 (org.apache.zookeeper.server.quorum.QuorumCnxManager)
[2015-11-03 13:55:52,713] INFO LOOKING (org.apache.zookeeper.server.quorum.QuorumPeer)
[2015-11-03 13:55:52,715] INFO New election. My id =  4, proposed zxid=0x100000014 (org.apache.zookeeper.server.quorum.FastLeaderElection)
[2015-11-03 13:55:52,717] INFO Notification: 1 (message format version), 4 (n.leader), 0x100000014 (n.zxid), 0x1 (n.round), LOOKING (n.state), 4 (n.sid), 0x1 (n.peerEpoch) LOOKING (my state) (org.apache.zookeeper.server.quorum.FastLeaderElection)
[2015-11-03 13:55:52,732] WARN Cannot open channel to 5 at election address testkafka404.prod.local/10.1.132.153:3888 (org.apache.zookeeper.server.quorum.QuorumCnxManager)
java.net.SocketTimeoutException
at java.net.SocksSocketImpl.remainingMillis(SocksSocketImpl.java:111)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
at java.net.Socket.connect(Socket.java:579)
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:745)
[2015-11-03 13:55:52,737] WARN Cannot open channel to 6 at election address testkafka405.prod.local/10.1.132.154:3888 (org.apache.zookeeper.server.quorum.QuorumCnxManager)
java.net.ConnectException: Connection refused
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
at java.net.Socket.connect(Socket.java:579)
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:745)
[2015-11-03 13:55:52,919] WARN Cannot open channel to 6 at election address testkafka405.prod.local/10.1.132.154:3888 (org.apache.zookeeper.server.quorum.QuorumCnxManager)
java.net.ConnectException: Connection refused
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
at java.net.Socket.connect(Socket.java:579)
at org.apache.zookeeper.server.quorum.QuorumCnxManager.connectOne(QuorumCnxManager.java:368)
at org.apache.zookeeper.server.quorum.QuorumCnxManager.connectAll(QuorumCnxManager.java:402)
at org.apache.zookeeper.server.quorum.FastLeaderElection.lookForLeader(FastLeaderElection.java:840)
at org.apache.zookeeper.server.quorum.QuorumPeer.run(QuorumPeer.java:762)

우리는 정말로 DNS 이름을 사용할 수 있기를 원하지만 어디서부터 해결책을 찾아야 할지 모르겠습니다. 중요한 Debian 또는 Java 기능을 설치하거나 활성화하는 것을 놓쳤을까요?

답변1

좋아, 여기서 무슨 일이 일어나고 있는지 알아요. Linux 가상 머신의 Vagrant에서 3노드 Spring-XD 클러스터를 설정하려고 할 때도 동일한 문제가 발생했습니다.

이 구성은 다음과 같이 작동합니다.

server.1=172.28.128.3:2888:3888
server.2=172.28.128.4:2888:3888
server.3=172.28.128.7:2888:3888

하지만 이것은 그렇지 않습니다:

server.1=spring-xd-1:2888:3888
server.2=spring-xd-2:2888:3888
server.3=spring-xd-3:2888:3888

"스모킹 건"은 내 사육사 기록에 있는 다음 줄입니다.

2015-11-26 20:48:31,439 [myid:1] - INFO [Thread-2:QuorumCnxManager$Listener@504] - 포트 바인딩을 선택했습니다: spring-xd-1/127.0.0.1:3888

그렇다면 Zookeeper가 선택 포트를 루프백 인터페이스에 바인딩하는 이유는 무엇입니까? 음...

내 가상 머신 /etc/hosts중 하나는 다음과 같습니다.

127.0.0.1   spring-xd-1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

## vagrant-hostmanager-start
172.28.128.3    spring-xd-1
172.28.128.4    spring-xd-2
172.28.128.7    spring-xd-3
## vagrant-hostmanager-end

127.0.0.1라인에서 호스트 이름을 제거 /etc/hosts하고 3개 노드 모두에서 Zookeeper 서비스를 롤백했습니다.쾅!모든 것이 장미로 변했습니다. 이제 각 시스템의 호스트 파일은 다음과 같습니다.

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

## vagrant-hostmanager-start
172.28.128.3    spring-xd-1
172.28.128.4    spring-xd-2
172.28.128.7    spring-xd-3
## vagrant-hostmanager-end

C:\Windows\System32\drivers\etc\hostsWindows에서는 호스트 파일()에 기본적으로 항목이 없기 때문에 이 문제가 발생하지 않을 것 같습니다 . 유사한 줄을 추가하면 127.0.0.1Windows에서 문제를 재현할 수 있습니다 .

나는 그것을 사육사 오류라고 부른다. 호스트 파일을 편집하는 것만으로도 Vagrant에서 문제를 증명하고 수정하기에 충분했지만 "실제" 환경에서는 권장하지 않습니다.

편집하다:~에 따르면http://ccl.cse.nd.edu/Operations/condor/hostname.shtml, 이는 Linux에서 클러스터링된 애플리케이션에서 상당히 일반적인 문제인 것으로 보이며 위에서 설명한 대로 호스트 파일을 편집하는 것이 좋습니다. 하지만, 그클러스터 설정에 대한 Zookeeper 문서그것에 대한 언급이 없습니다.

답변2

노드를 in hostname으로 설정하여 문제가 발생한 것일 수 있습니다 . 이 경우 ZK는 해당 주소 에 바인딩됩니다 .127.0.0.1/etc/hostsleader|election ports127.0.0.1

구성 매개변수는 quorumListenOnAllIPs=true이 문제를 해결하고 election|leader ports에 바인딩되어야 합니다 0.0.0.0.

더 많은 옵션과 그 효과는 다음에서 확인할 수 있습니다.ZK 관리 가이드

항상 확인하는 것이 좋습니다소스 코드.

관련 정보