从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
回滚的可能性增加了:pv0
members[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
写入之间确定优先级。