You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

跨三台机器部署MongoDB ReplicaSet的Docker Compose配置咨询

跨主机部署MongoDB副本集的Docker Compose配置方案

问题1:如何配置Docker Compose实现跨主机部署

Docker Compose是单主机编排工具,无法通过一个配置文件将服务分发到不同主机。因此需要为每台主机单独编写仅包含自身节点的Compose文件,并将副本集配置中的节点地址替换为实际主机名(而非容器名),具体配置如下:

1.1 主节点(primary-1.com)的docker-compose.yml

仅定义主节点服务,调整健康检查逻辑为仅验证节点状态(初始化操作手动执行):

version: "3.8"

services:
  mongo-primary:
    image: mongo:5
    container_name: mongo-primary
    command: ["--replSet", "my-replica-set", "--bind_ip_all", "--port", "30001"]
    volumes:
      - ./data/mongo-primary:/data/db  # 本地持久化目录,需提前创建并设置权限
    ports:
      - 30001:30001
    healthcheck:
      test: test $$(echo "rs.status().ok" | mongo --port 30001 --quiet) -eq 1
      interval: 10s
      start_period: 30s

1.2 副本节点1(backup-1.com)的docker-compose.yml

仅定义第一个副本节点:

version: "3.8"

services:
  mongo-backup1:
    image: mongo:5
    container_name: mongo-backup1
    command: ["--replSet", "my-replica-set", "--bind_ip_all", "--port", "30002"]
    volumes:
      - ./data/mongo-backup1:/data/db
    ports:
      - 30002:30002
    healthcheck:
      test: test $$(echo "rs.status().ok" | mongo --port 30002 --quiet) -eq 1
      interval: 10s
      start_period: 30s

1.3 副本节点2(backup-2.com)的docker-compose.yml

仅定义第二个副本节点:

version: "3.8"

services:
  mongo-backup2:
    image: mongo:5
    container_name: mongo-backup2
    command: ["--replSet", "my-replica-set", "--bind_ip_all", "--port", "30003"]
    volumes:
      - ./data/mongo-backup2:/data/db
    ports:
      - 30003:30003
    healthcheck:
      test: test $$(echo "rs.status().ok" | mongo --port 30003 --quiet) -eq 1
      interval: 10s
      start_period: 30s

1.4 手动初始化副本集

所有节点启动并通过健康检查后,进入主节点容器执行初始化:

docker exec -it mongo-primary mongo --port 30001

在Mongo Shell中执行:

rs.initiate({
  _id: 'my-replica-set',
  members: [
    { _id: 0, host: 'primary-1.com:30001' },
    { _id: 1, host: 'backup-1.com:30002' },
    { _id: 2, host: 'backup-2.com:30003' }
  ]
})

执行rs.status()确认副本集状态正常即可。

问题2:是否需要在每个主机上运行该docker-compose文件

是的,每台主机仅负责运行自身的Mongo节点容器,因此需要在primary-1.com、backup-1.com、backup-2.com分别部署对应节点的Compose文件,并执行docker-compose up -d启动服务。

额外注意事项

  • 三台主机必须确保网络互通,开放对应端口(30001/30002/30003)的入站规则;
  • 本地持久化目录需提前创建,并设置正确权限(可执行sudo chown -R 999:999 ./data/mongo-xxx,Mongo容器默认使用UID/GID为999的用户);
  • 若主机有防火墙或安全组,需允许三台主机之间的Mongo端口通信;
  • 若使用IP而非主机名,需确保IP是静态的,避免节点地址变化导致副本集故障。

内容的提问来源于stack exchange,提问作者pylos

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 15:10:22