0%

mongoDB系列1:三种集群模式介绍

mongoDB是一个开源的文档类型数据库,它具有高性能,高可用,可自动收缩的特性。
mongoDB集群模式主要有主从(master/slaves),副本集(replication),和分片(sharding)。

主从(master/slaves)

mongoDB主从模式架构图
主从是所有集群模式中最简单的,如上图所示,由一主一从或一主多从组成。
主从模式是早期系统设计中最常见的,实现数据备份的同时,将读写分离,降低数据库的压力。
该模式由两个角色组成:

master: 提供读写功能
slave: 提供数据备份和读功能

主从模式下,master节点出现故障的时候,需要手动恢复,已不再推荐使用,

副本集(replication)

mongoDB副本集模式架构图
如上图所示,副本集由一组mongo实例组成,提供了数据冗余与高可用性。相对于主从模式,该模式可以在主节点挂掉的时候通过选举算法自动选举出新的主节点,保证服务的可用性。
该模式由三个角色组成:

primary: 主节点,对应的master/slave模式的master。主节点是唯一能够接收写请求的节点。一旦主节点不可用,会选出新的主节点。
secondaries: 从节点,对应的master/slave模式的slave。提供数据备份和读功能,并且能在主节点挂掉的时候被选举为新的主节点。
arbiter: 投票节点或者叫仲裁节点。该角色是可选的,所以图上也没有画出来。投票节点其本身并不包含数据集,也无法被升级为主节点,但是,一旦当前的主节点不可用时,投票节点就会参与到新的主节点选举的投票中。投票节点仅在复制集成员为偶数个的时候需要,如果在拥有奇数个复制集成员的复制集中新增了一个投票节点,复制集可能会遇到选举僵局,具体可以看官方文档

该模式的缺点是每个节点都要存储一份完整的数据,当存储数据量越来越大的时候,只能通过扩大每一个节点的容量来实现扩容。

分片(sharding)

mongoDB分片模式架构图
在副本集模式下,当数据量越来越大时,我们只能通过把节点的容量(升级服务器的硬件)不断的扩大来实现扩容,这种垂直扩容的方式容易达到极限,并且成本高,于是有了分片模式。
分片模式下,可以将数据拆分成多个数据块,存储在不同的节点上。当数据量越来越大的时候,可以通过添加分片来实现扩容。
如图所示,该模式有N个路由节点,N个配置节点,和N个数据节点,每个角色的作用如下:

ruoter: 路由节点。客户端的请求发到router,由router向config查询数据的元信息,然后将查询与写入请求分发到shard。
config: 配置节点。该节点的作用是记录对数据分片的规则,存储所有数据库元信息(路由、分片)的配置。
shard: 数据节点,真正存储数据的地方。