概念
MongoDB Shard Cluster
分片集群由以下三個部分組成:
Shard:分片
mongos:路由
config servers:存儲元數據和配置
Shard Key
Shard key必須是每個文檔都含有的一個或多個不可變字段。
對于非空集合,Shard Key上必須已經創建了索引。對于空集合,如果Key沒有索引,MongoDB會自動為Key創建索引。
Sharding Strategy
哈希
范圍
標簽感知
實際操作
創建Config Server副本集
1.1 啟動每個配置副本
修改配置文件如下:
sharding:
clusterRole: configsvr
replication:
replSetName: <setname>
然后啟動Mongod
1.2 連接到某一臺配置服務
1.3 運行初始化命令
rs.initiate(
{
_id : <replicaSetName>,
members: [
{ _id : 0, host : "s1-mongo1.example.net:27017" },
{ _id : 1, host : "s1-mongo2.example.net:27017" },
{ _id : 2, host : "s1-mongo3.example.net:27017" }
]
}
)創建分片副本集
2.1 啟動每一臺分片
修改配置文件如下:
sharding:
clusterRole: shardsvr
replication:
replSetName: <replSetName>
2.2 連接到某一臺
2.3 初始化分片
rs.initiate(
{
_id : <replicaSetName>,
members: [
{ _id : 0, host : "s1-mongo1.example.net:27017" },
{ _id : 1, host : "s1-mongo2.example.net:27017" },
{ _id : 2, host : "s1-mongo3.example.net:27017" }
]
}
)
Mongos
3.1 啟動Mongos
修改配置如下:
sharding:
configDB: <configReplSetName>/cfg1.example.net:27017,cfg2.example.net:27017,...
3.2 連接到Mongos
3.3 將分片加到集群
sh.addShard( "<replSetName>/s1-mongo1.example.net:27017")
3.4 允許某個數據庫分片
sh.enableSharding("<database>")集合分片
sh.shardCollection("<database>.<collection>", { <key> : <direction> } )
如果想要采用哈希策略。那么根據前面提到的,Shard Key需要已經建立了Hash Index。然后:
sh.shardCollection( "database.collection", { <field> : "hashed" } )