当领导者去世时改变动物园管理员群集

时间:2017-01-23 06:05:59

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

远远低于你可以找到docker-compose.yml文件。

先决条件:

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

问题:

当我停止前三名动物园管理员(通过<div ng-repeat="media in product.media"> <div class="thumbnail1 col-xs-12 col-sm-9" > <div class="video-container"> <iframe ng-src="{{getIframeSrc(media.src)}}" frameborder="5" allowfullscreen></iframe> </div> </div> </div> )时,我&#34;失去&#34;领导者,我希望4.动物园管理员能够领导。

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

docker-compose down

执行WARN Cannot open channel to 3 at election address localhost/127.0.0.1:43888 java.net.ConnectException: Connection refused 之前为此最后一个zookeeper返回了模式echo stat | nc localhost 52181 | grep Mode,现在什么也没有返回。

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

follower

解决方案1:

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

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

    ZOOKEEPER_TICK_TIME: 4000

    ZOOKEEPER_INIT_LIMIT: 30

解决方案2:

  • 另一种方式aorund:

当我首先启动单个zookeeper服务器(没有其他服务器已经运行)时,它只返回错误消息(请参阅上面的错误)并且显然没有正确运行,因为ZOOKEEPER_SYNC_LIMIT: 15再次没有返回任何内容。

当我将其他3个动物园管理员添加到群集中时,所有动物园都运行良好,第一个zookeeper服务器是echo stat | nc localhost 52181 | grep Mode

杀死第一个动物园管理员,让3人跑步,其中一人是新的leader

问题:

  • 我希望,在群集中留下一个动物园管理员会使其成为“领导者”。
  • 它起作用&#34;反过来&#34;就像在解决方案2中描述的那样(但不是一个,但是三个动物园管理员仍在运行,只有一个被杀死)。
  • 为什么它不像问题中描述的那样工作,让单个zookeeper分别作为领导者或单个工作的zookeeper服务器?

docker-compose.yml文件:

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

leader

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

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

1 个答案:

答案 0 :(得分:2)

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

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