MongoDB副本集概述,副本集是什么?有什么用?

时间:2024-05-20 19:32:15

MongoDB 副本集概述

一、为什么要使用副本集?

在了解副本集之前,我们先来聊聊副本集的对立面——单机服务器存在的问题

在学习MongoDB时,我们一般都只需要启动一个 Mongod服务,也就是只有一个MongoDB服务器。这样用来学习是没有问题,但用在生产环境上却是万万不可、风险极高的:如果单机服务器出现了崩溃、网络故障、或者硬件磁盘损坏等问题而导致不可访问了,我们的数据库将至少罢工一段时间,严重时可能永远都无法恢复。这将导致严重的生产事故!!!

主从复制和副本集都是为了解决这种问题而存在的,现如今已经很少使用主从复制,都是采用副本集的方式。本文后面会简单讲解一下副本集和主从复制的区别。

二、副本集是什么?有什么用?有哪些成员?

副本集是一组维护相同数据的Mongod服务。

副本集由多个服务组成,包含一个主服务器/主节点(primary)负责处理客户端请求,以及若干个副服务器/备份节点(secondary)负责保存主服务器的数据副本。如果主服务器崩溃了,副本集通过其主节点选举机制,可以自动将某个备份节点升级成为主节点。这样,就可以避免因主节点服务器不可访问而影响用户使用。(这种机制被称为为自动故障转移)。

副本集的成员包含一个主节点和若干个备份节点,有一只特殊的备份节点叫作“仲裁者”,仲裁者不会备份数据,只会在选举主节点时参与投票。(副本集的选举机制十分有趣,我会另写一篇博文来讲解)。

需要注意的是:

  1. 单台服务器可以执行的请求,主节点都可以执行(读、写、执行命令、创建索引等)。
  2. 备份节点不能执行写操作,默认也不能执行读操作。但是通过在备份节点上显式执行setSlaveOk命令之后,就可以从备份节点上读取数据。

副本集的成员关系如图:
MongoDB副本集概述,副本集是什么?有什么用?

三、副本集与主从复制的区别

主从复制和副本集最大的区别就是副本集没有固定的“主节点”;整个集群会选出一个“主节点”,当其挂
掉后,又在剩下的从节点中选中其他节点为“主节点”,副本集总有一个活跃点(主、primary)和一个或多
个备份节点(从、secondary)。