1

远低于您可以找到docker-compose.yml文件。当领导人死亡时更改动物园管理员群集领导

先决条件:

我使用搬运工-组成(搬运工-compose.yml,3个动物园管理员)开始3台动物园管理员服务器作为集群,然后我添加4.一个(另一docker- compose.yml,1个动物园管理员)。 前3名动物园管理员之一是领导者,4.如预期的那样,一名是追随者。

问题:

当我停止前三个饲养员(由docker-compose down方式),我“丢失”的领导者,我期待4.动物园管理员采取领导。

出现这种情况的唯一的事情就是饲养员显示错误,例如:

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,现在没有返回。

静止runnng饲养员服务器只是说,如:

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:

  • 其他aorund方式:

当我开始在第一单动物园管理员服务器(无其他已经运行),它只是返回错误消息(见上面的错误),显然不是runni ng,因为echo stat | nc localhost 52181 | grep Mode再次没有返回。

当我然后将其他3个动物园管理员添加到群集,所有运行良好,第一个动物园管理员服务器是leader

杀死第一个动物园管理员离开3运行,其中一个是新的leader

问:

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

泊坞窗,compose.yml文件:

我开始与码头工人,撰写3个饲养员服务器及以下泊坞窗,compose.yml:

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

回答

2

有一点要记住:zookeeper只会在大多数服务器正在运行时才会出现。所以如果你有4台服务器,并打倒3台服务器,zookeeper只会在你启动两台服务器时才会出现。

您使用的是哪个版本的zookeeper?如果它是在3.5之前或者(您正在使用3.5并且不使用reconfig命令),那么当您更改配置时,您将需要重新启动服务器。

+0

这让我走向了正确的方向,谢谢!我会尽快更新我的问题。 – rocksteady