将 5.0 副本集降级至 4.4
在尝试任何降级之前,请先熟悉本文档的内容。
降级路径
重要
升级或降级副本集之前,请确保所有副本集节点都正在运行。否则,升级或降级操作将在所有节点启动后才会完成。
如果需要从 5.0 降级,请降级到最新的 4.4 补丁版本。
MongoDB 仅支持单版本降级。您无法降级到比当前版本落后多个版本的版本。
例如,您可以将 5.0 系列部署降级为 4.4 系列部署。但是,不支持将 4.4 系列部署进一步降级为 4.2 系列部署。
创建备份
可选但建议使用。创建数据库备份。
访问控制
如果副本集启用了访问权限控制,则降级用户权限必须包括跨数据库列出和管理索引的权限。 具有 root
角色的用户拥有所需的权限。
先决条件
要从 5.0 降级到 4.4,必须删除保留的不兼容功能和/或更新不兼容的配置设置。其中包括:
1. 集群默认读关注和写关注
MongoDB 5.0 更改了集群范围读关注和写关注的默认值,降级到 MongoDB 4.4 可能会将这些默认值改回。在降级之前,请考虑手动配置集群的默认读关注和写关注:
要手动配置集群的读或写关注的默认值,请使用
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. 降级特征兼容性版本(fCV)
首先,验证以下内容:
确保没有正在进行任何初始同步。在初始同步过程中运行
setFeatureCompatibilityVersion
命令将导致重新启动初始同步。确保所有节点的副本集配置中都没有
newlyAdded
字段。 在副本集中的每个节点上运行以下命令以验证这一点:use local db.system.replset.find( { "members.newlyAdded" : { $exists : true } } ); newlyAdded
字段仅在初始同步期间和初始同步后不久出现在节点的副本集配置文档中。确保没有副本集成员处于
ROLLBACK
或RECOVERING
状态。
接下来,要降级副本集的featureCompatibilityVersion
:
将
mongo
Shell 连接到主节点。将
featureCompatibilityVersion
降级为"4.4"
。db.adminCommand({setFeatureCompatibilityVersion: "4.4"}) setFeatureCompatibilityVersion
命令对内部系统collection执行写入,并且是幂等的。如果由于任何原因未成功完成该命令,请在主节点上重试该命令。为确保副本集的所有节点都反映更新后的
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。
5. 删除 fCV 5.0 保留功能
仅当 fCV 设置为 "5.0"
时,才需要执行以下步骤。
删除所有与 4.4 不兼容的保留 5.0 功能。其中包括:
- 时间序列集合
- 删除所有时间序列集合。
运行时审核过滤器管理
使用
db.admin.runCommand
重置组中主服务器的默认值。 主节点应该是组中最后一个更新的配置服务器。db.admin.runCommand( { setAuditConfig: 1, filter: {}, auditAuthorizationSuccess: false } ) 配置文档也可以在降级后删除:
config.settings.remove({_id: 'audit'}); 通过在节点的配置文件中将
auditLog.runtimeConfiguration
设置为false
,在每个节点上禁用运行时审核筛选器管理。在本地配置文件中更新此实例的审核过滤器。
6. 删除 5.0 功能
删除所有使用 5.0 功能的保留功能。这些功能包括但不限于:
如果任何视图定义包含 5.0 操作符,如
$dateAdd
或$sampleRate
,则必须删除。有关完整列表,请参阅新聚合操作符。
步骤
警告
在继续执行降级过程之前,请确保所有副本集节点(包括延迟的副本集节点)都反映先决条件更改。 也就是说,在降级之前检查每个节点的featureCompatibilityVersion
并删除不兼容的功能。
降级副本集的从节点。
降级副本集的每个从节点,一次一个:
在
mongosh
中运行如下命令以执行干净关闭,或参考停止mongod
进程了解其他安全终止mongod
进程的方法:db.adminCommand( { shutdown: 1 } ) 将 5.0 二进制文件替换为 4.4 二进制文件,然后重新启动。
等待成员恢复到
SECONDARY
状态,然后再降级下一个从节点。 要检查成员的状态,请使用mongosh
中的rs.status()
方法一旦成员处于
SECONDARY
阶段,就降级下一个从节点。
将仲裁节点副本集节点降级(如果有)。
如果副本集不包含仲裁节点,请跳过此步骤。
降级副本集的仲裁节点:
在
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()
方法。
从主节点降级。
使用rs.stepDown()
mongosh
{ 中的 降级 主节点 并强制执行正常的 故障转移 过程。
rs.stepDown()
rs.stepDown()
加快故障转移过程,优于直接关闭主节点。
替换并重新启动以前的主节点 (primary node in the replica set)节点mongod
。
当rs.status()
显示主节点已降级并且另一节点已采用PRIMARY
状态时:
在
mongosh
中运行如下命令以执行干净关闭,或参考停止mongod
进程了解其他安全终止mongod
进程的方法:db.adminCommand( { shutdown: 1 } ) 将
mongod
二进制文件替换为 4.4 二进制文件,然后重新启动。