将分片群集升级到6.0

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

以下步骤概述了将碎片成员的mongod从5.0版本升级到6.0的过程。

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

升级建议和核对清单

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

升级版本路径

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

要从早于5.0系列的版本升级,您必须先后升级主要版本,直到升级到5.0系列。例如,如果您运行的是4.4系列,则必须先升级到5.0然后才能升级到6.0。

检查驱动程序兼容性

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

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

准备工作

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

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

降级注意事项

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

先决条件

所有成员版本

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

功能兼容性版本

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

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

提示:

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

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

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

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

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

有关更多信息,请参阅setFeatureCompatibilityVersion

副本集成员状态

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

备份 配置 数据库

可选,但建议使用。作为预防措施,请备份 配置 资料库 之前 升级分片后的集群。

下载6.0二进制文件

使用软件包管理器

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

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

手动下载6.0二进制文件

如果您尚未使用软件包管理器安装MongoDB,您可以手动从MongoDB下载中心

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

升级程序

1、禁用平衡器

连接mongosh到分片集群中的mongos实例,以及runshsh.stopBalancer()禁用平衡器:

sh.stopBalancer()

笔记:

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

要验证平衡器是否已禁用,请runshsh.getBalancerState(),如果平衡器被禁用,则返回false:

sh.getBalancerState()

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

2、升级配置服务器。

  1. 升级副本集的成员,一次一个

    • 关闭辅助实例

      要关闭mongod进程,请使用mongosh连接到集群成员并运行以下命令:

      db.adminCommand( { shutdown: 1 } )
      
    • 将5.0二进制文件替换为6.0二进制文件。

    • 启动6.0二进制文件。

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

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

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

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

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

    • 等待成员恢复到SECONDARY状态,然后再升级下一个辅助成员。

      要检查成员的状态,请在mongosh

    • 对每个从成员重复。

  2. 逐步关闭副本集主副本

    • 连接mongosh进入初选,并使用rs.stepDown()下级初选,并强制选举新初选:

      rs.stepDown()
      
    • 关闭降级初选

      rs.status()显示初选已下调,而其他成员已担任PRIMARY状态时,请关闭降级初选。

      要关闭降级主服务器,请使用mongosh连接到主命令并运行以下命令:

      db.adminCommand( { shutdown: 1 } )
      
    • mongod二进制文件替换为6.0二进制文件。

    • 启动6.0二进制文件。

      使用--configsvr--replSet--port--bind_ip选项启动6.0。包括上一次部署中使用的任何可选命令行选项:

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

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

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

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

3、升级分片

一次升级一个分片

对于每个分片副本集:

  1. 升级副本集的成员,一次一个。

    • 关闭辅助实例。

      要关闭mongod进程,请使用mongosh连接到集群成员并运行以下命令:

      db.adminCommand( { shutdown: 1 } )
      
    • 将5.0二进制文件替换为6.0二进制文件。

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

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

      如果使用配置文件,请将文件更新为includehardingsharding.clusterRole: shardsvrreplication.replSetNamenet.port、andnetnet.bindIp,然后启动6.0二进制文件

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

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

    • 等待成员恢复到SECONDARY状态,然后再升级下一个辅助成员。

      要检查成员的状态,您可以在mongosh

    • 对每个辅助成员重复。

  2. 逐步关闭副本集主副本。

    连接mongosh进入初选,并使用rs.stepDown()下级初选,并强制选举新初选:

    rs.stepDown()
    
  3. 升级升级的升级初选。

    rs.status()显示初选已下台,而其他成员已处于PRIMARY状态时,请升级降级初选:

    • 关闭降级初选。

      要关闭降级主服务器,请使用mongosh连接到副本集成员并运行以下命令:

      db.adminCommand( { shutdown: 1 } )
      
    • mongod二进制文件替换为6.0二进制文件。

    • 启动6.0二进制文件。

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

      mongod --shardsvr --replSet <replSetName> --port <port> --dbpath <path> --bind_ip localhost,<ip address>
      
    • 如果使用配置文件,请更新文件以指定sharding.clusterRole: shardsvrreplication.replSetNamenet.port、andnetnet.bindIp,然后启动6.0二进制文件:

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

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

4、升级mongos实例。

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

笔记:

当分片集群成员在不同主机上运行或远程客户端连接到分片集群时,必须指定--bind_ip选项。有关更多信息,请参阅Localhost绑定兼容性更改。

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

5、重新启用平衡器

使用mongosh,连接到集群中的mongos和runshsh.startBalancer()以重新启用平衡器:

sh.startBalancer()

从MongoDB 6.1开始,不执行自动分割块。这是因为平衡了政策的改进。自动拆分命令仍然存在,但不执行操作。有关详细信息,请参阅平衡策略更改。

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

如果您不希望在启用平衡器时启用自动拆分,您还必须运行sh.disableAutoSplit()

从MongoDB 6.1开始,不执行自动分割块。这是因为平衡了政策的改进。自动拆分命令仍然存在,但不执行操作。有关详细信息,请参阅平衡策略更改。

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

6、启用向后不兼容的6.0功能。

提示:

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

建议在升级后,在烧毁期间允许您的部署在不启用这些功能的情况下运行,以确保降级的可能性最小。当您确信降级的可能性很小时,请启用这些功能。

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

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

设置功能兼容性版本(fCV):“6.0”隐式地在每个碎片上执行areplSetReconfig,将term字段添加到碎片副本配置文档和块中,直到新配置传播到大多数副本集成员。

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

笔记:

setFeatureCompatibilityVersion分片集群上运行时,块迁移、拆分和合并可能会因ConflictingOperationInProgress而失败。

当您将setFeatureCompatibilityVersion设置为6.0时,碎片上存在的任何孤儿文档都将被清理。清洁过程:

  • 不会阻止升级完成,并且
  • 费率有限。要减轻孤儿文档清理期间性能的潜在影响,请参阅范围删除性能调整。

笔记:

其他考虑因素

当尝试连接功能兼容性版本(fCV)大于mongosmongod实例时,mongos二进制文件将崩溃。例如,您无法将MongoDB 5.0版本的mongos连接到fCV设置为6.0的6.0分片集群。但是,您可以将MongoDB 5.0版本的mongos连接到fCV设置为5.0的6.0分片集群。

其他升级程序

原文:Upgrade a Sharded Cluster to 6.0

Copyright © 上海锦木信息技术有限公司 all right reserved,powered by Gitbook文件修订时间: 2023-09-01 17:10:26

results matching ""

    No results matching ""