如何在Docker群上设置zookeeper群集

环境 :6个服务器docker swarm集群(2个master和4个worker)

要求 :我们需要在现有的docker群上设置zookeeper群集。

阻止 :要在群集中设置zookeeper,我们需要在每个服务器configuration中提供所有zk服务器,并在myid文件中提供唯一的ID。

问题 :当我们在docker swarm中创buildzookeeper的副本时,我们如何为每个副本提供唯一的ID。 另外我们如何更新每个zookeeper容器的ID的zoo.cfgconfiguration文件。

这目前不是一个简单的问题。 当每个集群成员都需要唯一的标识和存储卷时,完全可伸缩的有状态应用程序集群是非常棘手的。

在Docker Swarm上,今天,最好build议您在撰写文件(见31z4 / zookeeper-docker )中运行每个集群成员作为单独的服务:

version: '2' services: zoo1: image: 31z4/zookeeper restart: always ports: - 2181:2181 environment: ZOO_MY_ID: 1 ZOO_SERVERS: server.1=zoo1:2888:3888 server.2=zoo2:2888:3888 server.3=zoo3:2888:3888 zoo2: image: 31z4/zookeeper restart: always ports: - 2182:2181 environment: ZOO_MY_ID: 2 ZOO_SERVERS: server.1=zoo1:2888:3888 server.2=zoo2:2888:3888 server.3=zoo3:2888:3888 .. .. 

对于最先进(但仍在不断发展)的解决scheme,我build议检查Kubernetes:

Statefulsets的新概念提供了许多的承诺。 我期望Docker Swarm能够及时增长类似的function,每个容器实例都被分配一个唯一的“sticky”主机名,可以作为唯一标识符的基础。