
| 角色 | 職責 | 進程 |
|---|---|---|
| mongos | 路由/查詢協調器,無狀態,客戶端唯一入口 | 輕量級,可多實例高可用 |
| Config Server | 存儲元數據:分片映射、鍵範圍、集合配置 | 副本集部署(生產 ≥3 節點) |
| Shard (mongod) | 實際數據節點,每個分片可為副本集 | 數據存儲主力 |
mkdir -p /data/sharding/config mkdir -p /data/sharding/shard1 mkdir -p /data/sharding/shard2
mongod --configsvr --replSet configRepl --dbpath /data/sharding/config --port 27019 --bind_ip_all
初始化副本集:rs.initiate({_id:"configRepl", members:[{_id:0, host:"localhost:27019"}]})
mongod --shardsvr --replSet shard1 --dbpath /data/sharding/shard1 --port 27018 --bind_ip_all mongod --shardsvr --replSet shard2 --dbpath /data/sharding/shard2 --port 27018 --bind_ip_all
分別初始化副本集 shard1、shard2。
mongos --configdb configRepl/localhost:27019 --port 27017 --bind_ip_all
mongo --port 27017
sh.addShard("shard1/localhost:27018")
sh.addShard("shard2/localhost:27018")
sh.enableSharding("testdb")
sh.shardCollection("testdb.person", { "name": "hashed" }) // 哈希分片
// 或範圍分片:{ "age": 1 }
// 插入 10 萬測試數據
for (var i=0; i<100000; i++) db.person.insert({name:"jack"+i, age:i%100})
// 查看分片狀態
sh.status()

關鍵觀察點:
shard0000、shard0001。true 表示已分片。minkey → jack0 → jack234813 → jack9999 → maxkey,約 3:1 分佈於兩分片。_id、哈希用戶 ID)。