在 Debian 上搭建 MongoDB 集群的两种常见形态是副本集与分片集群。副本集提供高可用与自动故障转移,适合大多数业务;分片集群用于水平扩展,适合海量数据与高并发。下面给出可直接落地的步骤与关键注意事项。
一 前置准备
- 准备至少3 台 Debian 服务器(副本集建议 3 节点起步;分片集群需额外配置服务器与路由)。
- 安装 MongoDB(以 6.0 为例,Debian 11 Bullseye):
- 导入公钥并添加官方仓库:
- wget -qO - https://www.mongodb.org/static/pgp/server-6.0.asc | sudo apt-key add -
- echo “deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/debian bullseye/mongodb-org/6.0 multiverse” | sudo tee /etc/apt/sources.list.d/mongodb-org-6.0.list
- 安装软件包:sudo apt update && sudo apt install -y mongodb-org
- 目录与权限:确保数据目录(如 /var/lib/mongodb)存在且 mongod 可写。
- 网络与防火墙:开放 27017(mongod/mongos)、27018(分片服务,可选)、27019(配置服务,可选)端口;保证节点间可互通。
- 主机名解析:建议在所有节点的 /etc/hosts 中写入各节点 IP 与主机名 映射,避免 DNS 依赖。
二 搭建副本集 Replica Set(高可用)
- 配置每个节点的 /etc/mongod.conf(示例):
- net:
- port: 27017
- bindIp: 0.0.0.0(或指定内网 IP)
- replication:
- storage:
- 启动服务:sudo systemctl start mongod && sudo systemctl enable mongod
- 任选一节点初始化副本集(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.status()(应看到 PRIMARY/SECONDARY 角色与同步进度)
- 可选优化:
- 调整优先级控制主节点:cfg = rs.conf(); cfg.members[0].priority = 2; rs.reconfig(cfg)
- 读写分离:在连接字符串中设置 readPreference=secondaryPreferred
三 搭建分片集群 Sharding(水平扩展)
- 组件与端口规划(建议 3 台服务器各承载一种角色,或混布但端口隔离):
- 配置服务器(CSRS,3 节点,端口 27019)
- 分片服务器(每个分片为副本集,示例 1 个分片 3 节点,端口 27018)
- 路由服务器(mongos,端口 27017)
- 配置服务器(CSRS):
- 配置 /etc/mongod.conf:
- sharding: clusterRole: configsvr
- replication: replSetName: configReplSet
- storage: dbPath: /var/lib/mongodb/configdb
- 启动:sudo systemctl start mongod
- 初始化:
- rs.initiate({
- _id: “configReplSet”, configsvr: true,
- members: [{_id:0,host:“cfg1:27019”},{_id:1,host:“cfg2:27019”},{_id:2,host:“cfg3:27019”}]
- })
- 分片服务器(示例 shard1):
- 配置 /etc/mongod.conf:
- sharding: clusterRole: shardsvr
- replication: replSetName: shard1
- storage: dbPath: /var/lib/mongodb/shard1
- 启动:sudo systemctl start mongod
- 初始化:
- rs.initiate({
- _id: “shard1”,
- members: [{_id:0,host:“sh1a:27018”},{_id:1,host:“sh1b:27018”},{_id:2,host:“sh1c:27018”}]
- })
- 路由服务器(mongos):
- 配置 /etc/mongos.conf:
- sharding: configDB: configReplSet/cfg1:27019,cfg2:27019,cfg3:27019
- 启动:sudo mongos --config /etc/mongos.conf
- 接入分片与启用分片:
- 连接 mongos:mongo --host <mongos_ip>:27017
- 添加分片:sh.addShard(“shard1/sh1a:27018,sh1b:27018,sh1c:27018”)
- 启用数据库分片:sh.enableSharding(“mydb”)
- 对集合分片(示例按字段 uid 哈希分片):sh.shardCollection(“mydb.users”, { “uid”: “hashed” })
- 验证:sh.status()(查看分片、数据库、集合分布与均衡状态)
四 生产环境关键配置与运维要点
- 安全加固:
- 启用 SCRAM 认证,创建管理员与应用用户;
- 使用 TLS/SSL 加密节点间与客户端通信;
- 限制 bindIp 为内网网段,仅开放必要端口。
- 高可用与容量:
- 副本集建议 3 或 5 节点;分片集群每个分片也建议 3 节点 副本集;
- 为关键业务设置合理的 优先级/隐藏/延迟 节点策略。
- 监控与备份:
- 启用 mongostat/mongotop 与日志审计;
- 定期执行 mongodump/物理备份,并演练恢复流程;
- 结合 MongoDB Compass 或企业监控平台观测延迟、复制滞后与连接数。
- 客户端连接:
- 副本集连接字符串示例:mongodb://host1:27017,host2:27017,host3:27017/?replicaSet=rs0&readPreference=secondaryPreferred
- 分片集群连接字符串示例:mongodb://mongos:27017