Docs 菜单
Docs 主页
/
MongoDB Manual
/ / /

将 5.0 分片集群降级至 4.4

在此页面上

  • 降级路径
  • 创建备份
  • 先决条件
  • 步骤

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

重要

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

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

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

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

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

要从 5.0 降级到 4.4,必须删除保留的不兼容功能和/或更新不兼容的配置设置。其中包括:

MongoDB 5.0 更改了集群范围读关注和写关注的默认值,降级到 MongoDB 4.4 可能会将这些默认值改回。在降级之前,请考虑手动配置集群的默认读关注和写关注:

MongoDB 5.0 新增了对在文档字段名中包含 .$ 字符的支持。在降级到 MongoDB 4.4 之前,必须删除包含 .$ 字符的字段名称的所有文档。

MongoDB 5.0 支持 Slim 格式的时区数据文件。如果在部署中使用 Slim 格式的时区数据文件,如通过 --timeZoneInfo 命令行选项或 processManagement.timeZoneInfo 配置文件设置提供给 MongoDB,则您必须降级到 MongoDB 4.4.7 或更高版本,否则必须恢复时区数据文件以使用以前的非 Slim 格式的数据文件。

在尝试任何降级过程之前,确保所有重新分片操作均已成功完成。 如果最近的重新分片操作由于主节点故障转移而失败,则必须先运行cleanupReshardCollection命令,然后才能降级分片集群的featureCompatibilityVersion

如果在您降级分片集群的featureCompatibilityVersion时重新分片操作仍在运行,则重新分片操作将中止。

首先,验证以下内容:

  • 确保没有正在进行任何初始同步。在初始同步过程中运行 setFeatureCompatibilityVersion 命令将导致重新启动初始同步。

  • 确保所有节点的副本集配置中都没有newlyAdded字段。 在分片集群中的每个节点上运行以下命令进行验证:

    use local
    db.system.replset.find( { "members.newlyAdded" : { $exists : true } } );

    newlyAdded字段仅在初始同步期间和初始同步后不久出现在节点的副本集配置文档中。

  • 确保没有副本集成员处于 ROLLBACKRECOVERING 状态。

接下来,要降级分片集群的featureCompatibilityVersion

  1. mongo Shell 连接到 mongos 实例。

  2. featureCompatibilityVersion 降级为 "4.4"

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

    setFeatureCompatibilityVersion 命令对内部系统集合执行写入操作,并且是幂等的。如果由于任何原因未成功完成该命令,请在 mongos 实例上重试该命令。

    注意

  3. 要确保分片集群的所有成员反映更新后的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。

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

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

时间序列集合
删除所有时间序列集合
运行时审核过滤器管理
  • 通过将节点的配置文件中的 auditLog.runtimeConfiguration 设置为 false,禁用运行时审核筛选器管理。

  • 在本地配置文件中更新此mongodmongos实例的审核筛选器。

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

警告

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

1

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

重要

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

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

2

mongosh连接到分片集群中的mongos实例,然后运行sh.stopBalancer()以禁用负载均衡器:

sh.stopBalancer()

注意

如果迁移正在进行,系统将在停止负载均衡器之前完成进行中的迁移。你可以运行 sh.isBalancerRunning() 以检查负载均衡器的当前状态。

要验证是否禁用了负载均衡器,请运行 sh.getBalancerState();如果已禁用负载均衡器,则会返回 false:

sh.getBalancerState()

有关禁用负载均衡器的更多信息,请参阅禁用负载均衡器

3

降级二进制文件并重新启动。

4

逐个降级分片。

  1. 一次降级一个分片的从节点:

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

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

    3. 等待成员恢复到SECONDARY状态,然后再降级下一个从节点成员。 要检查成员的状态,请将mongosh连接到分片并运行rs.status()方法。

      对每个从节点成员重复降级操作。

  2. 降级分片仲裁节点(如果有)。

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

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

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

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

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

  3. 将分片的主节点降级。

    1. 降级副本集主节点。 将mongosh连接到主节点,并使用rs.stepDown()降级主节点并强制选举新的主节点:

      rs.stepDown()
    2. 运行rs.status()

      rs.status()

      当状态显示主节点已降级并且另一个节点处于PRIMARY状态时,请继续。

    3. mongosh运行以下命令以执行降级主节点的干净关闭,或者参阅停止mongod进程以了解安全终止mongod进程的其他方法:

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

对剩余分片重复上述步骤。

5
  1. 一次降级一个配置服务器副本集 ( CSRS ) 的从节点:

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

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

    3. 等待成员恢复到SECONDARY状态,然后再降级下一个从节点成员。 要检查成员的状态,请将mongosh连接到分片并运行rs.status()方法。

      对每个从节点成员重复降级操作。

  2. 降级配置服务器主节点。

    1. mongosh 连接到主节点,并使用 rs.stepDown() 降级主节点,强制选举新的主节点:

      rs.stepDown()
    2. 运行rs.status()

      rs.status()

      当状态显示主节点已降级并且另一个节点处于PRIMARY状态时,请继续。

    3. mongosh运行以下命令以执行降级主节点的干净关闭,或者参阅停止mongod进程以了解安全终止mongod进程的其他方法:

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

6

完成分片集群组件的降级后,将mongosh连接到mongos重新启用负载均衡器。

sh.startBalancer()

mongosh方法sh.startBalancer()还启用分片集群的自动分割。

后退

副本集(Replica Set)