【问题标题】:Changing zookeeper cluster leadership when leader dies领导者死亡时更改 Zookeeper 集群领导者
【发布时间】:2017-06-07 14:20:09
【问题描述】:

您可以在下方找到 docker-compose.yml 文件。

先决条件:

我使用 docker-compose (docker-compose.yml, 3 zookeepers) 将 3 个 zookeeper 服务器作为一个集群启动,然后添加一个 4. one (another docker-compose.yml , 1 个动物园管理员) 到集群。 前 3 个 zookeeper 之一是领导者,第 4 个是跟随者,正如预期的那样。

问题:

当我停止前三个 zookeeper(通过docker-compose down)时,我“失去”了领导者,我希望 4. zookeeper 担任领导者。

唯一发生的事情是zookeeper显示错误,例如:

WARN Cannot open channel to 3 at election address localhost/127.0.0.1:43888
java.net.ConnectException: Connection refused

执行echo stat | nc localhost 52181 | grep Mode 之前为最后一个动物园管理员返回了模式follower,现在什么也不返回。

仍在运行的 zookeeper 服务器只说,例如:

INFO Closed socket connection for client /127.0.0.1:43548 (no session established for client) (org.apache.zookeeper.server.NIOServerCnxn)

解决方案 1:

  • 增加时间限制没有帮助,同样的结果:

    ZOOKEEPER_TICK_TIME: 4000

    ZOOKEEPER_INIT_LIMIT: 30

    ZOOKEEPER_SYNC_LIMIT: 15

解决方案 2:

  • 另一种方式:

当我第一次启动单个 zookeeper 服务器时(其他服务器尚未运行),它只返回错误消息(参见上面的错误)并且显然没有正确运行,因为 echo stat | nc localhost 52181 | grep Mode 再次没有返回任何内容。

当我将其他 3 个 zookeeper 添加到集群时,一切运行良好,第一个 zookeeper 服务器是leader

杀死第一个 zookeeper 会留下 3 个运行,其中一个是新的 leader

问题:

  • 我希望,在集群中留下一个 Zookeeper 会使其成为“领导者”。
  • 它像解决方案 2 中描述的那样以“相反的方式”工作(但没有一个,而是三个动物园管理员继续运行,只有一个被杀死)。
  • 为什么它不能像问题中描述的那样工作,分别让单个 zookeeper 作为领导者或单个工作 Zookeeper 服务器?

docker-compose.yml 文件:

我使用 docker-compose 和以下 docker-compose.yml 启动 3 个 zookeeper 服务器:

---
version: '2'
services:
  zookeeper_1:
    image: confluentinc/cp-zookeeper:3.1.1
    network_mode: host
    environment:
      ZOOKEEPER_SERVER_ID: 1
      ZOOKEEPER_CLIENT_PORT: 22181
      ZOOKEEPER_TICK_TIME: 2000
      ZOOKEEPER_INIT_LIMIT: 5
      ZOOKEEPER_SYNC_LIMIT: 2
      ZOOKEEPER_SERVERS: localhost:22888:23888;localhost:32888:33888;localhost:42888:43888;localhost:52888:53888
  zookeeper_2:
    image: confluentinc/cp-zookeeper:3.1.1
    network_mode: host
    environment:
      ZOOKEEPER_SERVER_ID: 2
      ZOOKEEPER_CLIENT_PORT: 32181
      ZOOKEEPER_TICK_TIME: 2000
      ZOOKEEPER_INIT_LIMIT: 5
      ZOOKEEPER_SYNC_LIMIT: 2
      ZOOKEEPER_SERVERS: localhost:22888:23888;localhost:32888:33888;localhost:42888:43888;localhost:52888:53888
  zookeeper_3:
    image: confluentinc/cp-zookeeper:3.1.1
    network_mode: host
    environment:
      ZOOKEEPER_SERVER_ID: 3
      ZOOKEEPER_CLIENT_PORT: 42181
      ZOOKEEPER_TICK_TIME: 2000
      ZOOKEEPER_INIT_LIMIT: 5
      ZOOKEEPER_SYNC_LIMIT: 2
      ZOOKEEPER_SERVERS: localhost:22888:23888;localhost:32888:33888;localhost:42888:43888;localhost:52888:53888

我以同样的方式开始 4. 一个:

---
version: '2'
services:
  zookeeper_4:
    image: confluentinc/cp-zookeeper:3.1.1
    network_mode: host
    environment:
      ZOOKEEPER_SERVER_ID: 4
      ZOOKEEPER_CLIENT_PORT: 52181
      ZOOKEEPER_TICK_TIME: 2000
      ZOOKEEPER_INIT_LIMIT: 5
      ZOOKEEPER_SYNC_LIMIT: 2
      ZOOKEEPER_SERVERS: localhost:22888:23888;localhost:32888:33888;localhost:42888:43888;localhost:52888:53888

【问题讨论】:

    标签: docker apache-kafka docker-compose apache-zookeeper confluent-platform


    【解决方案1】:

    要记住一件事:只有在大多数服务器都在运行时,zookeeper 才会出现。因此,如果您有 4 台服务器并关闭其中 3 台,只有在您再启动两台时才会启动 Zookeeper。

    您使用的是哪个版本的 zookeeper?如果是 3.5 之前的版本或(您使用的是 3.5 且未使用 reconfig 命令),则在更改配置时需要重新启动服务器。

    【讨论】:

    • 这引导我走向正确的方向,谢谢!我会尽快更新我的问题。
    • 嗨@BenjaminReed,您是否建议使用监督流程来管理动物园管理员?
    猜你喜欢
    • 1970-01-01
    • 2017-10-31
    • 1970-01-01
    • 1970-01-01
    • 2022-10-17
    • 1970-01-01
    • 2020-07-26
    • 1970-01-01
    • 2021-11-08
    相关资源
    最近更新 更多