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 VM의 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/hostsVM 중 하나는 다음과 같습니다.

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개 노드 모두에서 사육사 서비스를 반송했습니다.쾅!모든 것이 장미로 나타났습니다. 이제 각 시스템의 호스트 파일은 다음과 같습니다.

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에서는 호스트 파일( )에 기본적으로 항목이 없기 때문에 이 문제를 발견하지 못한 것 같습니다 . 비슷한 줄을 추가하면 Windows에서 문제를 재현할 수 있습니다 127.0.0.1.

나는 이것을 Zookeeper 버그라고 부릅니다. 호스트 파일을 편집하는 것은 Vagrant에서 문제를 입증하고 해결하기에 충분했지만 "실제" 환경에서는 권장하지 않습니다.

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

답변2

아마도 이 문제는 노드 hostname를 . 이 경우 ZK는 주소 에 바인딩됩니다 .127.0.0.1/etc/hostsleader|election ports127.0.0.1

구성 매개변수는 quorumListenOnAllIPs=true이 문제를 해결 election|leader ports하고 0.0.0.0.

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

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

관련 정보