动物园管理员集群的动态构建

Mar*_*val 6 apache-zookeeper

我想以编程方式设置zookeeper集群.我的目标是使用具有CoreOS的计算机,并以docker容器的形式动态部署三个节点,并将它们设置为一个动物园集群.

除了手动(/ zookeeperReconfig.html)中的常见设置(显示如何将另一个节点添加到现有的三个节点集群)之外,我发现了一个对话,该对话说明当我在现有集群中没有正在运行的节点时从头开始如何做到这一点.不幸的是,这套步骤对我不起作用.我在谈论http://mail-archives.apache.org/mod_mbox/zookeeper-user/201408.mbox/%3CCAPSuxQipZFH2582bEMid2tCVBFk%3DC31hwCYjbFgSwChBF%2BZQVQ%40mail.gmail.com%3E

以下是我执行的步骤列表:

  1. 运行standaloneEnabled = false的第一个节点和zoo.cfg.dynamic中的唯一条目.

server.1 =本地主机:2381:2281:参与者; 0.0.0.0:2181

  1. 使用以下动态cfg运行第二个节点:

server.1 = localhost:2381:2281:participant; 0.0.0.0:2181 server.2 = localhost:2382:2282:observer; 0.0.0.0:2182

请注意,当我将第二个节点的"观察者"更改为"参与者"时,结果行为没有区别.

  1. 现在我有两个正在运行的实例.我可以使用./zkCli.sh登录第一个节点.当我尝试使用以下命令添加第二个节点时:

reconfig -add server.2 = localhost:2382:2282:participant; 0.0.0.0:2182

......它失败了:

KeeperErrorCode = NewConfigNoQuorum for

然而,经过一些研究,我找到了解决方案 但这很棘手,我不认为这是唯一正确的解决方案.

什么对我有用?我可以再次在第一个节点上执行步骤#3,但现在使用"观察者".此命令导致第一个节点甚至知道第二个节点.当我在zkCli中键入'config'到控制台时,似乎它正在工作.下一步是使用zkCli和exec命令登录到第二个节点:

reconfig -remove 2 < - 下一步无法正常工作

reconfig -add server.2 = localhost:2382:2282:participant; 0.0.0.0:2182

好吧,现在我有两个节点的工作集群.最后,有趣的是,现在我可以使用我在第一段中提到的常规场景添加第三个节点.

有人知道我做错了什么吗?