如何 运行 一个节点上有两个 zookeeper 服务器

how to run two zookeeper server in one node

我有三个物理节点,每个节点上都安装了 Docker。我在每个 docker 上配置了 Marathon、Flink、Mesos、Zookeeper 和 Hadoop。他们工作得很好。我要分发数据到Flink集群,所以我需要Kafka。 Zookeeper 已经 运行;所以,卡夫卡 运行 没有错误。问题是在这种情况下,当我想创建 Kafka 主题时,我看到了这个错误,我认为这是因为我没有 运行 Kafka 文件夹中的 Zookeeper:

Exception in thread "main" kafka.zookeeper.ZooKeeperClientTimeoutException: Timed out waiting for connection while in state: CONNECTING at kafka.zookeeper.ZooKeeperClient$$anonfun$kafka$zookeeper$ZooKeeperClient$$waitUntilConnected.apply$mcV$sp(ZooKeeperClient.scala:230) at kafka.zookeeper.ZooKeeperClient$$anonfun$kafka$zookeeper$ZooKeeperClient$$waitUntilConnected.apply(ZooKeeperClient.scala:226) at kafka.zookeeper.ZooKeeperClient$$anonfun$kafka$zookeeper$ZooKeeperClient$$waitUntilConnected.apply(ZooKeeperClient.scala:226) at kafka.utils.CoreUtils$.inLock(CoreUtils.scala:251) at kafka.zookeeper.ZooKeeperClient.kafka$zookeeper$ZooKeeperClient$$waitUntilConnected(ZooKeeperClient.scala:226) at kafka.zookeeper.ZooKeeperClient.(ZooKeeperClient.scala:95) at kafka.zk.KafkaZkClient$.apply(KafkaZkClient.scala:1580) at kafka.admin.TopicCommand$.main(TopicCommand.scala:57) at kafka.admin.TopicCommand.main(TopicCommand.scala)

另外,我改变了我的计划,在 Kafka 文件夹中使用 Zookeeper。为此,我在 Kafka 文件夹中使用 2186,2889,3889 等新端口配置 Zookeeper。但是当我 运行 Zookeeper 使用这个命令时:

  /home/kafka_2.11-2.0.0/bin/zookeeper-server-start.sh /home/kafka_2.11-2.0.0/config/zookeeper.properties

我收到此错误:

WARN Cannot open channel to 2 at election address /10.32.0.3:3889 (org.apache.zookeeper.server.quorum.QuorumCnxManager) java.net.ConnectException: Connection refused (Connection refused) at java.net.PlainSocketImpl.socketConnect(Native Method)

at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350)

at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)

at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188) at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) at java.net.Socket.connect(Socket.java:589)

at org.apache.zookeeper.server.quorum.QuorumCnxManager.connectOne(QuorumCnxManager.java:558)

at org.apache.zookeeper.server.quorum.QuorumCnxManager.toSend(QuorumCnxManager.java:534)

at org.apache.zookeeper.server.quorum.FastLeaderElection$Messenger$WorkerSender.process(FastLeaderElection.java:454)

at org.apache.zookeeper.server.quorum.FastLeaderElection$Messenger$WorkerSender.run(FastLeaderElection.java:435) at java.lang.Thread.run(Thread.java:748)

zookeeper的配置在第一个节点的“/home/zookeeper-3.4.14/conf/zoo.cfg”:

    tickTime=2000
    initLimit=10
    syncLimit=5        
    dataDir=/var/lib/zookeeper/data
    clientPort=2181
    server.1=0.0.0.0:2888:3888
    server.2=10.32.0.3:2888:3888
    server.3=10.32.0.4:2888:3888

第一个节点在 Kafka 文件夹中的 Zookeeper 配置如下:

     dataDir=/tmp/zookeeper/data
     tickTime=2000
     initLimit=10
     syncLimit=5
     clientPort=2186
     server.1=0.0.0.0:2889:3889
     server.2=10.32.0.3:2889:3889
     server.3=10.32.0.4:2889:3889

能否指导我如何在一个 docker 容器中 运行 两个 Zookeeper?顺便说一下,我不能为 Kafka 集群使用另一个容器,因为我需要两个具有一个公共 IP 地址的容器。

任何帮助将不胜感激。

问题已解决。我使用了上面的配置,但是对两个 Zookeeper 使用了 dataDir=/var/lib/zookeeper/data。另外,首先,我 运行 Hadoop,然后 运行 Kafka 和 Zookeeper。