自管理副本集协议版本
MongoDB仅支持副本集协议版本1 ( pv1
)。 pv1
是所有新副本集的默认。
保留写入
w:1
写入
借助pv1
,您可以使用catchUpTimeoutMillis
在更快的故障转移和保留w:1
写入之间确定优先级。
w: "majority"
写入
pv1
保证已确认的w:
"majority"
写入得以保存。
可用性
pv1
在MongoDB 3.2或更高版本中可用,并且是所有新副本集的默认设置。
否决
pv1
不使用否决权。 个人成员可以在特定选举中投票支持或反对候选节点,但不能单方面否决(中止)选举。
检测并行主节点
在某些情况下,副本集中的两个节点可能会暂时认为它们是主节点,但最多只能有其中一个节点能够完成具有{ w:
"majority" }
写入关注的写入操作。可以完成{ w: "majority" }
写入操作的节点是当前主节点,另一个节点是尚未识别其降级(通常是由于网络分区)的前主节点。发生这种情况时,尽管已请求读取偏好primary
,但连接到前主节点的客户端可能会观察到过时数据,并且对前主节点的新写入操作最终将回滚。
pv1
使用术语的概念。 这样可以更快地检测到同时出现的主节点,并在短时间内成功进行多次选举。
背靠背选举
pv1
会“尽最大努力”尝试让具有最高可用priority
的从节点发起选举。 这可能会导致连续选举,因为具有较高优先级的合格成员可以召集选举。
但是,对于pv1
:
优先级选举仅限于较高优先级的节点距离当前主节点在 10 秒之内的情况。
如果仲裁节点检测到健康主节点的优先级等于或高于候选节点的优先级,则会在选举中投反对票。
double投票
pv1
防止一名成员在召集选举时重复投票。 这是通过使用术语来实现的。