MongoDB的三种集群模式

615 阅读3分钟

MongoDB 有三种集群部署模式,主从复制(Master-Slaver)、副本集(Replica Set)和分片(Sharding)模式。

1. 主从复制(Master-Slaver)

基本的设置方式是建立一个主节点(Primary)和一个或者多个从节点(Secondary)。

主从复制模式的集群中只能有一个主节点,主节点提供所有的增、删、查、改服务,从节点不提供任何服务。但是可以通过设置使从节点提供查询服务,这样可以减少主节点的压力。 每个从节点要知道主节点的地址,主节点记录在其上的所有操作,从节点定期轮询主节点获取这些操作,然后对自己的数据副本执行这些操作,从而保证从节点的与主节点的数据一致。

弊端:主从复制的集群中,当主节点出现故障使,只能人工介入指定新的主节点,从节点不会自动升级为主节点。同时,在这段时间内,该集群架构只能处于只读状态。

2. 副本集(Replica Set)

当集群中的主节点发生故障时,副本集可以自动投票,选举出新的主节点,而且这个过程对应用时透明的。主要为了解决主从复制模式不具备高可用的问题。

3. 分片(Sharding)模式

副本集可以解决主节点发生故障导致数据丢失或不可用的问题,但遇到需要存储海量数据的情况时,副本集中的一台机器不足以存储数据,或者说集群不足以提供可接受的读写吞吐量。这就需要用到 MongoDB 的分片(Sharding)技术,这也是 MongoDB 的另外一种集群部署模式。
MongoDB 的分片机制允许创建一个包含许多台机器的集群,将数据子集分散在集群中,每个分片维护着一个数据集合的子集。与副本集相比,使用集群架构可以使应用程序具有更强大的数据处理能力。 构建一个MongoDB的分片集群,需要三个重要组件,分别是:分片服务器(Shard Server)、配置服务器(Config Server)和路由服务器(Route Server)。

水平扩展:当一台服务器满足不了需求的时候,我们可以选择垂直扩展(增加服务器硬件),它虽然简单,但很容易达到极限,并且面临成本高等明显缺点。成本更低的方式是使用n台服务器组成集群来满足系统需求。这就是分片集的主要设计目标

缩短响应时间:因为可以把数据分散到多台服务器上,自然每台服务器的处理压力减小,处理时间就会缩短

这里会出现一个问题:假设每台服务器出故障的机率是p,那么n台服务器有一台出现故障的机率就是p * n,如果不做高可用设计,集群出现故障的概率就与机器数量成正比,这在工程上是不能接受的。幸运的是我们已经有了解决高可用的方案,也就是复制集。所以MongoDB的分片集群要求每一个片都是复制集(当然测试环境也可以使用单结点,生产环境不推荐