环境:6个服务器泊坞群集群(2个主人和4个工人)
要求:我们需要在现有的docker swarm上设置zookeeper集群.
阻止:要在群集中设置zookeeper,我们需要在每个服务器配置中提供所有zk服务器,并在myid文件中提供唯一ID.
问题:当我们在docker swarm中创建zookeeper的副本时,我们如何为每个副本提供唯一的ID.另外,我们如何使用每个zookeeper容器的ID更新zoo.cfg配置文件.
最佳答案
目前这不是一个简单的问题.当每个集群成员需要唯一标识和存储卷时,完全可扩展的有状态应用程序集群很棘手.
在Docker Swarm上,今天,最好建议您在撰写文件中将每个集群成员作为单独的服务运行(参见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
..
..
对于最先进(但仍在不断发展)的解决方案,我建议您查看Kubernetes:
> https://kubernetes.io/docs/tutorials/stateful-application/zookeeper/
Statefulsets的新概念提供了很多希望.我希望Docker Swarm能够及时增加类似功能,为每个容器实例分配一个唯一的“粘性”主机名,可以将其用作唯一标识符的基础.