mongodb_Replica_Set_Deployment_Architectures

策略

成员数量

最大投票成员:

一个复制集群最多可以有50个成员,但是最多只能有7个可投票成员。

成员数:

成员数应为奇数,偶数集群应该添加仲裁(Arbiter)节点。

仲裁节点不保存数据,占用资源更少。

容错:

成员数 可进行投票的最小成员数量 可容忍错误数
3 2 1
4 3 1
5 3 2
6 4 2

特殊功能成员

hidden和delayed成员,可实现特殊功能,如备份或者报警。

影响选举的因素

选举协议

在3.2之后,mongodb使用protocolVersion:1作为选举协议。

心跳

每个成员每两秒会发送一个心跳请求到所有成员,如果10秒内没有回应,会被发送心跳的成员标记为不可达。

成员优先级

就算复制集群已经有主节点后,选举算法也会尽可能的让优先级最高的从节点发起新的选举。
拥有高优先级的从节点相比那些优先级较低的,会更频繁的提出选举请求,并且更有可能被选举为主节点。

低优先级从节点也有可能被选举为主节点,但是高优先级的从节点会很快发出新的请求,从而代替低优先级的节点成为主节点。

网络隔离。

当主节点与少数节点被网络隔离时,主节点会主动退位,变为从节点。同时,一个能与大部分节点连接的节点会发起投票从而选出新的主节点。

否决

ProtocolVersion 1中取消了否决票,详见Vetos

投票成员

复制集群通过members[n].votes属性与成员状态state来判断一个成员是否可以参与投票。

Vote:3.2:

  • 不可投票的成员votes为0,priority为0,
  • priority为0的成员votes不能为0.

State:
只有一下状态的成员可以参与投票。

  • PRIMARY
  • SECONDARY
  • RECOVERING
  • ARBITER
  • ROLLBACK

跨数据中心部署。

官方建议将节点部署在不同的数据中心,以防止核弹摧毁数据中心。