我正在努力在Docker中部署动态Zookeeper集群。我已经差不多完成了,但是我只能停留在一个 Realm :动态配置参数。我有一个入口点脚本,该脚本读取传递给它的有关其自身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。
最佳答案
由于Dockerfile执行命令的方式而解决了该问题。由于入口点脚本在构建时在容器内运行,因此不会读取任何环境变量,因为它们在构建过程中不存在。当入口点脚本作为运行脚本的子进程/步骤(在这种情况下,只是基本的run.sh
)在运行时运行时,然后评估变量作为运行时的一部分而存在。
关于docker - Zookeeper我的ID不在对等列表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34300198/