从4.0版开始,MongoDB仅支持副本集协议版本1(pv1)。pv1是使用MongoDB 3.2或更高版本创建的所有新副本集的默认值。
w:1写¶使用pv1,您可以
catchUpTimeoutMillis在快速故障转移和保留w:1写入之间确定优先级。
w: "majority"写¶pv1保证保留已确认的写入。w:
"majority"
pv1 在MongoDB 3.2或更高版本中可用,并且是使用3.2或更高版本创建的所有新副本集的默认设置。
对于以下版本的MongoDB,
与带有仲裁器的副本集相比(在MongoDB 4.0+中不再支持)pv1,w:1回滚的可能性增加了pv0:
MongoDB的另一版本的支持pv1,pv1不增加的可能性w:1为副本集与仲裁者回滚。
对于以下MongoDB版本,
与具有不同设置的副本集相比(在MongoDB 4.0+中不再支持)
pv1,w:1回滚的可能性增加了:pv0members[n].priority
MongoDB的另一版本的支持pv1,pv1不增加的可能性w:1回滚了副本集有不同members[n].priority的设置。
pv1不使用否决权。个别成员可以在特定选举中投票赞成或反对候选人,但不能单方面否决(中止)选举。
在某些情况下,副本集中的两个节点可能会短暂地认为它们是主要节点,但至多,其中一个节点将能够完成写操作而无需担心。可以完成
写入操作的节点是当前主节点,另一个节点是以前的主节点,由于网络分区,该主节点尚未意识到其降级。发生这种情况时,尽管已请求读取首选项,但连接到前主数据库的客户端可能仍会观察到过时的数据
,并且对前主数据库的新写入最终将回滚。{ w:
"majority" }{ w: "majority" }primary
pv1使用术语的概念。这样可以更快地检测到同时存在的初选,并可以在短时间内成功进行多次选举。
pv1尽最大努力尝试使具有最高priority可用呼叫的辅助节点进行选举。这可能导致背对背选举,因为具有较高优先级的合格成员可以进行选举。
但是,在MongoDB 3.6+(以及MongoDB 3.4.2+和3.2.12+)中,用于pv1:
从4.0版开始,MongoDB仅支持副本集协议版本1(pv1)。
但是,MongoDB 3.2到MongoDB 3.6支持副本集协议版本1和协议版本0。
在通过MongoDB 3.6更改MongoDB 3.2的协议版本之前,请确保至少有一个oplog条目(从当前协议版本生成)已从主服务器复制到所有辅助服务器。要进行检查,请在每个辅助服务器上检查从optimes.lastCommittedOpTime.t返回的字段
rs.status()。例如,将mongo
外壳连接到每个辅助服务器并运行:
0,t则等于-1。1,t则大于-1。一旦确认至少有一个oplog条目(使用当前协议版本)已复制到所有辅助目录,就可以更改协议版本。
要更改副本集协议版本,请rs.reconfig使用new 重新配置()副本集
protocolVersion。例如,要升级到pv1,将mongo外壳连接到当前的主外壳并执行以下操作序列:
您可以catchUpTimeoutMillis用来在更快的故障转移和保留w:1写入之间确定优先级。