{MongDB} MongoDB Sharding

概念

MongoDB Shard Cluster

分片集群由以下三个部分组成:
Shard:分片
mongos:路由
config servers:存储元数据和配置


sharded-cluster-production-architecture.png

Shard Key

Shard key必须是每个文档都含有的一个或多个不可变字段。
对于非空集合,Shard Key上必须已经创建了索引。对于空集合,如果Key没有索引,MongoDB会自动为Key创建索引。

Sharding Strategy

哈希


sharding-hash-based.png

范围

sharding-range-based.png

标签感知

sharded-cluster-tag-aware.png

实际操作

  1. 创建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. 创建分片副本集
    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" }
]
}
)

  1. 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>")

  2. 集合分片
    sh.shardCollection("<database>.<collection>", { <key> : <direction> } )
    如果想要采用哈希策略。那么根据前面提到的,Shard Key需要已经建立了Hash Index。然后:
    sh.shardCollection( "database.collection", { <field> : "hashed" } )

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容