(1.3)mongodb RS,mongodb复制集
【1】mongodb RS 介绍
(1.1)Replicateset 复制集介绍
Mongodb复制集由一组Mongod实例(进程)组成,包含一个Primary节点和多个Secondary节点;
Mongodb Driver(客户端)的所有数据都写入Primary,Secondary从Primary同步写入的数据,以保持复制集内所有成员存储相同的数据集,提供数据的高可用。
下图(图片源于云栖社区)是一个典型的Mongdb复制集,包含一个Primary节点和2个Secondary节点。
Primary 中有 oplog,对比mysql的binlog,但mongodb 的 oplog 是存表的;存在如下库:
local库:本地预留库,存储关键日志(oplog,类似于mysqlbinlog)
如上图,注意 Driver 驱动会自动识别,实现读写分离(需要配置),自动寻找故障转移后的新主;
新从节点加入,无需任何操作,会自动同步一份完整数据过去;
MongoDB复制集具有如下四个特点:
1.主是唯一的,但不是固定的。
整个复制集中只有一个主节点,其余为从节点或选举节点,但是因为MongoDB具有自动容灾的功能,所以当唯一的主节点发生宕机时会从从节点的Priority参数不为0当中选举一个为主节点,所以说主是唯一的,但不是固定的。
2.由大多数据原则保证数据的一致性。
即MongoDB复制集内投票成员(参数Vote不为0的其他成员具有选举权,在2.6版本后不能设置Vote大于1,即只能投票一次)数量为N,则大多数为 N/2 + 1;
当复制集内存活成员数量不足大多数时,整个复制集将无法选举出Primary,复制集将无法提供写服务,处于只读状态。通常建议将复制集成员数量设置为奇数。
3.从库无法写入。
MongoDB复制集中只有主节点可以Writes,主节点和从节点可以Read。
4.相对于传统的主从结构,复制集可以自动容灾。
即当某个主节点宕机后会自动从从节点(Priority大于0的从节点)中选举出一个作为新的主节点,而某个从节点宕机后能继续正常工作。
(1.2)复制集节点介绍
MongoDB按功能可分为主节点、从节点(隐藏节点、延时节点、“投票”节点)和选举节点。
节点名 说明
{1}主节点(Primary) :可以提供读Writes/Read的节点,整个复制集中只有一个主节点。
{2}隐藏节点(Hidden) :提供Read并对程序不可见的节点。
{3}延时节点(Delayed) :提供Read并能够延时复制的节点。
{4}“投票”节点(Priority) :提供Read并具有投票权的节点。
{5}选举节点(Arbiter) :Arbiter节点,无数据,仅作选举和充当复制集成员。又成为投票节点。
详细解释:
??Primary节点:复制集通过replSetInitiate命令(或mongo shell的rs.initiate())进行初始化,初始化后各个成员间开始发送心跳消息,并发起Priamry选举操作,获得『大多数』成员投票支持的节点,会成为Primary,其余节点成为Secondary。
??Secondary节点:正常情况下,复制集的Seconary会参与Primary选举(自身也可能会被选为Primary),并从Primary同步最新写入的数据,以保证与Primary存储相同的数据。Secondary可以提供读服务,增加Secondary节点可以提供复制集的读服务能力,同时提升复制集的可用性。另外,Mongodb支持对复制集的Secondary节点进行灵活的配置,以适应多种场景的需求。
??Arbiter节点:Arbiter节点只参与投票,不能被选为Primary,并且不从Primary同步数据。比如你部署了一个2个节点的复制集,1个Primary,1个Secondary,任意节点宕机,复制集将不能提供服务了(无法选出Primary),这时可以给复制集添加一个Arbiter节点,即使有节点宕机,仍能选出Primary。Arbiter本身不存储数据,是非常轻量级的服务,当复制集成员为偶数时,最好加入一个Arbiter节点,以提升复制集可用性。
??Priority节点:默认为1,Priority参数设置范围在0-1000的整数值。Priority0节点的选举优先级为0,永远不会被选举为Primary。
??Vote节点:Vote默认为1,Vote参数的值在2.6版本后只能设置为0或1。Mongodb 3.0里,复制集成员最多50个,参与Primary选举投票的成员最多7个,其他成员的vote属性必须设置为0,即不参与投票。Vote设置为0时永远没有投票权。
??Hidden节点:Hidden节点不能被选为主(因为Priority为0),并且对Driver不可见。因Hidden节点不会接受Driver的请求,可使用Hidden节点做一些数据备份、离线计算的任务,不会影响复制集的服务。
??Delayed节点:delayed的配置受到opolg的影响。Delayed节点必须是Hidden节点,并且其数据落后与Primary一段时间(可配置,比如1个小时)。因Delayed节点的数据比Primary落后一段时间,当错误或者无效的数据写入Primary时,可通过Delayed节点的数据来恢复到之前的时间点。
【参考文档】
【1】部分转自:https://blog.csdn.net/qq_24598601/article/details/81150614