无法使用 Ansible 和 Docker 启动 Replicated ZooKeeper

ant*_*thr 1 ansible docker apache-zookeeper

我已经能够在独立模式下使用 Docker 部署 ZooKeeper,运行单个 ZooKeeper 容器,但我现在尝试使用 Ansible 部署三个容器化 ZooKeeper,并且似乎无法让系统以复制模式启动。

我正在使用受良好支持的Docker 版本的 ZooKeeper,并尝试按照文档的建议设置ZOO_MY_IDZOO_SERVERS,尽管在尝试部署容器时它们很快就会失败并出现错误Invalid config,并且似乎还没有设置myid复制所需的变量模式。

错误的形式如下,您还会看到其他一些服务器的地址无法解析(尽管我可以很好地通过 ssh 进入这些机器,并且 Ansible 成功部署到每台机器 - 只是容器被卡住了)陷入崩溃循环)。

从泊坞窗日志:

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
Run Code Online (Sandbox Code Playgroud)

我很难理解为什么[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
Run Code Online (Sandbox Code Playgroud)

小智 5

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