如何在docker swarm上设置zookeeper集群

Sun*_*wal 7 docker docker-swarm apache-zookeeper

环境:6个服务器泊坞群集群(2个主人和4个工人)

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

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

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

Mar*_*nor 8

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

在Docker Swarm上,今天,最好建议您在compose文件中将每个集群成员作为单独的服务运行(请参阅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
..
..
Run Code Online (Sandbox Code Playgroud)

对于最先进(但仍在不断发展)的解决方案,我建议您查看Kubernetes:

Statefulsets的新概念提供了很多希望.我希望Docker Swarm能够及时增加类似功能,为每个容器实例分配一个唯一的"粘性"主机名,可以将其用作唯一标识符的基础.