1

写在前面

本来打算是复习之前的知识的,不过看了一下,第一部分还有3节,所以今天继续,将第一部分学习完之后,再安排2天来集中复习,正好周末有大把时间 。

第六天

今天要学习《10 | 复制集机制及原理》,主要是关于高可用的理论知识,实现(1)主从结点复制;(2)主结点故障时,自动切换替换结点。MongoDB是原生支持高可用的

复制集的作用

  1. 数据分发:将数据从一个区域复制到另一个区域
  2. 读写分离:读写折分到不同的结点
  3. 异地灾备:中心结点故障时自动转移到灾备结点

典型复制集结构

  1. 由3个及以上据有投票权的结算构成
  2. 一个主结点,接受数据写入及进行投票
  3. 二个及以上从节点,从主结点读取数据及进行投票
  4. 不推荐使用2个数据结点+1个投票结点的形式

image.png

数据是如何复制的

  1. 主结点产生数据时(插入、修改、删除等等),向oplog数据集写入变动记录
  2. 从结点检测主结点oplog数据集,有变动时,读取变动到从结点,然后在从节点复现变动的所有操作。

image.png

通过选举完成数据恢复

  1. 具有投票权的结点两两之间会发送心跳信息,2秒一次
  2. 5次检测不生功时,认为结点失效
  3. 如果失效的是主结点,则从结点会选举出新的主结点
  4. 如是失效的是比结点,不会发起选举
  5. 选举是基于RAFT一致性算法实现,大多数投票结点存活的时候,才会发起选举
  6. 一个集群最多可以有50个结点,但只有7个有投票权的结点

image.png

影响选举的因素

  1. 必须有大多数的投票结点存活
  2. 被选举为主结点的必备条件

    1. 需要与大多数的结点连通
    2. 需要有较新的oplog
    3. 需要有较高的优选级(这个可通过参数配置)

复制结点常见选项

  1. 投票权(v参数):有此参数可以参与投票
  2. 优先级(priority参数):优先级越高,成为主结点的可能性越高。为0时,永远不会成为主结点。
  3. 隐藏(hidden参数):应用不能访问,但可以用来复制数据,可以参与投票,且优先级必须为0,即永远不成为主结点
  4. 延迟(slaveRelay参数):单位为秒,控制从主结点复制数据的时间延迟,否则是即时复制。将从结点更改较高延迟,可以在主结点数据删除或更改时,有回退数据的机会。

image.png

复制集注意事项

  1. 硬件

    1. 无论主从结点,建议采用一样的硬件配置
    2. 各结点之间保证硬件的独立,避免硬件故障时影响过多结点
  2. 软件

    1. 保证各结点间软件版本一致
  3. 增加从节点时,不会提升主结点性能,但可以分流读。建议采用分片方式处理性能的问题。

最后

今天的内容就这些,纯理论的讲解。明天是演练。


xiaopohair
68 声望26 粉丝

把这辈子活的热气腾腾!