一边搭建一边理解MongoDB副本集(副本集中的角色-下)

一边搭建一边理解MongoDB副本集(副本集中的角色-下)

作者:链上研发-175405
时间:2017-01-06

主节点选举

下面这三个节点的副本集 中,主节点不可达了。这触发了一次选择某一个从节点成为主节点的选举。

这里写图片描述

从节点

0优先级副本集成员

优先级为 0的从节点不会成为主节点。优先级为0的成员除了不能发起选举,这些节点的功能和普通从节点一致。一个优先级为0的节点维护一份数据集的拷贝,接受读请求,并在在选举中投票。把一个节点配置为0优先级去防止它成为主节点,通常在多数据中心部署中是有用的。

在一个有三个成员的副本集中,一个数据中心运行了主节点和一个从节点,次要数据中心运行了一个不能成为主节点的0优先级从节点。

这里写图片描述

0优先级节点作为备份

一个0优先级的成员可以作为备份。在一些副本集中,在合理的时间内去增加一个新的成员是不太可能的。一个保持最新数据集拷贝的备份成员就能够去替换那些不可达的成员。

在大多数情况下,你不需要把备份节点设为0优先级,但是在副本集中包含了不同硬件或地理位置的集群,0优先级的备份保证了有资格的成员成为主节点。把这个成员设置为0优先级它就不会成为主节点了,也可以使用隐藏节点达到这个目的。

如果你已经有了7个可以投票的成员,需要把其他成员设为不可投票。

0优先级成员和故障切换

当配置了0优先级成员,考虑潜在的故障切换情况,包括各种网络分区。总要保证你的主数据中心包含了大多数的投票成员和可以成为主节点的节点。

隐藏副本集成员

一个隐藏副本集成员维护了一份主节点数据集的拷贝,但是它对应用程序客户端是不可见的。隐藏的成员适用于副本集中的与其他成员不同的使用模式的工作负载。隐藏成员必须一直是0优先级的成员因此不可能成为主节点。db.isMaster()方法不会显示隐藏成员。但是隐藏成员是可以在选举中投票的。

在下面5个成员的副本集中,所有的四个从节点都拥有主节点数据集的拷贝,但是四个中的一个从节点是隐藏成员。

这里写图片描述

隐藏副本集行为
读操作

客户端不会把带有读偏好的读操作分发给隐藏节点。因此,这些成员除了接受基本的复制流量外没有其他流量。使用隐藏节点可以专注与报告和备份。延迟成员也应该是隐藏的。

在一个分片的集群中,mongos端不会影响隐藏成员。

投票

Hidden members may vote in replica set elections. If you stop a voting hidden member, ensure that the set has an active majority or the primary will step down.
隐藏成员可以在副本集选举中投票。如果你要关闭一个可以投票的隐藏成员,要保证这个复本集中还存活着大多数或主节点将要下线。

For the purposes of backups,
对于备份的意义:

  • 如果使用 MMAPv1 存储引擎, 您可以避免使用db.fsyncLock()和db.fsyncUnlock()操作停止隐藏成员,以刷新所有写入,并在备份操作期间锁定mongod实例。
  • 3.2版本的改变: db.fsyncLock()可以保证当MongoDB实例使用MMAPv1或WiredTiger存储引擎时数据文件不会变化,因此为创建备份提供了一致性。

     在之前的MongoDB版本,db.fsyncLock()不能保证WiredTiger存储引擎在底层备份的一致性。

延迟副本集成员

延迟副本集成员拥有副本集的数据拷贝。但是,一个延迟成员的数据反映出了先前的或者延迟的数据状态。比如,如果当前时间是09:52并且有一个成员延迟了一小时,那这个延迟成员没有08:52之后的数据操作。

因为延迟成员是一个对数据集“滚动的备份”或者是一个正在运行的“历史”快照,他们或许对恢复各种人类的误操作有帮助。比如一个延迟成节点可以从失败的应用升级和包括删除数据库和集合等误操作中恢复过来。

考量
延迟成员要求
  • 必须是0优先级成员。把优先级设置为0防止一个延迟成员成为主节点。
  • 应该是一个隐藏成员。防止应用从延迟成员中查询。
  • 在选举主节点时投票,如果 members[n].votes被设置为1。
延迟成员行为

延迟成员对源数据复制并应用操作有延迟。当对延迟的长短进行选择是,需要考虑延迟的长短:
- 必须大于等于你期望的维护窗口持续时间。
- 必须小于oplog的容量。

延迟节点在分片中

在分片集群中,延迟成员在均衡器启用时只有有限的功能。因为延迟成员延迟复制块迁移,如果在延迟窗口时间发生任何迁移,分片集群中的延迟成员对恢复到分片集群的先前状态是没有用的。

延迟成员例子

下面5个成员的副本集中,主节点和所有从节点都有数据集的拷贝。一个成员延迟应用操作3600秒(一个小时)。这个延迟成员既是隐藏成员又是0优先级成员。

这里写图片描述

监督者成员

监督者节点没有数据的拷贝并且不能成为主节点。副本集可以有多个监督者成员为主节点选举增加投票。监督者总是只有一个投票权,因此允许副本集拥有奇数个数投票成员而不需要增加额外复制数据的成员。

不要在运行主节点或从节点的系统上运行监督者节点。

监督者成员例子

例如,在下面的副本集中,一个监督者成员使得副本集拥有奇数个数的投票成员:

这里写图片描述

监督者成员安全
认证

当运行认证时,监督者成员与其他成员交换凭证来认证。MongoDB对认证进程加密。MongoDB认证交换是加密安全的。

监督者成员使用keyfiles来认证加入副本集。

通信

监督者成员与其他成员的通信只有:投票,心跳检测和配置数据。这些交换没有经过加密。

但是,如果你的MongoDB使用了TLS/SSL,MongoDB会加密与副本集成员的所有通信。

和所有的MongoDB组件一样,在可信环境中运行监督者成员。

作者:链上研发-175405
时间:2017-01-06

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值