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