mongodb笔记之--副本集相关概念

选举机制

当一个备份节点无法与主节点连通时,它就会联系其他的副本集成员将自己选举为主节点。其他成员会做几项合理性的检查:

  • 自身是否能够与主节点连通?
  • 希望被选举为主节点的备份节点的数据是否最新?
  • 有没有其他更高优先级的成员可以被选举为主节点?

如果被要求被选举为主节点的成员能够得到副本集中"大多数"成员的投票,它就会成为主节点。

选择仲裁者

Mongodb支持一种特殊类型的成员,称为仲裁者(arbiter).
作用
仲裁者的唯一作用就是参与选举。仲裁者并不保存数据,也不会为客户端提供服务. 它只是为了帮助具有两个成员的副本集能够满足"大多数"这个条件.

如果节点数量是奇数,那就不需要仲裁者。
如歌可能,进可能在副本集汇总使用奇数个数据成员,而不要使用仲裁者。

//方式一  通过rs.addArb()将仲裁者添加到副本集
rs.addArb("server-5:27017");
//方式二
rs.add({"_id":4,"host":"server-5:27017","arbiterOnly":true})

成员一旦以仲裁者的身份添加到副本集中,它永远就只能是仲裁者。

优先级

优先级用于表示一个成员渴望成为主节点的程度。
优先级的取值范围可以是0~100,默认是1.将优先级设为0有特色含义:优先级为0的成员永远不能够成为主节点。这样的成员叫被动成员。

拥有最高优先级的成员会优先选举为主节点(前提条件一是它能够得到集合中"大多数"的赞成票,二是它的数据必须是最新的)

//向副本集中添加一个优先级为3.5的成员
rs.add({"_id":4,host:"server-4:27017","priority":3.5})

隐藏成员

客户端不会向隐藏成员发送请求,隐藏成员也不会作为复制源。
配置隐藏成员的时候需要指定hidden:true.
只有优先级为0的成员才能被隐藏(主节点不能隐藏)

延迟备份节点

数据可能会因为人为错误而遭受毁灭性的破坏:可能有人不小心删除了主数据库,或者刚上线的新版应用程序有一个严重bug,把所有数据都变成了垃圾。 为了防止这类问题,可以使用slaveDelay设置一个延迟的备份节点。

延迟备份节点的数据会比主节点延迟指定的时间(单位是秒),这样设置是为了万一不小心毁了主集合,还可以将数据从先前备份中恢复过来。

延迟节点要求成员的优先级是0.

同步

复制用于在多台服务器之间备份数据。
Mongodb的复制功能是使用操作日志oplog实现的。操作日志包含了主节点的每一次写操作。

oplog是一个固定集合。

每个节点都维护着自己的oplog,记录着每一次从主节点复制数据的操作。所以 每个成员都可以作为同步源提供给其他成员使用。

复制操作的过程是先复制数据在写入oplog,所以,备份节点可能会在已经同步过的数据上再执行复制操作,Mongodb在设计的时候就考虑到这种情况:将oplog中的同一个操作执行多次,与只执行一次的效果是一样的,

初始化同步

副本集中的成员启动后,会检查自身状态,确定是否可以从某个成员那里进行同步。这个选择以及同步的过程就是初始化同步。

初始化同步的几个步骤

1.这个成员会删除自己的所有数据库文件。
2.将同步源的所有记录全部复制到本地
3.进入oplog同步的第一步,克隆过程中的所有操作都会被记录到oplog中。
4.进入oplog同步的第二步,将第一个oplog同步中的操作记录下来。
5.创建索引。

心跳

每个成员都需要知道其他成员的状态:哪个是主节点?哪个可以作为同步源?哪个挂掉了?为了维护集合的最新视图,每个成员每隔2秒钟就会向其他成员发送一个心跳请求(heartbeat request)。

心跳最重要的功能之一就是让主节点知道自己是否满足集合"大多数"的条件。如果主节点不再得到"大多数"服务器的支持,它就会退位,变成备份节点。

各个成员会通过心跳将自己的当前状态告诉其他成员。

成员状态
  • startup
    成员刚启动时就处于这个状态;
    在这个状态下MongoDB会尝试加载成员的副本集配置。配置加载成功后,进入startup2状态。
  • startup2
    整个初始化同步过程都处于这个状态
  • recovering
    这个状态表明成员运转正常,但暂时还不能处理读取请求。
  • arbiter
    在正常的操作中,仲裁者应该始终处于ARBITER状态
  • down
    如果一个正常运行的成员变得不可达,它就处于DOWN状态
  • unknown
    如果一个成员无法到达其他任何成员,其他成员就无法知道它处于什么状态,会将其报告为unknown状态.
  • removed
    当成员被移出副本集时,它就处于这个状态
  • rollback
    回滚状态
  • fatal
    如果一个成员发生了不可挽回的错误,也不再尝试恢复正常的话,它就处于FATAL状态。

选举

当一个成员无法到达主节点时,它就会向它能到达的所有成员发送通知,申请被选举为主节点。
如果这个成员不符合候选人要求,其他成员可能会知道相关原因:
这个成员的数据落后于副本集或者已经有一个运行中的主节点,在这些情况下,其他成员不会允许进行选举。

如果没有反对的理由,其他成员就会对这个成员进行选举投票。

如果这个成员得到副本集中"大多数"赞成票,它就选举成功,会转换到主节点状态。
如果达不到"大多数"的要求,那么选举失败,任然是备份节点。

选举过程会有20秒的限时,如果选择打成平局,每个成员都需要等待30秒后才能开始下一轮选举。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值