将 6.0 分片集群降级至 5.0
尝试降级之前,请先熟悉本页面的内容。
降级路径
重要
在升级或降级分片集群之前,请确保所有分片集群成员都正在运行。 否则,升级或降级将在所有节点启动后才能完成。
如果需要从 6.0 降级,请降级到最新的 5.0 补丁版本。
MongoDB 仅支持单版本降级。您无法降级到比当前版本落后多个版本的版本。
例如,您可以将 6.0 系列部署降级为 5.0 系列部署。但是,不支持将 5.0 系列部署进一步降级为 4.4 系列部署。
先决条件
在开始降级程序之前,必须完成以下先决条件步骤。
创建备份
可选但建议使用。创建数据库备份。
要了解如何创建备份,请参阅自托管部署的备份方法。
删除向后不兼容的功能
如需从 6.0 降级到 5.0,必须删除与 5.0 不兼容的 6.0 功能。有关不兼容功能的列表以及如何删除这些功能,请参阅“降级注意事项”。
确保没有正在进行的重新分片操作
确保所有重新分片操作均已成功完成。 如果最近的重新分片操作由于主节点故障转移而失败,则必须先运行 cleanupReshardCollection
命令,然后才能降级分片集群的featureCompatibilityVersion
。
如果在您降级分片集群的featureCompatibilityVersion
时重新分片操作仍在运行,则重新分片操作将无法完成。
降级功能兼容版本(fCV)
要降级分片集群的 fCV :
确保没有正在进行任何初始同步。 在初始同步进行时运行
setFeatureCompatibilityVersion
命令会导致初始同步重新启动。确保所有节点的副本集配置中都没有
newlyAdded
字段。 在副本集中的每个节点上运行以下命令以验证这一点:use local db.system.replset.find( { "members.newlyAdded" : { $exists : true } } ); newlyAdded
字段仅在初始同步期间和初始同步后不久出现在节点的副本集配置文档中。确保没有副本集成员处于
ROLLBACK
或RECOVERING
状态。将
featureCompatibilityVersion
降级为"5.0"
。db.adminCommand( { setFeatureCompatibilityVersion: "5.0" } ) setFeatureCompatibilityVersion
命令对内部系统集合执行写入操作,并且是幂等的。如果命令未成功完成,请在mongos
实例上重试命令。注意
故障排除
当
setFeatureCompatibilityVersion
在分片集群上运行时,数据块迁移、分割和合并可能会失败并显示ConflictingOperationInProgress
。如果
setFeatureCompatibilityVersion
因ManualInterventionRequired
错误而失败,并且集群最近进行了因选举而失败的重新分片操作,则必须先运行cleanupReshardCollection
命令,然后再尝试再次运行setFeatureCompatibilityVersion
。
要确保副本集的所有节点都有更新的
featureCompatibilityVersion
,请连接到每个副本集节点并检查featureCompatibilityVersion
:db.adminCommand( { getParameter: 1, featureCompatibilityVersion: 1 } ) 所有成员均应返回包含以下内容的结果:
"featureCompatibilityVersion" : { "version" : "5.0" } 如果任何成员返回
"6.0"
的featureCompatibilityVersion
,请等待该成员返回版本"5.0"
,然后再继续。
有关返回的featureCompatibilityVersion
值的详细信息,请参阅获取 FeatureCompatibilityVersion。
降级程序
警告
在继续执行降级过程之前,请确保所有分片集群成员(包括延迟副本集成员)都有先决条件更改。 为此,请在降级之前检查featureCompatibilityVersion
并删除每个节点的不兼容功能。
禁用负载均衡器。
要禁用负载均衡器,请将mongosh
连接到分片集群中的mongos
实例,然后运行以下命令:
sh.stopBalancer()
注意
如果迁移正在进行,MongoDB 会在停止负载均衡器之前完成进行中的迁移。 要检查负载均衡器的当前状态,请运行sh.isBalancerRunning()
。
要验证负载均衡器是否已禁用,请运行以下命令:
sh.getBalancerState()
如果负载均衡器已禁用, sh.getBalancerState()
将返回false
。
有关禁用负载均衡器的更多信息,请参阅禁用负载均衡器。
降级每个分片,一次一个。
将分片的从节点降级,一次一个。
关闭节点。
要关闭
mongod
进程,请使用mongosh
连接到部署,并运行以下命令:db.adminCommand( { shutdown: 1 } ) 重新启动成员。
要启动
mongod
进程,请运行以下命令:mongod --dbpath </path-to-data-folder> 等待成员进入
SECONDARY
状态。在降级下一个从节点之前,请等待该成员恢复到
SECONDARY
状态。要检查成员的状态,请使用mongosh
中的rs.status()
方法重复前面的步骤以降级每个从节点。
降级分片仲裁节点(如果有)。
如果副本集不包含仲裁节点,请跳过此步骤。
将分片集群的仲裁节点降级:
关闭节点。
要关闭仲裁节点,请使用
mongosh
连接到仲裁节点并运行以下命令:db.adminCommand( { shutdown: 1 } ) 删除仲裁节点数据目录的内容。
要查找仲裁节点
mongod
的数据目录,请检查storage.dbPath
配置设置或--dbpath
命令行选项。运行以下命令:
rm -rf /path/to/mongodb/datafiles/* 重新启动仲裁节点。
要启动
mongod
进程,请运行以下命令:mongod --dbpath </path-to-mongodb-datafiles> 等待成员进入
ARBITER
状态。在将主节点降级之前,请等待该成员恢复到
ARBITER
状态。 要检查成员的状态,请使用mongosh
中的rs.status()
方法
将分片主节点降级。
从主节点降级。
在
mongosh
中,使用rs.stepDown()
降级主节点并开始新的主节点选举:rs.stepDown() 验证主节点是否已降级。
运行以下命令:
rs.status() 验证主节点是否已降级以及其他节点是否已进入
PRIMARY
状态。关闭前主节点。
要关闭以前的主节点,请使用
mongosh
连接到部署并运行以下命令:db.adminCommand( { shutdown: 1 } ) 使用5.0二进制文件重新启动
mongod
。要启动
mongod
进程,请运行以下命令:mongod --dbpath </path-to-mongodb-datafiles> 对剩余分片重复上述步骤。
降级配置服务器。
逐个降级配置服务器副本集 (CSRS) 的分片的从节点:
关闭从节点。
连接到从节点并运行以下命令:
db.adminCommand( { shutdown: 1 } ) 重新启动成员。
要启动
mongod
进程,请运行以下命令:mongod --dbpath </path-to-data-folder> 等待成员进入
SECONDARY
状态。在降级下一个从节点之前,请等待该成员恢复到
SECONDARY
状态。要检查成员的状态,请使用mongosh
中的rs.status()
方法重复前面的步骤以降级每个从节点。
将配置服务器主节点降级。
从主节点降级。
在
mongosh
中,运行rs.stepDown()
以降级主节点并开始新的主节点选举:rs.stepDown() 验证主节点是否已降级。
运行以下命令:
rs.status() 验证主节点是否已降级以及其他节点是否已进入
PRIMARY
状态。关闭前主节点。
要关闭以前的主节点,请使用
mongosh
连接到部署并运行以下命令:db.adminCommand( { shutdown: 1 } ) 使用5.0二进制文件重新启动
mongod
。要启动
mongod
进程,请运行以下命令:mongod --dbpath </path-to-mongodb-datafiles>
重新启用负载均衡器。
降级所有分片集群组件后,请连接到mongos
并运行以下命令以重新启用负载均衡器:
sh.startBalancer()
sh.startBalancer()
方法还启用分片集群的自动分割。