温馨提示×

Debian怎么配置MongoDB副本集

小樊
46
2026-08-17 09:40:13
栏目: 云计算

在 Debian 上配置 MongoDB 副本集(Replica Set) 一般分为以下几个步骤。下面以 **MongoDB 6.x / 7.x(官方 APT 仓库)**为例,假设你有三台服务器(也可以在一台机器上用不同端口测试)。


一、环境准备

1. 服务器规划(示例)

主机名 IP 端口
mongo1 192.168.1.10 27017
mongo2 192.168.1.11 27017
mongo3 192.168.1.12 27017

若单机测试,可分别使用 27017 / 27018 / 27019


二、安装 MongoDB(所有节点)

1. 导入 MongoDB 官方 GPG 密钥

curl -fsSL https://www.mongodb.org/static/pgp/server-7.0.asc | \
sudo gpg -o /usr/share/keyrings/mongodb-server-7.0.gpg --dearmor

2. 添加 MongoDB APT 源(Debian 12 Bookworm 示例)

echo "deb [ signed-by=/usr/share/keyrings/mongodb-server-7.0.gpg ] \
https://repo.mongodb.org/apt/debian bookworm/mongodb-org/7.0 main" | \
sudo tee /etc/apt/sources.list.d/mongodb-org-7.0.list

3. 安装 MongoDB

sudo apt update
sudo apt install -y mongodb-org

三、配置 MongoDB 副本集(所有节点)

1. 修改配置文件

编辑 /etc/mongod.conf

# /etc/mongod.conf
net:
  port: 27017
  bindIp: 0.0.0.0   # 生产环境建议指定 IP

storage:
  dbPath: /var/lib/mongodb

replication:
  replSetName: rs0   # 副本集名称,所有节点必须一致

若单机多实例,需修改 dbPathport

2. 重启 MongoDB

sudo systemctl restart mongod
sudo systemctl enable mongod

四、初始化副本集(只需在一台节点执行)

1. 进入 MongoDB Shell

mongosh

2. 初始化副本集

rs.initiate({
  _id: "rs0",
  members: [
    { _id: 0, host: "192.168.1.10:27017" },
    { _id: 1, host: "192.168.1.11:27017" },
    { _id: 2, host: "192.168.1.12:27017" }
  ]
})

3. 查看副本集状态

rs.status()

五、验证副本集

1. 查看主节点

rs.isMaster()

2. 测试数据同步

主节点:

use testdb
db.test.insertOne({ msg: "hello replica set" })

从节点:

rs.secondaryOk()
use testdb
db.test.find()

六、常见配置补充

1. 添加仲裁节点(可选)

rs.addArb("192.168.1.13:27017")

2. 优先级设置(控制主节点)

cfg = rs.conf()
cfg.members[0].priority = 2
rs.reconfig(cfg)

3. 副本集常用命令

rs.conf()
rs.status()
rs.add("host:port")
rs.remove("host:port")

七、常见问题

1. 节点无法加入副本集

  • 防火墙放行 27017
  • bindIp 不能是 127.0.0.1
  • 时间同步(NTP)

2. 从节点无法读数据

rs.secondaryOk()

八、生产建议

  • 至少 3 个节点(或 2 + 1 arbiter)
  • 使用 鉴权(auth)
  • 启用 TLS
  • 数据目录使用独立磁盘

如果你愿意,我可以帮你:

  • ✅ 写 单机多实例副本集配置
  • ✅ 配置 MongoDB 鉴权 + Keyfile
  • ✅ 部署 Docker / Debian 混合环境
  • ✅ 排查你当前的 rs.status() 错误

直接贴你的 mongod.conf 或报错即可。

0