将 5.0 分片集群降级至 4.4
在尝试任何降级之前,请先熟悉本文档的内容。
降级路径
重要
升级或降级副本集之前,请确保所有副本集节点都正在运行。否则,升级或降级操作将在所有节点启动后才会完成。
如果需要从 5.0 降级,请降级到最新的 4.4 补丁版本。
MongoDB 仅支持单版本降级。您无法降级到比当前版本落后多个版本的版本。
例如,您可以将 5.0 系列部署降级为 4.4 系列部署。但是,不支持将 4.4 系列部署进一步降级为 4.2 系列部署。
创建备份
可选但建议使用。创建数据库备份。
先决条件
要从 5.0 降级到 4.4,必须删除保留的不兼容功能和/或更新不兼容的配置设置。其中包括:
1. 集群默认读关注和写关注
MongoDB 5.0 更改了集群范围读关注和写关注的默认值,降级到 MongoDB 4.4 可能会将这些默认值改回。在降级之前,请考虑手动配置集群的默认读关注和写关注:
要手动配置集群的读关注或写关注(write concern)的默认值,请使用
setDefaultRWConcern
命令。如果集群包含仲裁节点,且您之前已禁用
"Majority"
读关注以防止在某些情况下出现缓存压力,则可能需要在降级后配置--enableMajorityReadConcern false
或replication.enableMajorityReadConcern: false
。
2。具有.
或$
字符的文档字段
MongoDB 5.0 新增了对在文档字段名中包含 .
或 $
字符的支持。在降级到 MongoDB 4.4 之前,必须删除包含 .
或 $
字符的字段名称的所有文档。
3. Slim 格式时区数据文件
MongoDB 5.0 支持 Slim 格式的时区数据文件。如果在部署中使用 Slim 格式的时区数据文件,如通过 --timeZoneInfo
命令行选项或 processManagement.timeZoneInfo
配置文件设置提供给 MongoDB,则您必须降级到 MongoDB 4.4.7 或更高版本,否则必须恢复时区数据文件以使用以前的非 Slim 格式的数据文件。
4. 重新分片
在尝试任何降级过程之前,确保所有重新分片操作均已成功完成。 如果最近的重新分片操作由于主节点故障转移而失败,则必须先运行cleanupReshardCollection
命令,然后才能降级分片集群的featureCompatibilityVersion
。
如果在您降级分片集群的featureCompatibilityVersion
时重新分片操作仍在运行,则重新分片操作将中止。
5. 降级特征兼容性版本 (fCV)
首先,验证以下内容:
确保没有正在进行任何初始同步。在初始同步过程中运行
setFeatureCompatibilityVersion
命令将导致重新启动初始同步。确保所有节点的副本集配置中都没有
newlyAdded
字段。 在分片集群中的每个节点上运行以下命令进行验证:use local db.system.replset.find( { "members.newlyAdded" : { $exists : true } } ); newlyAdded
字段仅在初始同步期间和初始同步后不久出现在节点的副本集配置文档中。确保没有副本集成员处于
ROLLBACK
或RECOVERING
状态。
接下来,要降级分片集群的featureCompatibilityVersion
:
将
mongo
Shell 连接到mongos
实例。将
featureCompatibilityVersion
降级为"4.4"
。db.adminCommand({setFeatureCompatibilityVersion: "4.4"}) setFeatureCompatibilityVersion
命令对内部系统集合执行写入操作,并且是幂等的。如果由于任何原因未成功完成该命令,请在mongos
实例上重试该命令。注意
当
setFeatureCompatibilityVersion
在分片集群上运行时,数据块迁移、分割和合并可能会失败并显示ConflictingOperationInProgress
。如果
setFeatureCompatibilityVersion
失败并出现ManualInterventionRequired
错误,并且集群最近进行了因选举而失败的重新分片操作,则必须在再次尝试setFeatureCompatibilityVersion
之前运行cleanupReshardCollection
命令。
要确保分片集群的所有成员反映更新后的
featureCompatibilityVersion
,请连接到每个分片副本集成员和每个配置服务器副本集成员并检查featureCompatibilityVersion
:提示
对于已启用访问控制的分片群集,要针对分片副本集成员运行以下命令,您必须以分片本地用户身份连接到该成员。
db.adminCommand( { getParameter: 1, featureCompatibilityVersion: 1 } ) 所有成员均应返回包含以下内容的结果:
"featureCompatibilityVersion" : { "version" : "4.4" } 如果任何成员返回
"5.0"
的featureCompatibilityVersion
,请等待该成员反映"4.4"
版本,然后再继续。
注意
仲裁节点不会复制 admin.system.version
集合。因此,无论副本集的 fCV 值如何,仲裁节点始终具有等于二进制文件的降级版本的特征兼容性版本。
例如,MongoDB 5.0 集群中的仲裁节点的 fCV 值为 4.4。
有关返回的featureCompatibilityVersion
值的详细信息,请参阅获取 FeatureCompatibilityVersion。
6. 删除 fCV 5.0 保留功能
仅当 fCV 设置为 "5.0"
时,才需要执行以下步骤。
删除所有与 4.4 不兼容的保留 5.0 功能。其中包括:
7. 删除 5.0 功能
删除所有使用 5.0 功能的保留功能。这些功能包括但不限于:
如果任何视图定义包含 5.0 操作符,如
$dateAdd
或$sampleRate
,则必须删除。有关完整列表,请参阅新聚合操作符。
步骤
降级分片集群
警告
在继续执行降级过程之前,请确保所有节点(包括分片集群中的延迟副本集节点)都反映先决条件更改。 也就是说,在降级之前检查每个节点的featureCompatibilityVersion
并删除不兼容的功能。
禁用负载均衡器。
将 mongosh
连接到分片集群中的mongos
实例,然后运行sh.stopBalancer()
以禁用负载均衡器:
sh.stopBalancer()
注意
如果迁移正在进行,系统将在停止负载均衡器之前完成进行中的迁移。你可以运行 sh.isBalancerRunning()
以检查负载均衡器的当前状态。
要验证是否禁用了负载均衡器,请运行 sh.getBalancerState()
;如果已禁用负载均衡器,则会返回 false:
sh.getBalancerState()
有关禁用负载均衡器的更多信息,请参阅禁用负载均衡器。
降级每个分片,一次一个。
逐个降级分片。
一次降级一个分片的从节点:
在
mongosh
中运行如下命令以执行干净关闭,或参考停止mongod
进程了解其他安全终止mongod
进程的方法:db.adminCommand( { shutdown: 1 } ) 将 5.0 二进制文件替换为 4.4 二进制文件,然后重新启动。
等待成员恢复到
SECONDARY
状态,然后再降级下一个从节点成员。 要检查成员的状态,请将mongosh
连接到分片并运行rs.status()
方法。对每个从节点成员重复降级操作。
降级分片仲裁节点(如果有)。
如果副本集不包含仲裁节点,请跳过此步骤。
在
mongosh
中运行如下命令以执行干净关闭,或参考停止mongod
进程了解其他安全终止mongod
进程的方法:db.adminCommand( { shutdown: 1 } ) 删除仲裁节点数据目录的内容。
storage.dbPath
配置设置或--dbpath
命令行选项指定仲裁节点mongod
的数据目录。rm -rf /path/to/mongodb/datafiles/* 将 5.0 二进制文件替换为 4.4 二进制文件,然后重新启动。
等待成员恢复到
ARBITER
状态。 要检查成员的状态,请将mongosh
连接到该成员并运行rs.status()
方法。
将分片的主节点降级。
降级副本集主节点。 将
mongosh
连接到主节点,并使用rs.stepDown()
降级主节点并强制选举新的主节点:rs.stepDown() rs.status() 当状态显示主节点已降级并且另一个节点处于
PRIMARY
状态时,请继续。从
mongosh
运行以下命令以执行降级主节点的干净关闭,或者参阅停止mongod
进程以了解安全终止mongod
进程的其他方法:db.adminCommand( { shutdown: 1 } ) 将 5.0 二进制文件替换为 4.4 二进制文件,然后重新启动。
对剩余分片重复上述步骤。
降级配置服务器。
一次降级一个配置服务器副本集 ( CSRS ) 的从节点:
在
mongosh
中运行如下命令以执行干净关闭,或参考停止mongod
进程了解其他安全终止mongod
进程的方法:db.adminCommand( { shutdown: 1 } ) 将 5.0 二进制文件替换为 4.4 二进制文件,然后重新启动。
等待成员恢复到
SECONDARY
状态,然后再降级下一个从节点成员。 要检查成员的状态,请将mongosh
连接到分片并运行rs.status()
方法。对每个从节点成员重复降级操作。
降级配置服务器主节点。
将
mongosh
连接到主节点,并使用rs.stepDown()
降级主节点,强制选举新的主节点:rs.stepDown() rs.status() 当状态显示主节点已降级并且另一个节点处于
PRIMARY
状态时,请继续。从
mongosh
运行以下命令以执行降级主节点的干净关闭,或者参阅停止mongod
进程以了解安全终止mongod
进程的其他方法:db.adminCommand( { shutdown: 1 } ) 将 5.0 二进制文件替换为 4.4 二进制文件,然后重新启动。
重新启用负载均衡器。
完成分片集群组件的降级后,将mongosh
连接到mongos
并重新启用负载均衡器。
sh.startBalancer()
mongosh
方法sh.startBalancer()
还启用分片集群的自动分割。