【问题标题】:Zookeeper cluster set upZookeeper 集群搭建
【发布时间】:2015-01-17 23:12:19
【问题描述】:

我可以在 1 台机器上使用 3 个不同的端口设置 zookeeper 集群,但是当我使用不同的 IP 执行相同操作以在不同的机器上拥有 zookeeper 实例时,会引发以下错误:

2014-11-20 12:16:24,819 [myid:1] - INFO  [main:QuorumPeerMain@127] - Starting quorum peer
2014-11-20 12:16:24,827 [myid:1] - INFO  [main:NIOServerCnxnFactory@94] - binding to port 0.0.0.0/0.0.0.0:2181
2014-11-20 12:16:24,842 [myid:1] - INFO  [main:QuorumPeer@959] - tickTime set to 2000
2014-11-20 12:16:24,842 [myid:1] - INFO  [main:QuorumPeer@979] - minSessionTimeout set to -1
2014-11-20 12:16:24,842 [myid:1] - INFO  [main:QuorumPeer@990] - maxSessionTimeout set to -1
2014-11-20 12:16:24,842 [myid:1] - INFO  [main:QuorumPeer@1005] - initLimit set to 10
2014-11-20 12:16:24,857 [myid:1] - INFO  [Thread-1:QuorumCnxManager$Listener@504] - My election bind port: /172.16.1.175:2223
2014-11-20 12:16:24,870 [myid:1] - INFO  [QuorumPeer[myid=1]/0:0:0:0:0:0:0:0:2181:QuorumPeer@714] - LOOKING
2014-11-20 12:16:24,873 [myid:1] - INFO  [QuorumPeer[myid=1]/0:0:0:0:0:0:0:0:2181:FastLeaderElection@815] - New election. My id =  1, proposed zxid=0x0
2014-11-20 12:16:24,876 [myid:1] - INFO  [WorkerReceiver[myid=1]:FastLeaderElection@597] - Notification: 1 (message format version), 1 (n.leader), 0x0 (n.zxid), 0x1 (n.round), LOOKING (n.state), 1 (n.sid), 0x0 (n.peerEpoch) LOOKING (my state)
2014-11-20 12:16:24,881 [myid:1] - WARN  [WorkerSender[myid=1]:QuorumCnxManager@382] - Cannot open channel to 2 at election address /172.16.1.170:2223
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:744)

【问题讨论】:

  • 各个主机的 zoo.cfg 文件是什么样的?
  • 您找到解决方案了吗?我也遇到了同样的问题。

标签: java bigdata apache-zookeeper apache-storm apache-kafka


【解决方案1】:

如何为多个集群或远程服务器设置 Zookeeper?

第一步:检查系统下是否有Java 1.8.0或以上版本可用 /opt/ java -version

第 2 步:使用以下命令从链接下载 Zookeeper-3.3.6

Sudo wget  http://redrockdigimark.com/apachemirror/zookeeper/zookeeper-3.3.6/zookeeper-3.3.6.tar.gz

第 3 步:使用以下命令提取文件

Sudo tar xzf  zookeeper-3.3.6.tar.gz -C /opt/

第 4 步:将 zookeeper -3.3.6 映射到 Zookeeper,如下所示

/opt/>  ls -s zookeeper-3.3.6 zookeeper         then

/opt/>   Cd zookeeper/conf

第 5 步:通过从 zoo_sample.cfg /opt/zookeeper/conf/> 复制 zoo.cfg 创建配置文件

    cp zoo.cfg sample_zoo.cfg

第 6 步:使用命令 /opt/zookeeper/conf/> 编辑 zoo.cfg

sudo vi zoo.cfg

将数据目录创建为 DataDir=/var/lib/zookeeper

第七步:在/var/lib/zookeeper下创建一个没有扩展名的文件为myid 并将 server1 的唯一 ID 设为 1

在botton中添加所有集群服务器为

server.1=0.0.0.0:2888:3888
server.2=184.72.205.209:2888:3888
server.3=34.207.92.20:2888:3888

第 8 步:在 /var/lib/zookeeper 下创建一个没有扩展名的文件为 myid 并将 server2 的唯一 ID 设为 2

第 9 步:将相同的配置应用于第二个服务器,如下所示

server.1=34.229.138.19:2888:3888
server.2=0.0.0.0:2888:3888
server.3=34.207.92.20:2888:3888

第十步:安装nc包和lsof包如下

Sudo yum install nc

Sudo yum install lsof

第 11 步:现在在所有服务器中启动 Zookeeper

Sudo /opt/zookeeper/bin/zkServer.sh start

第 12 步:停止 Zookeeper 服务器

Sudo /opt/zookeeper/bin/zkServer.sh Stop

检查 Zookeeper 服务器的状态

Sudo /opt/zookeeper/bin/zkServer.sh Status

需要注意的重要事项

1.对于Zookeeper 2F+1服务器进行维护,即。如果您有 1 台服务器,则 (2*1)+1=3 台要维护的服务器,如果您有 2 台服务器,则 (2*2)+1=5 台要维护的服务器,F 代表服务器数量

2.所有服务器都应该有zoo.cfg配置文件,本地服务器IP应该是0.0.0.0

3.zookeeper使用2888端口与leader节点连接各个follower节点

4.3888端口用于点对点通信

5.Leader选举由zookeeper自动进行,如果Leader宕机,在2微秒内选举另一个Leader,共享Follower信息

6.在zoo.cfg配置文件中客户端端口必须是2181

【讨论】:

  • 步步为营,更精准,走的更远
【解决方案2】:

您是否在所有三个节点中都启动了 zookeeper ?在多集群设置中(假设您有一个包含多台机器的分布式环境),每个服务器都知道集群中存在的其他节点,称为 ensemble。它通过查看zoo.cfg 文件中的以下一行来完成此操作。

    server.1=zoo1:2888:3888
    server.2=zoo2:2888:3888

In multi-cluster set up 文档页面它说

只要大多数合奏都启动,服务就可以使用。因为 Zookeeper 需要多数,所以最好使用奇数台机器。例如,有四台机器的 ZooKeeper 只能处理单台机器的故障;如果两台机器发生故障,剩下的两台机器不构成多数。但是,5 台机器 ZooKeeper 可以处理两台机器的故障

现在,除非您在所有三个节点中启动该进程,否则它将无法相互通信并继续记录此类错误。这可能会帮助您到达某个地方。

【讨论】:

    猜你喜欢
    • 2013-05-25
    • 2016-08-29
    • 1970-01-01
    • 2021-11-14
    • 2021-06-12
    • 1970-01-01
    • 2017-11-20
    • 1970-01-01
    • 2019-04-12
    相关资源
    最近更新 更多