Mongodb复制集概念及相关参数

一、复制集的作用

  (一)复制集的主要意义在于实现服务的高可用

  (二)他的视线依赖于两个方面的功能

  (1)数据写入时将数据迅速复制在另一个独立节点上

  (2)再接受写入的节点发生故障时自动选举出一个新的替代节点

  (三)在实现高可用的同时,复制集实现了其他的几个附加作用

  (1)数据分发。将数据从一个区域复制到另一个区域,减少另一个区域的读延迟(相当于在其他区域创建了一个从节点,方便其他区域读)

  (2)读写分离。不同的类型的压力分别在不同的节点上执行

  (3)异地容灾。在数据中心故障时候快速切花到异地

二、典型复制集结构

  (一)一个主节点(promary):接受写入操作和选举时投票(一半以上)

  (二)两个(或多个)从节点(secondary):复制主节点上的新数据和选举时投票 (从节点只能读)

  (三)不推荐使用Arbiter(投票节点)。(很多时候会多出一个无数据节点作为投票节点。防止出现投票主机出现偶数的现象)推荐使用三数据节点

三、数据是如何复制

  (一)当一个修改操作,无论是插入、更新、删除。达到主节点时,他对数据的操作被记录下来(经过一些必要的转换),这些记录被称为oplog(在mongo中是一个集合)。

  (二)从节点通过在主节点上打开一个tailable游标不断获取新进入主节点的oplong。并在自己的数据上回放。以此保持跟主节点数据一致

四、通过选举完成故障恢复

  (一)具有投票权的节点之间两两互相发送心跳(默认每两秒发送一次)

  (二)当5次心跳未收到时判断为节点失联

  (三)如果失联的是主节点,从节点会发起选举,选出新的主节点

  (四)如果失联的从节点则不会产生新的选举

  (五)选举基于RAFT一致性算法实现,选举成功的必要条件是大多数投票节点存活

  (六)复制集中最多可以有50个节点但是具有选举全的节点最多有7个

五、影响选举的因素

  (一)整个集群必须有大多数节点存活

  (二)没选举的主节点的节点必须

  (1)能够与多数节点建立连接  

  (2)具有较新的oplog(数据比较多)

  (3)具有较高的优先级(如果有配置)

六、常见选项

  (一)复制集节点有以下常见的选项

  (1)是否具有投票权(v参数):有则参与投票。默认都具有

  (2)优先级(priority参数)优先级越高的节点越优先称为主节点。优先级为0的无法成为主节点

  (3)隐藏(hidden参数)复制数据,但是对应用不可见。隐藏节点可以具有投票权。但是优先级必须为0(可以作为备份数据,有时候不需要参数据的操作和业务程序的服务)

  (4)延迟(slaveDelay参数)复制N秒钟前的数据保持与主节点的时间差

posted @ 2022-04-15 15:52  zsh~  阅读(128)  评论(0编辑  收藏  举报