MongoDB复制集机制及节点选举原理

MongoDB复制集机制及节点选举原理

本文主要整理了MongoDB的复制集概念,并简单介绍了一下选举机制的原理。

MongoDB复制集的作用

MongoDB复制集的主要意义在于实现服务高可用。一个MongoDB复制集最多拥有7个具有投票权的从节点,每个从节点最多拥有7个子节点,再加上1个主节点。

复制集的实现主要依赖于两个方面的功能:

  • 数据写入时数据迅速复制到另一个独立节点上。
  • 在接受写入的节点发生故障时自动选举出一个新的替代节点。

在实现高可用的同时,复制集实现了其它几个附加作用:

  • 数据分发:将数据从一个区域复制到另外一个区域,减少另一个区域的读延时。
  • 读写分离:不同类型的压力分别在不同的节点上执行。
  • 异地容灾:当数据中心故障时快速地切换到异地,减少数据中心故障导致的损失。

典型复制集的结构

一个典型的复制集有三个以上具有投票权的节点组成,包括:

  • 一个主节点(PRIMARY): 接受写入操作和选举时投票。
  • 两个或多个从节点(SECONDARY):复制主节点上的新数据和选举时的投票 。

数据复制流程

当一个修改操作,无论是插入、更新还是删除,到达主节点时,他对数据的操作将被记录下来(经过一些必要的转换),这些记录称为oplog。从节点通过在主节点打开一个 tailable 游标不断地获取新进入主节点的oplog,并在自己的数据集合上进行复现回放,从而保持数据和主节点完全一致。

MongoDB选举流程

当数据库遭遇故障时,将通过选举来完成故障恢复。为实现选举功能,MongoDB是这样做的:

  • 正常状态时,具有投票权的节点之间两两互相发送心跳。当5次心跳未收到时将判断节点失联。
  • 如果失联的是主节点,从节点将发起选举,选出新的主节点;如果失联的是从节点,将不会发生选举。
  • 选举基于RAFT一致性算法实现,选举成功的必要条件是大多数投票节点存活。

影响选举的因素

整个集群必须有大多数节点存活,且被选举成为主节点的节点必须满足三个特征:

  • 能够和大多数节点建立连接
  • 具有交心的oplog
  • 具有较高的优先级(可以配置)

复制集节点常常会有如下配置选项:

  • 是否具有投票权:有投票权则参与投票
  • 优先级参数: 优先级越高的节点越优先在选举中成为主节点。如果设置一个节点的优先级为0,则该节点一定不会成为主节点。
  • 隐藏节点:此节点仅仅用作复制数据,对应用不可见。影藏节点可以具有投票权,但是其优先级一定为0.
  • 延迟参数:复制一段时间以前的数据,保持与主节点的时间差。常用于恢复数据。

复制集注意事项

  • 关于硬件
    • 因为正常的复制集节点都有可能成为主节点,他们的地位是一样的,因此硬件上的配置应当都一致。
    • 为了保证节点不会同时宕机,各节点使用的硬件必须具有独立性。
  • 关于软件
    • 复制集各节点软件版本必须一致,以避免出现不可预知的问题
  • 增加节点不会增加系统写的性能,反而会增加节点同步的开销。如果希望提高写的性能,可以考虑MongoDB的分片机制,当然这是另外一个话题了
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

邵政道

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值