Zookeeper我的ID不在对等列表中

时间:2015-12-15 21:58:39

标签: docker apache-zookeeper

我正在开发在Docker中部署动态Zookeeper集群。我几乎完成了,但我陷入了一个领域:动态配置参数。我有一个入口点脚本,它读取传递给它的环境变量,关于它自己的ID和其他Zookeeper服务器的IP。

在Zookeeper启动之前,它将它的id写入/tmp/zookeeper/$MYID/myid,这种情况是1.我还在server.1=$MY_IP:2888:3888文件中写zoo.cfg

如果我尝试使用zkServer.sh start-foreground启动带有该配置的Zookeeper,则会出错:

root@7f23a5d1e5a1:/# zkServer.sh start-foreground
JMX enabled by default
Using config: /opt/zookeeper/bin/../conf/zoo.cfg
2015-12-15 21:37:35,552 [myid:] - INFO  [main:QuorumPeerConfig@109] - Reading configuration from: /opt/zookeeper/bin/../conf/zoo.cfg
2015-12-15 21:37:35,556 [myid:] - ERROR [main:QuorumPeerMain@86] - Invalid config, exiting abnormally
org.apache.zookeeper.server.quorum.QuorumPeerConfig$ConfigException: parameter: server.1 must be in a separate dynamic config file
    at org.apache.zookeeper.server.quorum.QuorumPeerConfig.parseProperties(QuorumPeerConfig.java:244)
    at org.apache.zookeeper.server.quorum.QuorumPeerConfig.parse(QuorumPeerConfig.java:126)
    at org.apache.zookeeper.server.quorum.QuorumPeerMain.initializeAndRun(QuorumPeerMain.java:110)
    at org.apache.zookeeper.server.quorum.QuorumPeerMain.main(QuorumPeerMain.java:79)
Invalid config, exiting abnormally

但是,如果我从server.1=$MY_IP:2888:3888文件中删除zoo.cfg,则会出错:

2015-12-15 21:26:38,190 [myid:] - ERROR [main:QuorumPeerMain@98] - Unexpected exception, exiting abnormally
java.lang.RuntimeException: My id 0 not in the peer list
    at org.apache.zookeeper.server.quorum.QuorumPeer.start(QuorumPeer.java:643)
    at org.apache.zookeeper.server.quorum.QuorumPeerMain.runFromConfig(QuorumPeerMain.java:171)
    at org.apache.zookeeper.server.quorum.QuorumPeerMain.initializeAndRun(QuorumPeerMain.java:120)
    at org.apache.zookeeper.server.quorum.QuorumPeerMain.main(QuorumPeerMain.java:79)

reading the docs之后,我仍然不确定我的配置搞砸了。

这是我的zoo.cfg文件:

tickTime=2000
initLimit=10
syncLimit=5
dataDir=/tmp/zookeeper
clientPort=2181
quorumListenOnAllIPs=true
standaloneEnabled=false
dynamicConfigFile=/opt/zookeeper/conf/zoo.cfg.dynamic
server.1=192.168.1.46:2888:3888

这是myid档案:

root@7f23a5d1e5a1:/# cat /tmp/zookeeper/1/myid 
1

如何修复此配置以及它应该是什么样的?我正在使用Zookeeper 3.5.0-alpha。

1 个答案:

答案 0 :(得分:0)

由于Dockerfile执行命令的方式,这已得到解决。由于入口点脚本在构建时在容器内部运行,因此它不会读取任何环境变量,因为它们不是作为构建过程的一部分存在的。当入口点脚本作为运行脚本的子进程/步骤运行时 - 在这种情况下,只是一个基本的run.sh - 在运行时,变量随后被评估为它们作为运行时的一部分存在。