Mongodb3.4.7搭建高可用集群(一)

简介

Sharding(分片)是一种将数据划分为多个分片,然后分布在多个机器节点上的解决方案,Mongodb使用sharding支撑其庞大的数据存储以及高效的数据访问。

单个节点上的数据库系统要存储大容量的数据,同时满足高效率的数据访问,对其来说是一个很大的挑战。没准,我们执行一次查询,CPU就挂掉了,就算不挂,查询出来的数据内存根本放不下。

面对这种情况,有2种方式可以解决系统的瓶颈:纵向增强自身、横向扩展节点。

  • 纵向增强自身意味着要升级为更强悍的CPU,扩展更大的内存容量和硬盘容量,但受制于硬件技术的发展,这种方案风险太大。
  • 横向扩展节点会将数据分布到不同的机器节点上,充分利用多个机器的硬件资源,即使数据继续大规模增长,也可以通过扩充节点来从容应对。

Mongodb使用sharding来实现横向扩展。

Mongodb的分片集群包括以下几个组成部分:

  1. shard(分片):每个shard都是要存储数据的子集,而且每一个shard都应该作为一个replica set,replica set是Mongodb主从复制的一个集群。
  2. mongos:mongos扮演了查询路由的角色,客户端连接它进行数据操作。
  3. config servers:config servers 存储集群的元数据信息和配置信息,从3.4版本开始,config server必须部署为replica set。

注:因为Mongodb本身提供以上功能,所以这些服务进程都是Mongodb的实例,要不就部署在不同的机器节点上,要不就部署在想同机器的不同端口上。

 各个组件之间的关系如下图:

Shard Key

Mongodb通过shard key来确定某个document应该放在那个shard replica set上。shard key可以是collection的一个字段或多个字段的组合。shard key一旦指定,分片后,就不能在更改了,所以分片前一定要规划好。关于如何指定shard key,后面的示例说明。

如果分片的时候collection不为空,那一定要保证该collection有shard key的索引。

选择合适的shard key对程序的性能、扩展性有很大的影响。

Mongodb目前支持2中分片策略:Hashed Sharding,Ranged Sharding。具体后续文章介绍。

Chunks

Mongodb将分片数据放入chunk中,Mongodb将每个chunk均匀分布在shard集群中。

原文地址:https://www.cnblogs.com/seastar1989/p/7510959.html