我已经能够在独立模式下使用Docker部署ZooKeeper,运行单个ZooKeeper容器,但我现在正在尝试使用Ansible部署三个容器化的ZooKeepers,并且似乎无法让系统以复制模式启动。
我使用的是ZooKeeper的well supported Docker版本,并尝试按照文档的建议设置ZOO_MY_ID
和ZOO_SERVERS
,尽管在尝试部署容器时,它们很快就会失败并出现Invalid config
错误,而且似乎还没有设置复制模式所需的myid
变量。
错误的形式如下,您还会看到一些其他服务器的地址无法解析(尽管我可以很好地通过ssh进入这些机器,Ansible成功地部署到每台机器上--它只是容器陷入了崩溃循环)。
从docker日志中:
Using config: /conf/zoo.cfg
2019-08-22 07:07:22,188 [myid:] - INFO [main:QuorumPeerConfig@133] - Reading configuration from: /conf/zoo.cfg
2019-08-22 07:07:22,192 [myid:] - INFO [main:QuorumPeerConfig@375] - clientPort is not set
2019-08-22 07:07:22,192 [myid:] - INFO [main:QuorumPeerConfig@389] - secureClientPort is not set
2019-08-22 07:07:22,198 [myid:] - ERROR [main:QuorumPeerMain@89] - Invalid config, exiting abnormally
org.apache.zookeeper.server.quorum.QuorumPeerConfig$ConfigException: Address unresolved: hostname3:3888"
at org.apache.zookeeper.server.quorum.QuorumPeer$QuorumServer.<init>(QuorumPeer.java:279)
at org.apache.zookeeper.server.quorum.flexible.QuorumMaj.<init>(QuorumMaj.java:89)
at org.apache.zookeeper.server.quorum.QuorumPeerConfig.createQuorumVerifier(QuorumPeerConfig.java:595)
at org.apache.zookeeper.server.quorum.QuorumPeerConfig.parseDynamicConfig(QuorumPeerConfig.java:628)
at org.apache.zookeeper.server.quorum.QuorumPeerConfig.setupQuorumPeerConfig(QuorumPeerConfig.java:601)
at org.apache.zookeeper.server.quorum.QuorumPeerConfig.parseProperties(QuorumPeerConfig.java:420)
at org.apache.zookeeper.server.quorum.QuorumPeerConfig.parse(QuorumPeerConfig.java:150)
at org.apache.zookeeper.server.quorum.QuorumPeerMain.initializeAndRun(QuorumPeerMain.java:113)
at org.apache.zookeeper.server.quorum.QuorumPeerMain.main(QuorumPeerMain.java:82)
Invalid config, exiting abnormally
我很难理解为什么[myid:]
框缺少我设置的变量,以及为什么无法解析另一台主机的地址。
我想知道它们是否都试图启动并连接到其他服务器,但考虑到没有一个在运行,它们都失败了。这感觉太荒谬了,不会成为问题,所以我假设我在配置中犯了一个错误。
我已经尝试了下面的Ansible部署的不同版本(我只展示了三个版本中的一个,但它们都遵循相同的模式),尝试了其他ZooKeeper主机的完全限定名称或公共I,本地主机的0.0.0.0
和zookeeper
,以及许多不同的东西-都没有成功。
- name: Deploy ZooKeeper1
hosts: zk1
...
tasks:
- docker_service:
project_name: zk
definition:
version: '3'
services:
zookeeper:
image: zookeeper:latest
hostname: "zookeeper"
environment:
- ALLOW_ANONYMOUS_LOGIN="yes"
- ZOO_MY_ID=1
- ZOO_SERVERS="server.1=zookeeper:2888:3888 server.2=hostname2:2888:3888 server.3=hostname3:2888:3888"
restart: always
ports:
- "2181:2181" # port for clients, including Kafka
- "2888:2888" # port for ZooKeeper to connect to other ZooKeeper peers to coordinate
- "3888:3888" # port for leader election
发布于 2020-11-19 13:38:45
注意配置文件中的任何空格或其他不可见的字符,例如: 3888后的空格
https://stackoverflow.com/questions/57604271
复制相似问题