在 Debian 上配置 MongoDB 分片(Sharded Cluster),通常包括 Config Server、Shard(副本集)和 Mongos 路由 三部分。下面以 MongoDB 6.x / 7.x(官方 APT 仓库) 为例,给你一套可实际操作的完整流程。
假设 3 台服务器(也可单机多端口测试):
| 角色 | 主机 | 端口 |
|---|---|---|
| Config Server | 192.168.1.10 | 27019 |
| Shard1(副本集) | 192.168.1.11 | 27018 |
| Shard2(副本集) | 192.168.1.12 | 27018 |
| Mongos | 192.168.1.10 | 27017 |
✅ 生产环境建议:
curl -fsSL https://www.mongodb.org/static/pgp/server-7.0.asc | \
sudo gpg -o /usr/share/keyrings/mongodb-server-7.0.gpg --dearmor
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
sudo apt update
sudo apt install -y mongodb-org
/etc/mongod.confstorage:
dbPath: /var/lib/mongodb
journal:
enabled: true
systemLog:
destination: file
path: /var/log/mongodb/mongod.log
logAppend: true
net:
port: 27019
bindIp: 0.0.0.0
replication:
replSetName: cfgrs
sharding:
clusterRole: configsvr
sudo systemctl restart mongod
sudo systemctl enable mongod
mongosh --port 27019
rs.initiate({
_id: "cfgrs",
configsvr: true,
members: [
{ _id: 0, host: "192.168.1.10:27019" }
]
})
/etc/mongod.confstorage:
dbPath: /var/lib/mongodb
journal:
enabled: true
systemLog:
destination: file
path: /var/log/mongodb/mongod.log
net:
port: 27018
bindIp: 0.0.0.0
replication:
replSetName: shard1
sharding:
clusterRole: shardsvr
mongosh --port 27018
rs.initiate({
_id: "shard1",
members: [
{ _id: 0, host: "192.168.1.11:27018" }
]
})
多个 shard 时重复此步骤(shard2、shard3…)
/etc/mongos.confsystemLog:
destination: file
path: /var/log/mongodb/mongos.log
logAppend: true
net:
port: 27017
bindIp: 0.0.0.0
sharding:
configDB: cfgrs/192.168.1.10:27019
mongos -f /etc/mongos.conf
mongosh --port 27017
sh.addShard("shard1/192.168.1.11:27018")
sh.addShard("shard2/192.168.1.12:27018")
查看分片状态:
sh.status()
sh.enableSharding("testdb")
sh.shardCollection("testdb.users", { user_id: 1 })
✅ 推荐分片键:
sh.status()
db.printShardingStatus()
sh.getBalancerState()
sh.isBalancerRunning()
RECOVERING✅ 使用 副本集
✅ 至少 3 个 config server
✅ 合理选择 Shard Key
✅ 监控 balancer 性能
✅ 不要对 _id 盲目分片
如果你需要:
告诉我你的实际环境,我可以直接给你定制方案。