Docs 菜单

Docs 主页开发应用程序MongoDB Manual

将分片集群升级到 4.4

在此页面上

  • 升级建议和清单
  • 先决条件
  • 下载 4.4 二进制文件
  • 升级进程
  • 其他升级程序

警告

将包含 MongoDB 3.0 元数据的 MongoDB 4.2 系列部署升级到 4.4 系列部署时,必须升级到MongoDB 4.4.1 或更高版本。 在没有严重停机风险的情况下,您无法成功将包含 MongoDB 3.0 元数据的部署升级到 MongoDB 4.4.0。

有关更多信息,请参阅 WT-6623 。

使用本教程从 MongoDB 4.2 升级到 MongoDB 4.4。 要升级到同一版本系列中的新补丁版本,请参阅升级到 MongoDB 的最新补丁版本。

在升级到 MongoDB 4.4 之前,请熟悉本文档的内容,包括彻底查看先决条件。

如果您需要有关升级到4的指导。 4 , MongoDB 专业服务提供主要版本升级支持,帮助确保 MongoDB 应用程序平稳过渡而不中断。

升级时,请考虑以下几点:

要将现有 MongoDB 部署升级到 4.4,您必须运行 4.2 系列版本。

要从早于4的版本升级。 2 - 系列,您必须连续升级主要版本,直到升级到4 。 2 -系列。例如,如果您正在运行4 。 0 - 系列,您必须先升级到4 。 2 ,然后才能升级到4 。 4 。

在升级 MongoDB 之前,请检查您是否正在使用 MongoDB 4 。 4兼容驱动程序。请查阅特定驱动程序的驱动程序文档,验证与 MongoDB 4的兼容性。 4 。

在不兼容的驱动程序上运行的升级部署可能会遇到意外或未定义的行为。

在开始升级之前,请参阅MongoDB 4.4 中的兼容性更改文档,以确保您的应用程序和部署与 MongoDB 4.4 兼容。 在开始升级之前,请解决部署中的不兼容问题。

在升级 MongoDB 之前,请务必在临时环境中测试您的应用程序,然后再将升级部署到生产环境。

从 MongoDB 7.0 开始,如果没有支持人员的帮助,您无法降级部署的二进制版本。

要了解详情,请参阅《将 7.0 降级至 6.0》

警告

降级下限

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

要将分片集群升级到 4.4,集群的所有成员必须至少为版本 4.2。 升级过程会检查集群的所有组件,如果任何组件运行的版本早于 4.2,则会发出警告。

在升级分片集群的成员之前,请确认该成员已完全关闭。

4.2 分片集群必须将 featureCompatibilityVersion设置为"4.2"

要确保分片集群的所有成员都将featureCompatibilityVersion设置为"4.2" ,请连接到每个分片副本集成员和每个配置服务器副本集成员并检查featureCompatibilityVersion

提示

对于已启用访问控制的分片集群,要对分片副本集成员运行以下命令,您必须以分片本地用户身份连接到该成员。

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

所有成员都应返回包含 "featureCompatibilityVersion" : { "version" : "4.2" } 的结果。

要设置或更新featureCompatibilityVersion ,请在mongos上运行以下命令:

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

有关更多信息,请参阅 setFeatureCompatibilityVersion

对于分片和配置服务器,确保没有副本集成员处于ROLLBACKRECOVERING状态。

可选但推荐使用。作为预防措施,请在升级分片集群之前备份config数据库。

如果您从 MongoDB aptyumdnfzypper存储库安装 MongoDB,则应使用包管理器升级到 4.4。

请按照适用于您的 Linux 系统的相应4.4 安装说明进行操作。 这将涉及为新版本添加存储库,然后执行实际的升级过程。

如果您尚未使用包管理器安装 MongoDB,则可以从 MongoDB 下载中心手动下载 MongoDB 二进制文件。

有关更多信息,请参阅4.4 安装说明

1

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

sh.stopBalancer()

注意

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

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

sh.getBalancerState()

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

2
  1. 逐个升级副本集的从节点成员:

    1. 关闭辅助mongod实例,并将 4.2 二进制文件替换为 4.4 二进制文件。

    2. 使用--configsvr--replSet--port启动 4.4 二进制文件。 包括部署使用的任何其他选项。

      mongod --configsvr --replSet <replSetName> --port <port> --dbpath <path> --bind_ip localhost,<ip address>

      如果使用配置文件,请更新该文件以指定sharding.clusterRole: configsvrreplication.replSetNamenet.portnet.bindIp ,然后启动 4.4 二进制文件:

      sharding:
      clusterRole: configsvr
      replication:
      replSetName: <string>
      net:
      port: <port>
      bindIp: localhost,<ip address>
      storage:
      dbpath: <path>

      包括适合您部署的任何其他设置。

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

      对每个从节点成员重复上述步骤。

  2. 降级副本集主节点。

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

      rs.stepDown()
    2. rs.status()显示主节点已降级并且另一个成员已呈现PRIMARY状态时,请关闭已降级的主节点并将mongod二进制文件替换为 4.4 二进制文件。

    3. 使用--configsvr--replSet--port--bind_ip选项启动 4.4 二进制文件。 包括先前部署使用的任何可选命令行选项:

      mongod --configsvr --replSet <replSetName> --port <port> --dbpath <path> --bind_ip localhost,<ip address>

      如果使用配置文件,请更新该文件以指定sharding.clusterRole: configsvrreplication.replSetNamenet.portnet.bindIp ,然后启动 4.4 二进制文件:

      sharding:
      clusterRole: configsvr
      replication:
      replSetName: <string>
      net:
      port: <port>
      bindIp: localhost,<ip address>
      storage:
      dbpath: <path>

      包括适合您的部署的任何其他配置。

3

逐个升级分片。

对于每个分片副本集:

  1. 逐个升级副本集的从节点成员:

    1. 关闭mongod实例,并将 4.2 二进制文件替换为 4.4 二进制文件。

    2. 使用--shardsvr--replSet--port--bind_ip选项启动 4.4 二进制文件。 包括适合您的部署的任何其他命令行选项:

      mongod --shardsvr --replSet <replSetName> --port <port> --dbpath <path> --bind_ip localhost,<ip address>

      如果使用配置文件,请更新该文件以包含sharding.clusterRole: shardsvrreplication.replSetNamenet.portnet.bindIp ,然后启动 4.4 二进制文件:

      sharding:
      clusterRole: shardsvr
      replication:
      replSetName: <string>
      net:
      port: <port>
      bindIp: localhost,<ip address>
      storage:
      dbpath: <path>

      包括适合您的部署的任何其他配置。

    3. 等待成员恢复到SECONDARY状态,然后再升级下一个从节点成员。 要检查成员的状态,可以在mongo shell 中发出rs.status()

      对每个从节点成员重复上述步骤。

  2. 降级副本集主节点。

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

    rs.stepDown()
  3. rs.status() 显示主节点已降级,并且另一个成员已显示为 PRIMARY 状态时,升级已降级的主节点:

    1. 关闭降级主节点,并将mongod二进制文件替换为 4.4 二进制文件。

    2. 使用--shardsvr--replSet--port--bind_ip选项启动 4.4 二进制文件。 包括适合您的部署的任何其他命令行选项:

      mongod --shardsvr --replSet <replSetName> --port <port> --dbpath <path> --bind_ip localhost,<ip address>

      如果使用配置文件,请更新该文件以指定sharding.clusterRole: shardsvrreplication.replSetNamenet.portnet.bindIp ,然后启动 4.4 二进制文件:

      sharding:
      clusterRole: shardsvr
      replication:
      replSetName: <string>
      net:
      port: <port>
      bindIp: localhost,<ip address>
      storage:
      dbpath: <path>

      包括适合您的部署的任何其他配置。

4

将每个mongos实例替换为 4.4 二进制文件,然后重新启动。 包括适合您的部署的任何其他配置。

注意

当分片集群成员在不同主机上运行或者远程客户端连接到分片集群时,必须指定--bind_ip选项。

mongos --configdb csReplSet/<rsconfigsver1:port1>,<rsconfigsver2:port2>,<rsconfigsver3:port3> --bind_ip localhost,<ip address>
5

使用 4.4 mongo Shell 连接到集群中的mongos并运行sh.startBalancer()以重新启用负载均衡器:

sh.startBalancer()

从 MongoDB 6开始。 0 。 3 ,不执行自动数据段分割。这是因为均衡策略的改进。自动分割命令仍然存在,但不执行操作。

在 6.0.3 之前的 MongoDB 版本中,sh.startBalancer() 还支持分片集群的自动拆分。

如果您不希望在启用负载均衡器时启用自动分割,则还必须运行sh.disableAutoSplit()

有关重新启用负载均衡器的更多信息,请参阅启用负载均衡器。

6

在这个点,您可以运行 4.4 二进制文件,而无需使用与 4.2 不兼容的 4.4功能

要启用这些 4.4 功能,请将功能兼容性版本 ( fCV ) 设置为 4.4。

提示

启用这些向后不兼容的功能可能会使降级过程变得复杂,因为在降级之前,您必须删除任何持续存在的向后不兼容的功能。

升级后,建议让部署在不启用这些功能的情况下稳定运行一段时间,以确保降级回老版本的可能性极小。当确信降级的可能性非常小时,请启用这些功能。

mongos实例上,在admin数据库中运行setFeatureCompatibilityVersion命令:

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

设置featureCompatibilityVersion (fCV) : "4.4" 对每个分片隐式执行replSetReconfig ,以将term字段添加到分片副本配置文档中,并阻塞,直到新配置传播到大多数副本集成员。

此命令必须对内部系统集合执行写入。如果由于任何原因未成功完成该命令,则可以安全地在mongos上重试该命令,因为该操作是幂等的。

注意

setFeatureCompatibilityVersion在分片集群上运行时,数据段迁移、分割和合并可能会失败并显示ConflictingOperationInProgress

当您将setFeatureCompatibilityVersion 设置为 4.4 时,分片上存在的任何 孤立文档 都将被清除。清理过程:

  • 不阻止升级完成,并且

  • 是否受到速率限制。要减轻孤立文档清理期间对性能的潜在影响,请参阅范围删除性能调优。

注意

额外注意事项

mongos二进制文件无法连接到mongod 特征兼容性版本 (fCV) 高于 的mongos 实例。例如,如果将 fCV 设置为 4.4,则无法将 MongoDB 4.2 版本mongos 连接到 4.4 分片集群。但是,您可以将 MongoDB 4.2 版本mongos连接到fCV设置为 4.2 的 4.4 分片集群。

← 将副本集升级至 4.4