Zookeeper-DNS-Namensprobleme mit Leader-Wahlen bei der Migration von Windows zu Debian

Zookeeper-DNS-Namensprobleme mit Leader-Wahlen bei der Migration von Windows zu Debian

Ich migriere einen Kafka/Zookeeper-Cluster unter Windows nach Debian Wheezy.

  • Java-Version: 1.7.0_80
  • Debian-Version: 7.9
  • Zookeeper-Version: 3.3.5+dfsg1-2 0
  • Kafka-Version: 2.10-0.8.2.1

Wenn ich Zookeeper auf den Debian-Servern mit IP-Adressen für die anderen Debian-Server konfiguriere, funktioniert alles einwandfrei. Wenn ich stattdessen DNS-Namen verwende, schlägt die Leader-Wahl auf den Debian-Servern fehl.

Auf den Debian-Servern kann ich die IP jedes anderen Debian-Servers mit dem Befehl „Host“ nachschlagen, sodass die DNS-Auflösung funktioniert.

Alles ist automatisiert: Servererstellung, Debian-Installation, Zookeeper-Installation, Zookeeper-Konfiguration; daher ist das Zeitfenster für manuelle Konfigurationsfehler auf ein absolutes Minimum beschränkt und leicht zu reproduzieren oder zu ändern.

Die Verwendung clientPortAddress=DNSNAMEmacht keinen Unterschied; es schlägt immer noch fehl. In iptables ist nichts konfiguriert. Zwischen diesen Servern befindet sich keine Firewall.

Im Folgenden sind die Server 1-3 Windows 2012R2-Server und die Server 4-6 Debian-Server.

Diese Konfiguration funktioniert:

 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

Diese Konfiguration funktioniert nicht:

 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

Wenn ich die DNS-Namen verwende, erhalte ich die folgende Ausgabe, bei der sich die Ausnahmen einfach wiederholen. Bitte beachten Sie, dass das folgende Protokoll aus einem Cluster-Setup stammt, das Folgendes enthält:nurDebian-Server, die zu Testzwecken DNS-Namen verwenden. Wenn ich auf IP umstelle, funktioniert der Cluster und kann eine Wahl durchführen.

[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)

Wir würden gerne DNS-Namen verwenden können, wissen aber nicht mehr, wo wir mit der Suche nach einer Lösung beginnen sollen. Vielleicht haben wir vergessen, eine wichtige Debian- oder Java-Funktion zu installieren oder zu aktivieren?

Antwort1

Okay, ich habe also eine Vorstellung davon, was hier vor sich geht. Ich habe das gleiche Problem festgestellt, als ich versucht habe, einen 3-Knoten-Spring-XD-Cluster in Vagrant auf Linux-VMs einzurichten.

Diese Konfiguration hat funktioniert:

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

Aber das hier war nicht der Fall:

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

Der entscheidende Punkt war diese Zeile aus meinem Tierpfleger-Logbuch:

26.11.2015 20:48:31,439 [myid:1] - INFO [Thread-2:QuorumCnxManager$Listener@504] - Mein gewählter Bind-Port: spring-xd-1/127.0.0.1:3888

Warum also hat Zookeeper den Wahlport an die Loopback-Schnittstelle gebunden? Nun ja...

Bei mir /etc/hostssah es auf einer der VMs so aus:

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

Ich habe den Hostnamen aus der 127.0.0.1Zeile entfernt /etc/hostsund den Zookeeper-Dienst auf allen 3 Knoten neu gestartet.BÄM!alles lief reibungslos. Die Hostdatei auf jedem Rechner sieht nun folgendermaßen aus:

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

Ich vermute, dass Sie das Problem unter Windows nicht gesehen haben, da die Hosts-Datei ( C:\Windows\System32\drivers\etc\hosts) standardmäßig keine Einträge enthält. Sie sollten das Problem unter Windows reproduzieren können, indem Sie eine ähnliche 127.0.0.1Zeile hinzufügen.

Ich nenne das einen Zookeeper-Fehler. Das Bearbeiten der Hosts-Datei war ausreichend, um das Problem nachzuweisen und in Vagrant zu beheben, aber ich würde es für keine „echte“ Umgebung empfehlen.

BEARBEITEN:Entsprechendhttp://ccl.cse.nd.edu/operations/condor/hostname.shtml, dies scheint ein recht häufiges Problem bei Cluster-Apps unter Linux zu sein, und empfiehlt, die Hosts-Datei wie oben beschrieben zu bearbeiten. Allerdings ist dieZookeeper-Dokumentation zur Clustereinrichtungerwähnt es nicht.

Antwort2

Dieses Problem wird wahrscheinlich dadurch verursacht, dass der Knoten hostnameauf 127.0.0.1in gesetzt wird /etc/hosts. In diesem Fall wird ZK leader|election portsan 127.0.0.1die Adresse gebunden.

Der Konfigurationsparameter quorumListenOnAllIPs=truesollte dieses Problem beheben und election|leader portsan binden 0.0.0.0.

Weitere Optionen und ihre Auswirkungen finden Sie inZK-Administrationshandbuch

Es ist immer gut zu überprüfenQuellcode.

verwandte Informationen