MongoDB分片集群

Sharding cluster是一种可以水平扩展的模式,可以满足MongoDB数据量大量增长的需求,实际大规模应用一般会采用这种架构去构建。sharding分片很好的解决了单台服务器磁盘空间、内存、cpu等硬件资源的限制问题,把数据水平拆分出去,降低单节点的访问压力。每个分片都是一个独立的数据库,所有的分片组合起来构成一个逻辑上的完整的数据库。因此,分片机制降低了每个分片的数据操作量及需要存储的数据量,达到多台服务器来应对不断增加的负载和数据的效果。

为什么使用分片?
复制所有的写入操作到主节点
延迟的敏感数据会在主节点查询
单个副本集限制在12个节点
当请求量巨大时会出现内存不足。
本地磁盘不足
垂直扩展价格昂贵

mongodb sharding服务器架构

  • Shard Server:
    mongod 实例,用于存储实际的数据块,实际生产环境中一个 shard server 角色可由几台机器组个一个 relica set 承担,防止主机单点故障。这是一个独立普通的mongod进程,保存数据信息,可以是一个副本集也可以是单独的一台服务器。
  • Config Server:
    mongod实例,存储了整个 ClusterMetadata,其中包括 chunk信息。
    这是一个独立的mongod进程,保存集群和分片的元数据,即各分片包含了哪些数据的信息。最先开始建立,启用日志功能。像启动普通的 mongod 一样启动
    配置服务器,指定configsvr 选项。不需要太多的空间和资源,配置服务器的 1KB 空间相当于真是数据的 200MB。保存的只是数据的分布表。
  • Query Routers:
    前端路由,客户端由此接入,且让整个集群看上去像单一数据库,前端应用可以透明使用。
    起到一个路由的功能,供程序连接。本身不保存数据,在启动时从配置服务器加载集群信息,开启 mongos 进程需要知道配置服务器的地址,指定configdb选项。

mongos片键的意义
一个好的片键对分片至关重要。 片键必须是一个索引 ,通 过sh.shardCollection 加会自动创建索引。
一个自增的片键对写入和数据均匀分布就不是很好, 因为自增
的片键总会在一个分片上写入,后续达到某个阀值可能会写到别的分片。但是按照片键查询会非常高效。
随机片键对数据的均匀分布效果很好。注意尽量避免在多个分片上进行查询。在所有分片上查询,mongos 会对结果进行归并排序

分片集群的构造

更多内容参考:https://www.cnblogs.com/nulige/p/7613721.html

你可能感兴趣的:(MongoDB分片集群)