无法使用Ansible和Docker启动复制的ZooKeeper

5q4ezhmt  于 2022-12-09  发布在  Apache
关注(0)|答案(1)|浏览(144)

我已经能够在独立模式下使用Docker部署ZooKeeper,运行一个ZooKeeper容器,但我现在试图使用Ansible部署三个容器化的ZooKeeper,似乎无法让系统在复制模式下启动。
我正在使用ZooKeeper的well supported Docker版本,并尝试按照文档建议设置ZOO_MY_IDZOO_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.0zookeeper,以及许多不同的东西-都没有成功。

- 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
sr4lhrrt

sr4lhrrt1#

请注意配置文件中任何空格或其他不可见字符,例如:3888之后的空格

相关问题