动物园管理员我的ID不在同行名单中



我正在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

然而,如果我从zoo.cfg文件中删除server.1=$MY_IP:2888:3888,它会错误地显示:

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)

看完这些文档后,我仍然不确定我的配置在哪里搞砸了。

这是我的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),变量将作为运行时的一部分进行评估。

最新更新