概念
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" } )