参考 > 发行说明 > MongoDB 4.0发行说明 > 将4.0分片平均降级到3.6
在尝试任何降级之前,请熟悉本文档的内容。
升级到4.0后,如果需要降级,我们建议降级到最新的补丁程序版本3.6。
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 |
v0
令牌。可选,但推荐。 创建数据库的备份。
在降级二进制文件之前,您必须降级功能部件兼容版本并删除所有与3.6或更早版本不兼容的 4.0功能,如下所述。只有featureCompatibilityVersion
将设置为时,才需要执行这些步骤
"4.0"
。
降级featureCompatibilityVersion
到"3.6"
。
该setFeatureCompatibilityVersion
命令执行对内部系统集合的写操作,并且是幂等的。如果由于某种原因该命令未成功完成,请在mongos
实例上重试该命令
。
为了确保分片群集的所有成员都反映更新的内容
featureCompatibilityVersion
,请连接到每个分片副本集成员和每个配置服务器副本集成员,然后检查
featureCompatibilityVersion
:
小费
对于已启用访问控制的分片群集,要对分片副本集成员运行以下命令,您必须以分片本地用户身份连接到该成员。
所有成员应返回的结果包括:
如果有任何成员返回featureCompatibilityVersion
包含version
值"4.0"
或targetVersion
字段的,请"3.6"
在继续操作之前等待该成员反映版本。
有关返回featureCompatibilityVersion
值的更多信息,请参见View FeatureCompatibilityVersion。
删除所有与4.0 不兼容的持久功能。例如,如果您定义了使用4.0查询功能(例如聚合转换运算符)的任何视图定义,文档验证器和部分索引过滤器,则必须将其删除。
如果您的用户只有SCRAM-SHA-256
凭据,则应SCRAM-SHA-1
在降级之前为这些用户创建凭据。要更新仅具有SCRAM-SHA-256
凭据的用户,请
db.updateUser()
使用mechanisms
设置为SCRAM-SHA-1
only和pwd
设置为password运行:
警告
在继续进行降级过程之前,请确保所有成员(包括分片群集中的延迟副本集成员)均反映出先决条件更改。也就是说,featureCompatibilityVersion
在降级之前,请检查每个节点的
和并删除不兼容的功能。
注意
如果您运行的MongoDB 4.0 authenticationMechanisms
包含SCRAM-SHA-256
,请SCRAM-SHA-256
在使用3.6二进制文件重新启动时省略。
使用软件包管理器或手动下载,可获得3.6系列中的最新版本。如果使用程序包管理器,请为3.6二进制文件添加新的存储库,然后执行实际的降级过程。
升级到4.0后,如果需要降级,我们建议降级到最新的补丁程序版本3.6。
将mongo
外壳连接到分片mongos
群集中的实例,然后运行sh.stopBalancer()
以禁用平衡器:
注意
如果正在进行迁移,则系统将在停止平衡器之前完成正在进行的迁移。您可以运行
sh.isBalancerRunning()
以检查平衡器的当前状态。
要验证是否禁用了平衡器,请运行run
sh.getBalancerState()
,如果禁用了平衡器,则返回false:
有关禁用平衡器的更多信息,请参阅 禁用平衡器。
mongos
实例。¶降级二进制文件并重新启动。
一次降级碎片。如果这些分片是副本集,则对于每个分片:
一次降级 副本集的二级成员:
关闭mongod
实例并将4.0二进制文件替换为3.6二进制文件。
使用--shardsvr
和
--port
命令行选项启动3.6二进制文件。包括适合您的部署的任何其他配置,例如
--bind_ip
。
或者,如果使用配置文件,更新文件包括,和任何其他配置,适合您的部署,如
,并启动:sharding.clusterRole: shardsvr
net.port
net.bindIp
等待成员恢复SECONDARY
状态,然后再降级下一个辅助成员。要检查成员的状态,可以rs.status()
在
mongo
shell中发出。
对每个次要成员重复上述步骤。
降级主副本集。
将mongo
外壳连接到主要数据库,并用于
rs.stepDown()
降低主要数据库并强制选择新的主要数据库:
当rs.status()
显示主要节点已卸任且另一个成员已PRIMARY
处于状态时,请降级已减少的主要节点:
关闭逐步降低的主数据库,然后将mongod
二进制文件替换
为3.6二进制文件。
使用--shardsvr
和
--port
命令行选项启动3.6二进制文件。包括适合您的部署的任何其他配置,例如
--bind_ip
。
或者,如果使用配置文件,更新文件包括,和任何其他配置,适合您的部署,例如
,启动3.6二进制文件:sharding.clusterRole: shardsvr
net.port
net.bindIp
如果配置服务器是副本集:
一次降级 副本集的二级成员:
关闭辅助mongod
实例,然后用3.6二进制文件替换4.0二进制文件。
使用--configsvr
和
--port
选项启动3.6二进制文件。包括适合您的部署的任何其他配置,例如
--bind_ip
。
如果使用配置文件,请更新该文件以指定,和其他适用于您的部署的配置,例如
,并启动3.6二进制文件:sharding.clusterRole: configsvr
net.port
net.bindIp
包括适合您的部署的任何其他配置。
等待成员恢复SECONDARY
状态,然后再降级下一个辅助成员。要检查成员的状态,请rs.status()
在mongo
shell中发出。
对每个次要成员重复上述步骤。
降级主副本集。
将mongo
外壳连接到主要数据库,并用于
rs.stepDown()
降低主要数据库并强制选择新的主要数据库:
当rs.status()
显示主节点已降级并且另一个成员已PRIMARY
进入状态时,请关闭已降级的主mongod
节点,然后用3.6二进制文件替换二进制文件。
使用--configsvr
和
--port
选项启动3.6二进制文件。包括适合您的部署的任何其他配置,例如
--bind_ip
。
如果使用配置文件,请更新该文件以指定,和其他适用于您的部署的配置,例如
,并启动3.6二进制文件:sharding.clusterRole: configsvr
net.port
net.bindIp
注意
MongoDB 3.6部署可以使用从针对4.0部署打开的变更流返回的BinData恢复令牌,但不能使用v0
或v1
十六进制编码的字符串恢复令牌。