远远低于您可以找到 docker-compose.yml 文件。
先决条件:
我使用 docker-compose (docker-compose.yml, 3 zookeepers)将3 个 zookeeper 服务器作为集群启动,然后将 4. one (another docker-compose.yml, 1 zookeeper)添加到集群中。前 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
Doing之前返回了最后一个 zookeeperecho stat | nc localhost 52181 | grep Mode
的 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 个运行,其中一个是 new leader
。
问题:
- 我希望,在集群中留下一个动物园管理员使其成为“领导者”。
- 它像解决方案 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