Docs 主页 → 开发应用程序 → MongoDB Manual
将分片集群升级到 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
。
副本集成员状态
对于分片和配置服务器,确保没有副本集成员处于ROLLBACK
或RECOVERING
状态。
备份config
数据库
可选但推荐使用。作为预防措施,请在升级分片集群之前备份config
数据库。
下载 4.4 二进制文件
使用包管理器
如果您从 MongoDB apt
、 yum
、 dnf
或zypper
存储库安装 MongoDB,则应使用包管理器升级到 4.4。
请按照适用于您的 Linux 系统的相应4.4 安装说明进行操作。 这将涉及为新版本添加存储库,然后执行实际的升级过程。
手动下载 4.4 二进制文件
如果您尚未使用包管理器安装 MongoDB,则可以从 MongoDB 下载中心手动下载 MongoDB 二进制文件。
有关更多信息,请参阅4.4 安装说明。
升级进程
禁用负载均衡器。
将mongo
shell 连接到集群中的mongos
实例,然后运行sh.stopBalancer()
以禁用负载均衡器:
sh.stopBalancer()
注意
如果迁移正在进行,系统将在停止负载均衡器之前完成进行中的迁移。您可以运行sh.isBalancerRunning()
来检查负载均衡器的当前状态。
要验证是否禁用了负载均衡器,请运行 sh.getBalancerState()
;如果已禁用负载均衡器,则会返回 false:
sh.getBalancerState()
有关禁用负载均衡器的更多信息,请参阅禁用负载均衡器。
升级配置服务器。
逐个升级副本集的从节点成员:
关闭辅助
mongod
实例,并将 4.2 二进制文件替换为 4.4 二进制文件。使用
--configsvr
、--replSet
和--port
启动 4.4 二进制文件。 包括部署使用的任何其他选项。mongod --configsvr --replSet <replSetName> --port <port> --dbpath <path> --bind_ip localhost,<ip address> 如果使用配置文件,请更新该文件以指定
sharding.clusterRole: configsvr
、replication.replSetName
、net.port
和net.bindIp
,然后启动 4.4 二进制文件:sharding: clusterRole: configsvr replication: replSetName: <string> net: port: <port> bindIp: localhost,<ip address> storage: dbpath: <path> 包括适合您部署的任何其他设置。
等待成员恢复到
SECONDARY
状态,然后再升级下一个从节点成员。 要检查成员的状态,请在mongo
shell 中发出rs.status()
。对每个从节点成员重复上述步骤。
降级副本集主节点。
将
mongo
Shell 连接到主节点,并使用rs.stepDown()
降级主节点并强制选举新的主节点:rs.stepDown() 当
rs.status()
显示主节点已降级并且另一个成员已呈现PRIMARY
状态时,请关闭已降级的主节点并将mongod
二进制文件替换为 4.4 二进制文件。使用
--configsvr
、--replSet
、--port
和--bind_ip
选项启动 4.4 二进制文件。 包括先前部署使用的任何可选命令行选项:mongod --configsvr --replSet <replSetName> --port <port> --dbpath <path> --bind_ip localhost,<ip address> 如果使用配置文件,请更新该文件以指定
sharding.clusterRole: configsvr
、replication.replSetName
、net.port
和net.bindIp
,然后启动 4.4 二进制文件:sharding: clusterRole: configsvr replication: replSetName: <string> net: port: <port> bindIp: localhost,<ip address> storage: dbpath: <path> 包括适合您的部署的任何其他配置。
升级分片。
逐个升级分片。
对于每个分片副本集:
逐个升级副本集的从节点成员:
关闭
mongod
实例,并将 4.2 二进制文件替换为 4.4 二进制文件。使用
--shardsvr
、--replSet
、--port
和--bind_ip
选项启动 4.4 二进制文件。 包括适合您的部署的任何其他命令行选项:mongod --shardsvr --replSet <replSetName> --port <port> --dbpath <path> --bind_ip localhost,<ip address> 如果使用配置文件,请更新该文件以包含
sharding.clusterRole: shardsvr
、replication.replSetName
、net.port
和net.bindIp
,然后启动 4.4 二进制文件:sharding: clusterRole: shardsvr replication: replSetName: <string> net: port: <port> bindIp: localhost,<ip address> storage: dbpath: <path> 包括适合您的部署的任何其他配置。
等待成员恢复到
SECONDARY
状态,然后再升级下一个从节点成员。 要检查成员的状态,可以在mongo
shell 中发出rs.status()
。对每个从节点成员重复上述步骤。
降级副本集主节点。
将
mongo
Shell 连接到主节点,并使用rs.stepDown()
降级主节点并强制选举新的主节点:rs.stepDown() 当
rs.status()
显示主节点已降级,并且另一个成员已显示为PRIMARY
状态时,升级已降级的主节点:关闭降级主节点,并将
mongod
二进制文件替换为 4.4 二进制文件。使用
--shardsvr
、--replSet
、--port
和--bind_ip
选项启动 4.4 二进制文件。 包括适合您的部署的任何其他命令行选项:mongod --shardsvr --replSet <replSetName> --port <port> --dbpath <path> --bind_ip localhost,<ip address> 如果使用配置文件,请更新该文件以指定
sharding.clusterRole: shardsvr
、replication.replSetName
、net.port
和net.bindIp
,然后启动 4.4 二进制文件:sharding: clusterRole: shardsvr replication: replSetName: <string> net: port: <port> bindIp: localhost,<ip address> storage: dbpath: <path> 包括适合您的部署的任何其他配置。
重新启用负载均衡器。
使用 4.4 mongo
Shell 连接到集群中的mongos
并运行sh.startBalancer()
以重新启用负载均衡器:
sh.startBalancer()
从 MongoDB 6开始。 0 。 3 ,不执行自动数据段分割。这是因为均衡策略的改进。自动分割命令仍然存在,但不执行操作。
在 6.0.3 之前的 MongoDB 版本中,sh.startBalancer()
还支持分片集群的自动拆分。
如果您不希望在启用负载均衡器时启用自动分割,则还必须运行sh.disableAutoSplit()
。
有关重新启用负载均衡器的更多信息,请参阅启用负载均衡器。
启用向后不兼容的 4.4 功能。
在这个点,您可以运行 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。
要升级副本集,请参阅将副本集升级到 4.4。