4.mongo分片集群

常见mongodb部署架构

4.mongo分片集群

 

1.为什么要是用分片集群 ?

数据容量日益增大,访问性能日渐降低,怎么破?
新品上线异常火爆,如何支撑更多的并发用户?
单库已有 10TB 数据,恢复需要1-2天,如何加速?
地理分布数据

2.分片如何解决

如何分片
 4.mongo分片集群 ------->>>>4.mongo分片集群

 完整的分片集群

 4.mongo分片集群

 

 mongos:路由节点
  1.提供集群单一入口
  2.转发应用端请求
  3.选择合适的数据节点进行读写
  4.合并多个数据节点的返回
  5.无状态的,至少两个做冗余

 config server:配置节点
  1.配置服务器存储集群的元数据和配置设置
  2.从mongodb3.4开始,必须将配置服务器负数为副本集
  3.提供集群元数据存储
  4.分片数据分布的映射

 mongod:数据节点
  1.以复制集为单位,横向扩展
  2.最大1024个分片
  3.分片之间数据不重复
  4.所有分片在一起才可以完整的工作

 

  mongodb分片集群的特点:
  1.应用全透明,无特殊处理
  2.数据自动均衡
  3.动态扩容,无需下线
  4.提供三种分片方式

 mongodb分片总结:
  1.分片集群可以有效解决性能瓶颈及系统扩容问题
  2.分片额外消耗较多,管理复杂,能不分片尽量不要分片
  3.如果实在要用,请仔细学习下一讲

 

3.mongodb分片集群的分片方式

1.基于范围
选一个或者几个字段来进行分片
4.mongo分片集群

 

2.基于hash
可以随机分布到各个节点
4.mongo分片集群

 

3.基于zone/tag
自定义zone
4.mongo分片集群

 

 4.分片集群中的概念

分片集群中的概念
4.mongo分片集群

 

 

4.如何设计一个分片集群

1.如何用好分片集群
 4.mongo分片集群
2.分片的大小
分片的基本标准:
  1.关于数据:数据量不超过3TB,尽可能保持在2TB一个片
  2.关于索引:常用索引必须容纳进内存
按照以上标准初步确定分片后,还需要考虑业务压力,随着压力增大,CPU、RAM、磁盘中的任何一项出现瓶颈时,都可以通过添加更多分片来解决。
4.mongo分片集群

  3.选择合适的片键

4.mongo分片集群

选择基数大的片键(就是分片键的复杂度要高)
对于小基数的片键:
  因为备选值有限,那么块的总数量就有限;
  随着数据增多,块的大小会越来越大; ? 水平扩展时移动块会非常困难;
例如:存储一个高中的师生数据,以年龄(假设年龄范围为15~65岁)作为片键,那么:
  15<=年龄<=65,且只为整数
  最多只会有51个 chunk
结论:取值基数要大!
 选择分布均匀的片键
对于分布不均匀的片键:
  造成某些块的数据量急剧增大
  这些块压力随之增大
  数据均衡以 chunk 为单位,所以系统无能为力
例如:存储一个学校的师生数据,以年龄(假设年龄范围为15
~65岁)作为片键,那么:   15<=年龄<=65,且只为整数   大部分人的年龄范围为15~18岁(学生) ? 15、16、17、18四个 chunk 的数据量、访问压力远大于其他 chunk 结论:取值分布应尽可能均匀

  选择定向性好的

假设
    4个分片的集群,你希望读取某条特定的数据
    如果你用片键作为查询条件,mongos可以直接定位到具体的分片
    如果你不用管片键,mongos需要把查询分发到4个分片
    等待最后一个分片想赢。mongos才能想赢客户端

结论:对主要查询要有定向能力

 

 

 

 

 

1.垂直分片和水平分片

1.垂直分片
    提升集群节点性能,但是有瓶颈,尽量选择比较好的服务器!
2.水平分片
    呈线性提升性能,带来维护成本
    数据增长很快,但是查询并不需要查询所有的数据,坑热数据的区分!

在mongodb中绝大部分使用的是复制集,分片集群使用的也是比较少的

2.mongodb中的分片集群

分片的本质是数据块太大了。需要把数据块拆小一点。
 4.mongo分片集群

 

 




 

 

pass

4.mongo分片集群

上一篇:IfcWarpingStiffnessSelect


下一篇:stylus解决移动端1像素边框的问题