在 Debian 上管理 MongoDB 集群的实用指南
一 架构与准备
- 常见架构为:由多个 mongod 组成的 副本集(Replica Set) 提供高可用;需要横向扩展时使用 分片(Sharding),由 mongos 路由、多个 分片副本集 和 配置服务器副本集(CSRS) 构成。
- 组件与端口建议:
- 配置服务器副本集:端口 27019(推荐),角色 configsvr: true
- 分片副本集:端口 27018(推荐),每个分片是一个副本集
- mongos 路由:端口 27017
- 系统准备:在所有节点安装 MongoDB 社区版,创建数据与日志目录,开放防火墙端口(仅内网网段),并统一 /etc/hosts 或使用 DNS 解析主机名。
二 安装与基础配置
- 安装 MongoDB(以 Debian 11/12 为例,导入官方仓库后安装 mongodb-org 元包):
- 导入 GPG 密钥并添加仓库(示例为 Ubuntu focal 的 4.4 仓库,实际请选择与你系统版本匹配的仓库)
- 执行:sudo apt update && sudo apt install -y mongodb-org
- 统一基础配置(/etc/mongod.conf 片段,按角色调整):
- systemLog: destination: file; logAppend: true; path: /var/log/mongodb/mongod.log
- storage: dbPath: /var/lib/mongodb; journal: enabled: true
- net: port: 27017; bindIp: 0.0.0.0(生产环境请限制为内网 IP)
- replication: replSetName: rs0(副本集名称,各成员需一致)
- 启动与开机自启:sudo systemctl enable --now mongod
- 验证:mongo --eval ‘db.runCommand({ connectionStatus: 1 })’。
三 部署与日常管理操作
- 副本集部署与运维
- 初始化:mongo 进入 shell 后执行
- rs.initiate({ _id: “rs0”, members: [{ _id: 0, host: “node1:27017” }, { _id: 1, host: “node2:27017” }, { _id: 2, host: “node3:27017” }] })
- 扩容:rs.add(“node4:27017”);如需仲裁节点:rs.addArb(“arbiter:27017”)
- 维护:rs.status()、rs.printReplicationInfo()、rs.reconfig(cfg)(修改优先级/隐藏/延迟等)
- 故障切换演练:临时停止主节点,验证自动 failover 与数据同步恢复
- 分片集群部署与运维
- 部署顺序:先部署并初始化 配置服务器副本集(CSRS),再部署各 分片副本集,最后启动 mongos 并添加分片
- mongos 启动示例:mongos --configdb cfgReplSet/node1:27019,node2:27019,node3:27019 --port 27017
- 添加分片:sh.addShard(“shard1/node1:27018,node2:27018,node3:27018”)
- 启用分片与选择片键:sh.enableSharding(“mydb”);sh.shardCollection(“mydb.coll”, { “field”: 1 })
- 状态检查:mongos> sh.status();查看各分片 balancer 状态与迁移进度
- 备份与恢复
- 建议对 mongos 可见的集群 使用 mongodump/mongorestore(逻辑备份),对超大库考虑文件系统快照或云厂商备份
- 备份:mongodump --uri “mongodb://mongos:27017” --out /backup/$(date +%F)
- 恢复:mongorestore --uri “mongodb://mongos:27017” /backup/2026-01-01
- 一致性:尽量在低峰期执行,避免大事务/批量写入影响备份一致性
四 安全与网络加固
- 启用认证与最小权限
- 在 mongod.conf 中开启:security: authorization: enabled
- 创建管理员:use admin; db.createUser({ user: “admin”, pwd: “StrongPass!”, roles: [“root”] })
- 客户端连接使用 --authenticationDatabase admin -u admin -p
- 网络与访问控制
- 仅开放 27017/27018/27019 到内网;使用 UFW/iptables 限制来源网段
- bindIp 绑定内网接口或具体管理网段,避免使用 0.0.0.0 暴露公网
- 加密与合规
- 启用 TLS/SSL 加密传输(net.tls.mode、certificateKeyFile 等)
- 审计与密钥轮换:定期更换密钥、审计关键操作、限制备份账号权限。
五 监控 维护与升级
- 监控与健康检查
- 内置工具:rs.status()、sh.status()、db.serverStatus()、db.printReplicationInfo()
- 可视化与告警:MongoDB Compass、Atlas 监控、Prometheus + mongostat/mongotop Exporter
- 日常维护
- 平衡窗口:在 mongos 中设置 balancer 窗口(避免业务高峰)
- 索引与容量:定期 review 索引、监控 oplog 窗口与磁盘使用
- 升级策略
- 遵循官方升级路径(同主版本内小版本滚动升级优先)
- 先升级 配置服务器副本集,再升级 分片副本集,最后升级 mongos
- 每一步升级后在测试环境验证应用兼容性与回滚预案。