如何在docker swarm全局模式下创建mongo副本集

时间:2018-03-17 08:03:20

标签: mongodb docker global docker-swarm replicaset

我想在docker swarm上使用mode = global设置3个成员mongo副本集,并坚持启用复制。 对于例如Docker swarm节点:node1,node2,node3(所有管理器)。所有节点都是在不同的VM上创建的。

接下来创建了1个服务(mongo1)并在全局模式下执行,以在群集群集中的每个节点(node1,node2,node3)上安装1个mongo容器/实例。

现在,由于mongo容器端口未公开/映射到主机端口,因此我在使用主机的IP /主机名初始化副本集时遇到问题。

从mongo提示符初始化副本集的命令:

rs.initiate({_id : "rs", members: [{_id: 0, host: "{host1}"},  
            {_id: 1, host: "{host2}"}, {_id:2, host:"{host3}"}]})

{host1}, {host2}, {host3}是占位符。

无论如何在不使用主机IP地址的情况下初始化3个成员副本集?

这也可以通过使用swarm mode = replicated进行设置,其中必须使用1个副本创建3个服务,并使用service-name初始化副本,如下所示:

rs.initiate({_id : "rs", members: [{_id: 0, host: "mongo1"},  
            {_id: 1, host: "mongo2"}, {_id:2, host:"mongo3"}]})

mono1, mongo2 & mongo3是复制模式下的服务名称。 但我只想在GLOBAL模式下进行设置。

下面是堆栈文件(全局模式)

stack-file.yml:
version: "3.2"
services:
  mongo1:
    image: mongo:latest
    volumes:
      - mongo_data:/data/db
    networks:
      - mongo_net
    deploy:
      endpoint_mode: dnsrr
      mode: global
    command: mongod --replSet rs

volumes:
  mongo_data:

networks:
  mongo_net:
    external: true

创建网络 docker network create --driver overlay mongo_net

0 个答案:

没有答案