副本集
一.概述
MongoDB中的副本集是一组维护相同数据集的mongod服务。副本集由一个主节点和多个副本节点组成。主节点将数据的改变推送到副本节点上,在一定的延迟之后,每个MongoDB实例维护相同的数据。能够实现数据冗余,读写分离和自动故障转移。
MongoDB副本集可以用于对数据冗余备份,防止某台或某部分机器故障数据丢失,可以使用副本集进行数据恢复。副本集由一个主节点和多个副节点组成,可以实现读写分离,主节点仅负责写工作,副节点负责读工作,可以减轻主节点的压力,同时又有多个副节点提供读服务,实现负载均衡。且任意副节点宕机后也对整个服务不会产生毁灭性的影响。再配合自动故障转移,当主节点宕机后,再从副节点中选举一个新的主节点,实现整个服务的高可用性。
二、副本集角色
副本集有两种类型三种角色
1.两种类型
- 主节点类型:数据操作的主要连接点,可读写,但一般只进行写操作。
- 次要节点类型:数据冗余备份,提供读能力。或用于主节点掉线选举。
2.三种角色
- 主要成员:主要接收所有写操作,即主节点
- 副本成员:从节点通过复制操作以维护同主节点相同的数据库,只提供读服务。
- 仲裁成员:不存储数据副本,不提供读写服务,仅用于主要成员掉线后选举新的主要成员。
3.仲裁成员
在副本集中仲裁成员可以用于选举新的主要成员,事实上不使用仲裁成员,其他成员也都拥有重新选举新成员的能力。但也不是说仲裁成员毫无作用,当选举新主要成员是,票数一致若无仲裁成员,整个选举环节可能会卡在投票环节,仲裁成员可以用于解决这种问题。我们也可以不部署仲裁成员部署奇数个其他成员,但保不齐掉线几个变为偶数。最后仲裁成员的性价比很高,它不提供数据备份的功能,因此系统资源占用很少。
三、副本集操作
1.搭建
本地搭建副本集,配置3份配置文件,port分布配置27017(主节点),27018(从节点),27019(仲裁节点)。都给3份配置文件设置上副本集名,如:
然后分别用这3份配置文件启动3个mongodb服务,并使用mongosh指令连接27017端口的mongodb服务。主节点执行如下指令
从节点和仲裁节点执行如下指令
2.副本集读写
主节点写入
从节点读取
四、故障说明
1.从节点故障
不受影响,从节点恢复后同步数据。
2.主节点故障
从节点被选举为主节点,主节点恢复后变为从节点,同步数据。
3.仲裁节点 & 主节点故障
从节点无法选举为主节点,因为网络中不存在大多数节点。仲裁节点和主节点故障恢复后,触发重新选举。
4.仲裁节点 & 从节点故障
主节点降级为从节点,因为主节点无法得知是其他节点掉线了还是自己掉线,万一其他节点没有掉线会重新选举一个主节点,就会出现双主节点的情况,这种情况下若主节点所在网络不存在大多数节点会自动降级为从节点。当从节点和仲裁节点恢复,触发重新选举。
五、主节点选举
下面对选举简单介绍,如需要深入了解,自行查找资料。
1.选举条件
假设X是一个从节点,那么X会定时检测是否需要选举自己成为主节点。其检测内容包括:
- 是否集群中有其它节点认为自己是主节点?
- X节点自己是否有资格成为主节点?
只