“文档” 菜单
文档首页
/
MongoDB Manual
/ / /

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

在此页面上

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

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

重要

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

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

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

例如,您可以将 4.4 系列降级为 4.2 系列部署。但是,不支持进一步降级该 4.2 系列部署到 4.0 系列部署。

警告

降级下限

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

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

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

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

从 MongoDB 4.4 开始:

未分片集合和视图的命名空间长度限制为 255 字节,分片集合的命名空间长度限制为 235 字节。对于集合或视图,命名空间包括数据库名称、点 (.) 分隔符和集合/视图名称(如 <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 二进制文件,然后重新启动。

后退

下坡

来年

下坡