我想在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