首页 > 代码库 > Mongodb副本集和分片的概念

Mongodb副本集和分片的概念

副本集(Replica Set):

通俗的说,副本集就是集群,主从复制,读写分离,故障切换。

副本集是Mongodb原来的主从模式的升级版本,官方已经不再推荐使用主从模式。

MongoDB的副本集与主从有所不同,主从在主机宕机后所有服务将停止,而副本集在主机宕机后,副本会接管主节点成为主节点,不会出现宕机的情况。

mongodb的复制至少需要两个节点。其中一个是主节点,负责处理客户端请求,其余的都是从节点,负责复制主节点上的数据。

mongodb各个节点常见的搭配方式为:一主一从、一主多从。

主节点记录在其上的所有操作oplog,从节点定期轮询主节点获取这些操作,然后对自己的数据副本执行这些操作,从而保证从节点的数据与主节点一致。

MongoDB复制结构图如下所示:

技术分享

Ps:这张图中读写都是从主节点,其实可以设置读操作走从节点,但是写入操作只能是在主节点上。

技术分享

副本集特征:

  • N 个节点的集群
  • 任何节点可作为主节点
  • 所有写入操作都在主节点上
  • 自动故障转移
  • 自动恢复

 

分片(Sharding)

 

Mongodb里面存在另一种集群,就是分片技术,可以满足MongoDB数据量大量增长的需求。

分片是将数据拆分后分发到各个节点上,所以它的各个节点上的数据是不一样的,这是跟副本集最大的差别。

分片好处之一是将数据拆分到不同节点,这样可以减少写的压力。

MongoDB存储海量的数据时,一台机器可能不足以存储数据,也可能不足以提供可接受的读写吞吐量。这时,我们就可以通过在多台机器上分割数据,使得数据库系统能存储和处理更多的数据。

下图展示了在MongoDB中使用分片集群结构分布:

技术分享

上图中主要有如下所述三个主要组件:

  • Shard:

    用于存储实际的数据块,实际生产环境中一个shard server角色可由几台机器组个一个replica set承担,防止主机单点故障

  • Config Server:

    mongod实例,存储了整个 ClusterMetadata,其中包括 chunk信息。

  • Query Routers:

    前端路由,客户端由此接入,且让整个集群看上去像单一数据库,前端应用可以透明使用。

 

对于副本集和分片 暂时只了解概念和原理即可 不深入学习。

 

Mongodb副本集和分片的概念