下面给你一个在 CentOS 上配置 MongoDB 分片(Sharded Cluster)的实战步骤示例,适合学习和测试环境(生产环境会更复杂,比如鉴权、TLS、高可用等)。
一个标准分片集群包含三类角色:
示例规划(单台 CentOS 测试):
| 角色 | 端口 |
|---|---|
| Config Server | 27019 |
| Mongos | 27017 |
| Shard1 | 27018 |
生产环境建议:
- Config Server 至少 3 个节点
- 每个 Shard 是副本集(Replica Set)
# 添加 yum 源
cat > /etc/yum.repos.d/mongodb-org.repo <<EOF
[mongodb-org]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/7/mongodb-org/6.0/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-6.0.asc
EOF
yum install -y mongodb-org
mkdir -p /data/configdb
/etc/mongod-config.confstorage:
dbPath: /data/configdb
net:
port: 27019
bindIp: 0.0.0.0
sharding:
role: configsvr
replication:
replSetName: configReplSet
mongod -f /etc/mongod-config.conf --fork
mongo --port 27019
rs.initiate({
_id: "configReplSet",
configsvr: true,
members: [{ _id: 0, host: "localhost:27019" }]
})
mkdir -p /data/shard1
/etc/mongod-shard1.confstorage:
dbPath: /data/shard1
net:
port: 27018
bindIp: 0.0.0.0
sharding:
role: shardsvr
replication:
replSetName: shard1ReplSet
mongod -f /etc/mongod-shard1.conf --fork
mongo --port 27018
rs.initiate({
_id: "shard1ReplSet",
members: [{ _id: 0, host: "localhost:27018" }]
})
/etc/mongos.confnet:
port: 27017
bindIp: 0.0.0.0
sharding:
configDB: configReplSet/localhost:27019
mongos -f /etc/mongos.conf --fork
mongo --port 27017
sh.addShard("shard1ReplSet/localhost:27018")
查看状态:
sh.status()
sh.enableSharding("testdb")
sh.shardCollection(
"testdb.user",
{ user_id: "hashed" }
)
use testdb
for (let i=0;i<10000;i++){
db.user.insert({user_id:i, name:"user"+i})
}
查看数据分布:
db.user.getShardDistribution()
sh.status()
sh.enableSharding("db")
sh.shardCollection("db.coll", {key:1})
sh.addShard("rsName/host:port")
如果你需要:
告诉我你的环境,我可以直接给你一套可复制的配置。