参考 > 发行说明 > MongoDB 4.0发行说明 > 将副本集升级到4.0
在本页面
重要
在尝试进行任何升级之前,请熟悉本文档的内容。
如果您需要有关升级到4.0的指导,MongoDB提供主要版本升级服务,以确保平稳过渡而不会中断您的MongoDB应用程序。
升级时,请考虑以下事项:
要将现有的MongoDB部署升级到4.0,必须运行3.6系列发行版。
要从3.6系列之前的版本升级,必须先升级主要版本,直到升级到3.6系列。例如,如果运行的是3.4系列,则必须先 升级到3.6, 然后才能升级到4.0。
在开始升级之前,请参阅MongoDB 4.0中的兼容性更改文档,以确保您的应用程序和部署与MongoDB 4.0兼容。开始升级之前,请解决部署中的不兼容性。
在升级MongoDB之前,请务必先在临时环境中测试应用程序,然后再将升级部署到生产环境中。
在开始升级之前,请确保没有正在进行任何初始同步。在进行初始同步的同时执行升级将导致重新启动初始同步。
重新启动副本集时,以下过程包括命令行选项
--bind_ip
或配置选项
net.bindIp
。
从MongoDB 3.6开始,必须在不同主机上运行副本集成员或远程客户端连接到部署时指定选项。如果所有成员都在同一主机上运行并且所有客户端都在主机本地,则省略。
从MongoDB 3.6开始,"majority"
默认情况下,MongoDB启用对读取关注的支持
。
从3.6.1和MongoDB 4.0.3开始,您可以禁用读取关注,
"majority"
以防止存储高速缓存压力使具有三级副本集(具有主二级仲裁器(PSA)体系结构)或分片群集(具有三人PSA分片。
禁用"majority"
读取关注会禁用对MongoDB 4.0及更早版本的变更流的支持。对于MongoDB 4.2+,禁用读取关注"majority"
不会影响更改流的可用性。
有关更多信息,请参见禁用多数阅读关注。
MongoDB 4.0引入了新的十六进制编码的字符串更改流 恢复令牌:
恢复令牌_data
类型取决于MongoDB版本,在某些情况下,取决于更改流打开/恢复时的功能兼容性版本(fcv)(即,fcv值的更改不会影响已打开的更改流的恢复令牌。 ):
MongoDB版本 | 功能兼容版本 | 恢复令牌_data 类型 |
---|---|---|
MongoDB 4.0.7及更高版本 | “ 4.0”或“ 3.6” | 十六进制编码的字符串(v1 ) |
MongoDB 4.0.6及更早版本 | “ 4.0” | 十六进制编码的字符串(v0 ) |
MongoDB 4.0.6及更早版本 | “ 3.6” | BinData |
MongoDB 3.6 | “ 3.6” | BinData |
从MongoDB 3.6升级到MongoDB 4.0.7或更高版本时
从MongoDB 3.6升级到MongoDB 4.0.7或更高版本时,客户端可能会v1
在连接到尚未更新的成员(即仅接受BinData恢复令牌)并尝试失败时尝试使用新的恢复令牌恢复更改流。在这种情况下,客户端必须等待升级完成才能恢复更改流。
升级后,如果您以后决定降级到MongoDB 3.6,以恢复更改流,则客户端可以在3.6部署中使用升级前的恢复令牌(如果有)。否则,客户将需要开始新的变更流。
所有副本集成员必须运行版本3.6。要从3.4系列或更早版本升级副本集,请首先 将副本集的所有成员升级到最新的3.6系列发行版,然后按照从MongoDB 3.6升级到4.0的过程进行操作。
MONGODB-CR
从版本4.0开始,MongoDB删除了对不赞成使用的MongoDB Challenge-Response(MONGODB-CR
)身份验证机制的支持。
如果您的部署中有存储在MONGODB-CR
架构中的用户凭据,则在升级到版本4.0 之前,必须先升级到Salted Challenge Response Authentication机制(SCRAM) 。有关升级到SCRAM的信息,请参阅
升级到SCRAM。SCRAM
也可以看看
pv0
副本集¶从版本4.0开始,MongoDB删除不推荐使用的副本集协议版本0 pv0
。
在升级到MongoDB 4.0之前,您必须升级到pv1
。
要升级到pv1
,请将mongo
外壳连接到主副本集,然后执行以下操作序列:
为了减少w:1
回滚的可能性,您还可以将副本集重新配置为更高的
settings.catchUpTimeoutMillis
设置。
有关的详细信息pv1
,请参阅
副本集协议版本。
MongoDB 4.0删除了对不赞成使用的主从复制的支持。在升级到MongoDB 4.0之前,如果您的部署使用主从复制,则必须升级到副本集。
要将主从复制转换为副本集,请参阅 将主从部署转换为副本集。
$isolated
MongoDB放弃了对$isolated
运营商的支持。如果您已有一个包含$isolated
运算符的局部索引或一个包含运算符的视图,请$isolated
在升级之前重新创建索引或视图,而在定义中不包含运算符。
3.6副本集必须
featureCompatibilityVersion
设置为3.6
。
为确保副本集的所有成员都
featureCompatibilityVersion
设置为3.6
,请连接到每个副本集成员并检查featureCompatibilityVersion
:
所有成员都应返回包含的结果
。"featureCompatibilityVersion" : { "version" : "3.6" }
要设置或更新featureCompatibilityVersion
,请在主服务器上运行以下命令。大多数数据承载成员必须可用:
有关更多信息,请参见
setFeatureCompatibilityVersion
。
确保没有副本集成员处于ROLLBACK
或
RECOVERING
状态。
您可以使用“滚动”升级从MongoDB 3.6升级到4.0,以通过在其他成员可用时分别升级成员来最大程度地减少停机时间。
一次升级 一个副本集的辅助成员:
关闭mongod
实例,然后用4.0二进制文件替换3.6二进制文件。
重新启动成员。
注意
--nojournal
选项或使用WiredTiger存储引擎的副本集成员。storage.journal.enabled:
false
--noIndexBuildRetry
或者storage.indexBuildRetry
一个
mongod
实例是副本集的一部分。将mongo
外壳连接到主要节点,并用于
rs.stepDown()
降低主要节点并强制选择新的主要节点。
当rs.status()
显示主节点已卸任并且另一成员已PRIMARY
处于状态时,请升级已卸除的主抵押:
关闭逐步降低的主数据库,然后用mongod
4.0二进制文件替换
二进制文件。
重新启动成员。
注意
--nojournal
选项或使用WiredTiger存储引擎的副本集成员。storage.journal.enabled:
false
--noIndexBuildRetry
或者storage.indexBuildRetry
一个
mongod
实例是副本集的一部分。此时,您可以运行4.0二进制文件,而没有与3.6不兼容的4.0 功能。
要启用这些4.0功能,请将功能兼容版本(FCV
)设置为4.0。
小费
启用这些向后不兼容的功能可能会使降级过程复杂化,因为在降级之前必须删除所有持久的向后不兼容的功能。
建议在升级后,允许您在不启用这些功能的情况下运行部署,并且要在预热期内确保降级的可能性最小。如果您确信降级的可能性很小,请启用这些功能。
小费
确保没有正在进行的初始同步。setFeatureCompatibilityVersion
在进行初始同步时运行
命令将导致重新启动初始同步。
在主数据库上setFeatureCompatibilityVersion
,在admin
数据库中运行命令:
此命令必须执行对内部系统集合的写入。如果由于某种原因该命令未成功完成,则可以安全地在主数据库上重试该命令,因为该操作是幂等的。