Docs 菜单

Docs 主页开发应用程序MongoDB Manual

降级4 。 4 将副本集设置为4 。 2

在此页面上

  • 降级路径
  • 创建备份
  • 访问控制
  • 先决条件
  • 步骤

在尝试任何降级之前,请先熟悉本文档的内容。

重要

升级或降级副本集之前,请确保所有副本集节点都正在运行。否则,升级或降级操作将在所有节点启动后才会完成。

如果需要从 4.4 降级,请降级到最新的 4.2 补丁版本。

MongoDB 仅支持单版本降级。您无法降级到比当前版本落后多个版本的版本。

例如,您可以将4 442降级。将 系列转换为 。 - 系列部署。但是,进一步降级该 。部署到 的 系列。不支持4 240系列部署。

警告

降级下限

如果需要从版本 4.4 降级,请降级到 4.2.6 或更高版本。 您无法降级到 4.2.5 或更早的版本。

可选但建议使用。创建数据库备份。

如果副本集启用了访问控制,则降级用户权限必须包括跨数据库列出和托管索引的权限。具有 root角色的用户拥有所需的权限。

要从 4.2 降级到 4.0,您必须删除保留的不兼容功能和/或更新不兼容的配置设置。

从 MongoDB 4.4 开始:

未分片collection和视图的命名空间长度限制为255字节,分片collection的命名空间长度限制为235字节。对于collection或视图,命名空间包括数据库名称、点 ( . ) 分隔符和collection/视图名称(例如<database>.<collection> )。

在降级之前,请解析命名空间超过特征兼容性版本 (FCV) 4.2 的 120 字节命名空间长度限制的任何collection或视图。

要确定是否有任何collection或视图的命名空间超过 120 字节限制,请将mongo shell 连接到主节点并运行:

db.adminCommand("listDatabases").databases.forEach(function(d){
let mdb = db.getSiblingDB(d.name);
mdb.getCollectionInfos( ).forEach(function(c){
namespace = d.name + "." + c.name
namespacelenBytes = encodeURIComponent(namespace).length
if (namespacelenBytes > 120) {
print (c.type.toUpperCase() + " namespace exceeds 120 bytes:: " + namespace )
}
} )
})

如果任何collection或视图命名空间超过 120 字节,则在降级 FCV之前执行

  • 使用renameCollection命令重命名collection。

  • 对于视图,使用db.createView()以更短的名称重新创建视图,然后删除原始视图。

提示

要降级副本集的featureCompatibilityVersion ,请执行以下操作:

  1. mongo Shell 连接到主节点。

  2. featureCompatibilityVersion 降级为 "4.2"

    db.adminCommand({setFeatureCompatibilityVersion: "4.2"})

    setFeatureCompatibilityVersion命令对内部系统collection执行写入,并且是幂等的。如果由于任何原因未成功完成该命令,请在主节点上重试该命令。

  3. 为确保副本集的所有节点都反映更新后的featureCompatibilityVersion ,请连接到每个副本集节点并检查featureCompatibilityVersion

    db.adminCommand( { getParameter: 1, featureCompatibilityVersion: 1 } )

    所有成员均应返回包含以下内容的结果:

    "featureCompatibilityVersion" : { "version" : "4.2" }

    如果任何成员返回"4.4"featureCompatibilityVersion ,请等待该成员反映"4.2"版本,然后再继续。

有关返回的featureCompatibilityVersion值的详细信息,请参阅获取 FeatureCompatibilityVersion。

注意

仲裁节点不会复制 admin.system.version 集合。因此,无论副本集的 fCV 值如何,仲裁节点始终具有等于二进制文件的降级版本的特征兼容性版本。

例如,MongoDB 4.4 集群中的仲裁节点的 fCV 值为 4.2。

仅当 fCV 设置为 "4.4" 时,才需要执行以下步骤。

删除所有与 4.2 不兼容的保留 4.4功能。 其中包括:

复合哈希索引

删除所有复合哈希索引。

使用db.collection.getIndexes()识别集合中的任何复合哈希索引,并使用db.collection.dropIndex()删除这些索引。

删除所有使用 4.4 功能的保留功能。 这些包括但不限于:

警告

在继续执行降级过程之前,请确保所有副本集节点(包括延迟的副本集节点)都反映先决条件更改。 也就是说,在降级之前检查每个节点的featureCompatibilityVersion并删除不兼容的功能。

1

使用包经理或手动下载,获取 4.2 系列的最新版本。如果使用包经理,请为 4.2 二进制文件添加新的存储库,然后执行实际的降级过程。

重要

升级或降级副本集之前,请确保所有副本集节点都正在运行。否则,升级或降级操作将在所有节点启动后才会完成。

如果需要从 4.4 降级,请降级到最新的 4.2 补丁版本。

2

降级副本集的每个从节点,一次一个:

  1. mongosh中运行以下命令以执行干净关闭,或参阅停止mongod进程以了解安全终止mongod进程的其他方法:

    db.adminCommand( { shutdown: 1 } )
  2. 将 4.4 二进制文件替换为 4.2 二进制文件,然后重新启动。

  3. 等待成员恢复到SECONDARY状态,然后再降级下一个从节点。 要检查成员的状态,请使用mongo shell 中的rs.status()方法。

  4. 一旦成员处于SECONDARY阶段,就降级下一个从节点。

3

如果副本集不包含仲裁节点,请跳过此步骤。

降级副本集的仲裁节点

  1. mongosh中运行以下命令以执行干净关闭,或参阅停止mongod进程以了解安全终止mongod进程的其他方法:

    db.adminCommand( { shutdown: 1 } )
  2. 删除仲裁节点数据目录的内容。 storage.dbPath配置设置或--dbpath命令行选项指定仲裁节点mongod的数据目录。

    rm -rf /path/to/mongodb/datafiles/*
  3. 将 4.4 二进制文件替换为 4.2 二进制文件,然后重新启动。

  4. 等待成员恢复到ARBITER状态。 要检查成员的状态,请将mongo Shell 连接到成员并运行rs.status()方法。

4

mongo shell 中使用rs.stepDown()降级主节点并强制执行正常的故障转移过程。

rs.stepDown()

rs.stepDown() 加快故障转移过程,优于直接关闭主节点。

5

rs.status()显示主节点已降级并且另一节点已采用PRIMARY状态时:

  1. mongosh中运行以下命令以执行干净关闭,或参阅停止mongod进程以了解安全终止mongod进程的其他方法:

    db.adminCommand( { shutdown: 1 } )
  2. mongod二进制文件替换为 4.2 二进制文件,然后重新启动。

← 降级4 。 4 独立运行的实例到4 。 2