我已经能够在独立模式下使用Docker部署ZooKeeper,运行一个ZooKeeper容器,但我现在试图使用Ansible部署三个容器化的ZooKeeper,似乎无法让系统在复制模式下启动。
我正在使用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主机的完全限定名称或公共IP,本地主机的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
1条答案
按热度按时间sr4lhrrt1#
请注意配置文件中任何空格或其他不可见字符,例如:3888之后的空格