美文网首页
MongoDB Sharding(分片)笔记

MongoDB Sharding(分片)笔记

作者: 春秋杰瑞 | 来源:发表于2019-09-29 09:11 被阅读0次

Sharding 是一种将数据分散到多台主机上的方法,使得 MongoDB 能够支持处理超大数据集和超高吞吐量。实质上 Sharding 实现了横向扩展能力。

Sharding 结构

Sharding 集群由以下组件构成:

  • shard —— 每个 shard 节点存储了分片数据的一部分。
  • mongos —— 可以看做查询路由器,mongos 是客户端应用程序和shard 集群之间的接口
  • config servers —— 配置服务器保存了集群的元信息和配置信息。

<img src="/assets/img/sharded-cluster-production-architecture.bakedsvg.svg" title="sharded-cluster-production-architecture"/>

MongoDB 在 collection 层面分片,将 collection 中的数据分散到不同 shard.

分片键

为了划分 collection,MDB(MongoDB) 需要分片键来分区 collection,分片键由不可变字段或者出现在每一个文档中的字段构成。
你可以在分片collection 时选择一个分片键,一旦选择不可更改,一个集合只能有一个分片键。
分片非空集合,要求该集合必须必须存在一个以分片键起始的索引。分片键的选择可能对性能产生影响,务必小心。

分块 —— MDB 将分片数据划分为块,每一块都有一个上(包含)下(不包含)界。

自动均衡 —— MDB 支持自动迁移分块,以便实现自均衡。

优势

  • R/W 速度提升
  • 存储能力提升
  • 高可用

注意点

  • 一旦 shard 便无法撤销

分片和非分片集合混合

MDB 允许混合集合,非分片集合存储在 PRIMARY SHARD(默认是可用空间最多的,用 MOVEPRIMARY 改变)。

<img src="/assets/img/sharded-cluster-primary-shard.bakedsvg.svg" title="sharded-cluster-primary-shard"/>

连接分片集群

你必须连接至 mongos 路由器以便读取或写入任何分片集群中的集合。客户端永远都不应该直接访问 SHARD!!!!!

<img src="/assets/img/sharded-cluster-mixed.bakedsvg.svg" title="sharded-cluster-mixed"/>

分片策略

MDB 支持两种分片策略,分别是 散列分片 和 区域分片。

散列分片需要先计算出分片键的哈希值,基于哈希值,每个分块都被指定一段区域。(意思应该是每个分块对应一段区域,如果散列值落到此区域这存储到这个分块)

(MDB 将自动计算散列值! Nice)

基于散列值的数据分布更加均匀,特别是分片键递增的场合。这也意味着,基于分片键的区域查询操作更加耗时。

<img src="/assets/img/sharding-hash-based.bakedsvg.svg" title="sharding-hash-based"/>

区域分片基于分片键将数据划分成区域,同上。一段区域的分片键更容易保存到同一片chunk。

部署成员数量说明

组件 数量 默认端口
Shard sharding 至少需要 2个 shard 27018
mongos 一个即可,可以更多 27017
config server 1 个(完全无备份) 3个(safe!) 27019

常用指令

// 初始化 Config 服务器所属 Replica Set


rs.initiate(
  {
    _id: "helloworld",
    configsvr: true,
    version: 1,
    members: [
      { _id : 0, host : "10.252.107.239:27019" },
    ]
  }
)


// 查询 config 最近都干了什么
use config
db.changelog.find().sort({time: -1}).limit(5).pretty()
db.actionlog.find().sort({time: -1}).limit(5).pretty()


// 修改分块大小
use config 
db.settings.save( { _id:"chunksize", value: <,MB> } ) 


// 手动移动分块,必须先停止 Balancer
use admin 
db.runCommand({ moveChunk: "db.collection", bounds : [ { "shardKey" : NumberLong("-7580132945406171168") }, { "shardKey" : NumberLong("-5939573624981956557") } ], to: "new_shard_" })    




// 创建散列索引(用于分片)
db.collection.createIndex({"key": "hashed"});




// 获取分片集合分片情况
db.collection.getShardDistribution()

帮助链接:

相关文章

  • mongodb分片

    mongodb 分片: Sharding组件: sharding最最最关键的是sharding key(片键) s...

  • MongoDB Sharding(分片)笔记

    Sharding 是一种将数据分散到多台主机上的方法,使得 MongoDB 能够支持处理超大数据集和超高吞吐量。实...

  • MongoDB之分片集群(Sharding)

    MongoDB之分片集群(Sharding) 一、基本概念 分片(sharding)是一个通过多台机器分配数据的方...

  • MongoDB分片集群搭建

    本文主要介绍了mongoDB分片集群概念,以及分片集群搭建过程,方便下次参考。 概念 分片(sharding)是一...

  • 2.分片集群

    2.1 分片概念 分片(sharding)是一种跨多台机器分布数据的方法, MongoDB使用分片来支持具有非常大...

  • Docker + MongoDB分片

    分片https://docs.mongodb.com/manual/sharding/ 总共运行的容器:16个 1...

  • 【MongoDB】— CentOS76部署mongodb分片集群

    CentOS76部署mongodb分片集群Sharding Cluster通过多节点和多实例部署。 1分片集群规划...

  • mongodb笔记08--分片

    分片(sharding): mongodb的集群搭建方式主要有三种,主从模式,Replica set模式,shar...

  • MongoDB中的分片(Sharding)

    1.Sharding的作用:将数据通过一定的算法分散到不同的机器上,实现高扩展。MongoDB使用分片来支持具有非...

  • MongoDB Sharding Cluster 分片集群

    集群基本结构搭建分片策略应用balancer管理 一, 图解与规划 1. 图解 2. 规划 10个实例:38017...

网友评论

      本文标题:MongoDB Sharding(分片)笔记

      本文链接:https://www.haomeiwen.com/subject/jlewuctx.html