public zookeeper 主机在哪里?

Where to public zookeeper hosts?

我有如下场景:

如您所见,我安装了两个 docker 主机,Dockerhost1Dockerhost2。在两台主机中,2 Zookeeper 容器都是 运行ning。

我想要,所有的Zookeeper容器都互相认识,因为我要搭建一个集群环境。

以下网络可用:

Dockerizer@docker1:~$ docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
dbf91cc26912        bridge              bridge              local
57f38c4c93ad        host                host                local
5d54f5ce807e        none                null                local

我的问题是:

我必须在哪个网络中 运行 Zookeeper 容器?我猜是在 host 网络上吗?

为了 运行 主机上的两个容器,我将创建一个组合文件,其中包含:

version: '3.1'

services:
    zoo1:
        image: zookeeper
        restart: always
        hostname: zoo1
        ports:
            - 2181:2181
        environment:
            ZOO_MY_ID: 1
            ZOO_SERVERS: server.1=zoo1:2888:3888 server.2=zoo2:2888:3888

    zoo2:
        image: zookeeper
        restart: always
        hostname: zoo2
        ports:
            - 2182:2181
        environment:
            ZOO_MY_ID: 2
            ZOO_SERVERS: server.1=zoo1:2888:3888 server.2=zoo2:2888:3888  

如何配置网络,让他们互相认识?

建议安装docker swarm,做成集群?

我可能会实现群模式,不是为了群调度和管理容器作为扩展服务,而是为了包含覆盖网络。您可以设置自己的 k/v 存储并将其用于覆盖网络,但在主机 1 上更容易 运行:

docker swarm init

然后 运行 在主机 2 上输出 join 命令。

然后您可以创建一个可连接且跨越两个主机的覆盖网络:

docker network create -d overlay --attachable zookeeper

Attachable 还允许您在 swarm 服务之外使用网络。您只需将其作为外部网络添加到您的撰写文件中:

version: '3.1'

networks:
  zookeeper:
    external: true

services:
    zoo1:
        image: zookeeper
        restart: always
        hostname: zoo1
        networks:
            - zookeeper
        ports:
            - 2181:2181
        environment:
            ZOO_MY_ID: 1
            ZOO_SERVERS: server.1=zoo1:2888:3888 server.2=zoo2:2888:3888

    zoo2:
        image: zookeeper
        restart: always
        hostname: zoo2
        networks:
            - zookeeper
        ports:
            - 2182:2181
        environment:
            ZOO_MY_ID: 2
            ZOO_SERVERS: server.1=zoo1:2888:3888 server.2=zoo2:2888:3888