mongoDB 分片集群机制

MongoDB常见部署架构

mongoDB 分片集群机制_第1张图片

mongoDB 分片集群机制_第2张图片

  • 路由节点mongos:提供集群单一入口,转发应用端请求,选择合适数据节点进行读写,以及合并多个节点的返回。路由节点无状态,建议多个->高可用。
  • 配置节点config:提供集群元数据存储分片数据分布的映射,3个节点,为普通复制集架构。
  • 数据节点mongod:以复制集为单位,横向扩展,最大1024片。分片之间数据不重复, 所有分片在一起才可以完整工作。

MongoDB 分片集群特点

  • 应用全透明,无特殊处理
  • 数据自动均衡
  • 动态扩容,无须下线
  • 提供3种分片方式
  1. 基于范围

    mongoDB 分片集群机制_第3张图片

  2. 基于Hash

    mongoDB 分片集群机制_第4张图片

  3. 基于Zone/Tag

    mongoDB 分片集群机制_第5张图片

  • 分片集群可以有效解决性能瓶颈及系统扩容问题
  • 分片额外消耗多,管理复杂,尽量不要分片

MongoDB分片集群设计

合理的架构-分片大小

  • 关于数据:数据量不超过3TB,尽可能保持在2TB一个片;
  • 关于索引:常用索引必须容纳进内存;

mongoDB 分片集群机制_第6张图片

  • 片键 shard key:文档中的一个字段
  • 文档 doc:包含shard key的一行数据
  • 块 chunk:包含n个文档
  • 分片 shard:包含n个chunk
  • 集群 cluster:包含n个分片

选择合适片键

  • 取值基数:
  1. 对于小基数的片键,因为备选值有限,那么块的总数量就有限;
  2. 随着数据增多,块的大小会越来越大;
  3. 太大的块会导致水瓶扩展时移动块会非常困难。
  4. 取值基数要大!
  • 取值分布
  1. 对于分布不均匀的片键,造成某些块的数据量急剧增大,这些块压力随之增大;
  2. 数据均衡以chunk为单位,系统无能为力
  3. 取值分布应尽可能均匀!
  • 分散写,集中读
  1. 对主要查询要具有定向能力!
  • 被尽可能多的业务场景用到
  • 避免单调递增或者递减的片键

 

你可能感兴趣的:(mongodb)