温馨提示×

Debian MongoDB怎么配置副本

小樊
36
2026-08-02 05:21:09
栏目: 云计算

下面以 Debian 系统 为例,说明如何配置 MongoDB 副本集(Replica Set)。示例基于 MongoDB 6.x / 7.x(官方 APT 仓库),使用 3 节点副本集(最常见、推荐)。


一、环境准备

1. 安装 MongoDB(所有节点)

如果还没安装:

# 导入 MongoDB GPG 密钥
curl -fsSL https://www.mongodb.org/static/pgp/server-7.0.asc | \
  gpg --dearmor -o /usr/share/keyrings/mongodb-server-7.0.gpg

# 添加 MongoDB 仓库
echo "deb [ signed-by=/usr/share/keyrings/mongodb-server-7.0.gpg ] \
https://repo.mongodb.org/apt/debian $(lsb_release -cs)/mongodb-org/7.0 main" \
| tee /etc/apt/sources.list.d/mongodb-org-7.0.list

# 安装
apt update
apt install -y mongodb-org

二、副本集架构示例

假设 3 台服务器:

节点 IP
node1 192.168.1.10
node2 192.168.1.11
node3 192.168.1.12

副本集名称:rs0


三、配置 MongoDB(所有节点)

1. 编辑配置文件

nano /etc/mongod.conf

关键配置:

net:
  port: 27017
  bindIp: 0.0.0.0   # 生产建议指定 IP

replication:
  replSetName: "rs0"

security:
  authorization: enabled
  keyFile: /etc/mongodb-keyfile   # 用于节点认证

2. 创建 KeyFile(所有节点)

openssl rand -base64 756 > /etc/mongodb-keyfile
chmod 400 /etc/mongodb-keyfile
chown mongodb:mongodb /etc/mongodb-keyfile

所有节点的 keyFile 内容必须完全一致


3. 启动 MongoDB

systemctl restart mongod
systemctl enable mongod

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

进入 mongo shell:

mongosh

1. 初始化副本集

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" }
  ]
})

查看状态:

rs.status()

五、创建管理员用户(建议)

初始化完成后,先创建用户:

use admin
db.createUser({
  user: "admin",
  pwd: "StrongPassword",
  roles: [ { role: "root", db: "admin" } ]
})

退出并以管理员登录:

mongosh -u admin -p --authenticationDatabase admin

六、副本集验证

rs.status()
rs.isMaster()

结果中应看到:

  • primary 一个
  • secondary 两个
  • members 共 3 个

七、常见问题

1. 无法连接其他节点

  • 防火墙放行 27017
ufw allow 27017

2. hostname 问题

建议统一使用 IP + bindIp: 0.0.0.0

3. 节点一直 RECOVERING

rs.stepDown()

或重建节点数据目录


八、生产建议

  • ✅ 至少 3 个节点
  • ✅ 使用 奇数节点(防止脑裂)
  • ✅ 启用 认证 + TLS
  • ✅ 每个节点部署在不同物理机 / 可用区
  • ✅ 不推荐只做 1 主 1 从(无高可用)

如果你愿意,我可以:

  • ✅ 帮你做 单机多实例副本集
  • ✅ 配置 Docker / Debian 混合环境
  • ✅ 配置 MongoDB 副本集 + 认证 + TLS
  • ✅ 排查你当前的 rs.status() 报错

直接告诉我你的 MongoDB 版本和系统环境即可。

0