写在前面
本来打算是复习之前的知识的,不过看了一下,第一部分还有3节,所以今天继续,将第一部分学习完之后,再安排2天来集中复习,正好周末有大把时间 。
第六天
今天要学习《10 | 复制集机制及原理》,主要是关于高可用的理论知识,实现(1)主从结点复制;(2)主结点故障时,自动切换替换结点。MongoDB是原生支持高可用的
复制集的作用
- 数据分发:将数据从一个区域复制到另一个区域
- 读写分离:读写折分到不同的结点
- 异地灾备:中心结点故障时自动转移到灾备结点
典型复制集结构
- 由3个及以上据有投票权的结算构成
- 一个主结点,接受数据写入及进行投票
- 二个及以上从节点,从主结点读取数据及进行投票
- 不推荐使用2个数据结点+1个投票结点的形式
数据是如何复制的
- 主结点产生数据时(插入、修改、删除等等),向oplog数据集写入变动记录
- 从结点检测主结点oplog数据集,有变动时,读取变动到从结点,然后在从节点复现变动的所有操作。
通过选举完成数据恢复
- 具有投票权的结点两两之间会发送心跳信息,2秒一次
- 5次检测不生功时,认为结点失效
- 如果失效的是主结点,则从结点会选举出新的主结点
- 如是失效的是比结点,不会发起选举
- 选举是基于RAFT一致性算法实现,大多数投票结点存活的时候,才会发起选举
- 一个集群最多可以有50个结点,但只有7个有投票权的结点
影响选举的因素
- 必须有大多数的投票结点存活
-
被选举为主结点的必备条件
- 需要与大多数的结点连通
- 需要有较新的oplog
- 需要有较高的优选级(这个可通过参数配置)
复制结点常见选项
- 投票权(v参数):有此参数可以参与投票
- 优先级(priority参数):优先级越高,成为主结点的可能性越高。为0时,永远不会成为主结点。
- 隐藏(hidden参数):应用不能访问,但可以用来复制数据,可以参与投票,且优先级必须为0,即永远不成为主结点
- 延迟(slaveRelay参数):单位为秒,控制从主结点复制数据的时间延迟,否则是即时复制。将从结点更改较高延迟,可以在主结点数据删除或更改时,有回退数据的机会。
复制集注意事项
-
硬件
- 无论主从结点,建议采用一样的硬件配置
- 各结点之间保证硬件的独立,避免硬件故障时影响过多结点
-
软件
- 保证各结点间软件版本一致
- 增加从节点时,不会提升主结点性能,但可以分流读。建议采用分片方式处理性能的问题。
最后
今天的内容就这些,纯理论的讲解。明天是演练。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。