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

将分片集群升级至 5.0

在此页面上

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

请熟读本文档的内容,包括彻底查看先决条件,然后再升级到 MongoDB 5.0。

以下步骤概述了升级作为分片成员的 mongod从版本4.4分片到5.0的过程。

如需有关升级到 5.0 的指导,MongoDB 专业服务提供主要版本升级支持,帮助您顺利过渡,不会中断您的 MongoDB 应用程序。

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

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

要从 4.4 系列之前的版本升级,您必须连续升级主要版本,直到升级到 4.4 系列。例如,如果您正在运行 4.2 系列,则必须先升级到 4.4,然后才能升级到 5.0。

在升级 MongoDB 之前,请检查您是否使用与 MongoDB 5.0 兼容的驱动程序。请查阅与您具体驱动程序相对应的驱动程序文档,以验证与 MongoDB 5.0 的兼容性。

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

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

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

升级到5.0后,如果需要降级,我们建议降级到4.4的最新补丁版本。

在升级分片集群之前,请查看 5.0 性能注意事项,了解升级到 5.0 对性能的任何潜在影响。

确保 TTL 配置有效。升级之前,请删除或更正将 expireAfterSeconds 设置为 NaN 的任何 TTL 索引。在 MongoDB 5.0 及更高版本中,将 expireAfterSeconds 设置为 NaN 与将 expireAfterSeconds 设置为 0 具有相同的效果。如需了解详情,请参阅《设置为 NaN 时的 TTL expireAfterSeconds 行为》

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

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

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

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

提示

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

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

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

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

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

有关更多信息,请参阅 setFeatureCompatibilityVersion

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

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

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

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

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

请参阅 5.0 安装说明了解更多信息。

警告

如果将现有的 MongoDB 实例升级到 MongoDB 5.0.15 ,并且在mongod.conf文件中设置了fork: true ,则该实例可能无法启动。

升级问题会影响所有使用.deb.rpm安装包的 MongoDB 实例。 使用 tarball ( .tgz ) 版本或其他软件包类型的安装不受影响。 有关详细信息,请参阅 SERVER-74345 。

要删除fork: true设置,请从系统终端运行以下命令:

systemctl stop mongod.service
sed -i.bak '/fork: true/d' /etc/mongod.conf
systemctl start mongod.service

删除设置后,第二个systemctl命令将启动升级后的实例。

1

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

sh.stopBalancer()

注意

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

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

sh.getBalancerState()

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

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

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

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

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

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

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

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

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

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

  2. 降级副本集主节点。

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

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

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

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

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

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

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

3

一次升级一个分片。

对于每个分片副本集:

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

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

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

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

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

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

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

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

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

  2. 降级副本集主节点。

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

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

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

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

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

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

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

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

4

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

注意

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

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

使用 mongosh 连接到集群中的 mongos,然后运行 sh.startBalancer() 重新启用负载均衡器:

sh.startBalancer()

从 MongoDB 4.2 开始, sh.startBalancer()还为分片集群启用自动分割。

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

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

6

此时,您可以运行 5.0 二进制文件,而不使用与 4.4 不兼容的 5.0 功能

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

提示

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

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

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

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

设置featureCompatibilityVersion (fCV):" 5.0 " 对每个分片分片式执行replSetReconfig ,以将term字段添加到分分片副本配置文档中。

直到新配置传播到大多数副本集成员后,该命令才会完成。

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

注意

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

当您将 setFeatureCompatibilityVersion 设置为 5.0 时,分片上存在的所有孤立文档都将被清除。清除过程:

  • 不阻止升级完成,并且

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

注意

其他注意事项

从 MongoDB4.0 开始,当尝试连接到 特征兼容性版本 (fCV)mongos 大于 mongodmongos的 实例时, 二进制文件将崩溃。例如,您无法连接 MongoDB 4 。 4 版本mongos为5 。 0 将fCV设置为5的分片集群。 0 。 但是,您可以连接 MongoDB 4 。 4 版本mongos为5 。 0 将fCV设置为4的分片集群。 4 。

后退

副本集(Replica Set)