参考 > 发行说明 > MongoDB 4.2发行说明 > 将分片群集升级到4.2
重要
在尝试进行任何升级之前,请熟悉本文档的内容。
如果您需要有关升级到4.2的指导,则MongoDB提供主要版本升级服务,以确保平稳过渡而不会中断您的MongoDB应用程序。
升级时,请考虑以下事项:
要将现有的MongoDB部署升级到4.2,必须运行4.0系列发行版。
要从4.0系列之前的版本升级,必须连续升级主要版本,直到升级到4.0系列为止。例如,如果运行的是3.6系列,则必须先 升级到4.0, 然后才能升级到4.2。
在开始升级之前,请参阅MongoDB 4.2中的兼容性更改文档,以确保您的应用程序和部署与MongoDB 4.2兼容。开始升级之前,请解决部署中的不兼容性。
在升级MongoDB之前,请务必先在临时环境中测试应用程序,然后再将升级部署到生产环境中。
从MongoDB 3.6开始,"majority"
默认情况下,MongoDB启用对读取关注的支持
。
您可以禁用读取关注,"majority"
以防止存储高速缓存压力固定具有主从仲裁器(PSA)体系结构的三成员副本集或具有三成员PSA分片的分片群集。
注意
禁用"majority"
读取关注会影响对分片群集上事务的支持
。特别:
"snapshot"
如果事务涉及已禁用读取关注“多数”的分片,则该事务不能使用读取关注。"majority"
。但是,它不影响
副本集上的事务。对于副本集上的事务,即使禁用了读取关注,也可以为多文档事务指定读取关注"majority"
(或"snapshot"
或"local"
)"majority"
。
禁用"majority"
读取关注会禁用对MongoDB 4.0及更早版本的变更流的支持。对于MongoDB 4.2+,禁用读取关注"majority"
不会影响更改流的可用性。
当升级到4.2且禁用了“多数”阅读功能时,可以将更改流用于部署。
有关更多信息,请参见禁用多数阅读关注。
MongoDB 4.2使用版本4.0.7中引入的版本1(即v1
)更改流
恢复令牌。
恢复令牌_data
类型取决于MongoDB版本,在某些情况下,取决于更改流打开/恢复时的功能兼容性版本(fcv)(即,fcv值的更改不会影响已打开的更改流的恢复令牌。 ):
MongoDB版本 | 功能兼容版本 | 恢复令牌_data 类型 |
---|---|---|
MongoDB 4.2及更高版本 | “ 4.2”或“ 4.0” | 十六进制编码的字符串(v1 ) |
MongoDB 4.0.7及更高版本 | “ 4.0”或“ 3.6” | 十六进制编码的字符串(v1 ) |
MongoDB 4.0.6及更早版本 | “ 4.0” | 十六进制编码的字符串(v0 ) |
MongoDB 4.0.6及更早版本 | “ 3.6” | BinData |
MongoDB 3.6 | “ 3.6” | BinData |
要将分片群集升级到4.2,群集的所有成员必须至少为4.0版。升级过程将检查群集的所有组件,如果任何组件运行的版本早于4.0,则将生成警告。
MongoDB 4.2删除了对不建议使用的MMAPv1存储引擎的支持。
如果您的4.0部署使用MMAPv1,则必须在升级到MongoDB 4.2之前将4.0部署更改为WiredTiger Storage Engine。有关详细信息,请参阅将分片群集更改为WiredTiger。
在MongoDB 4.2中,mongod
和
mongos
进程将不会以MMAPv1特定配置选项开头
。如果指定了先前版本的运行WiredTiger的MongoDB,则会忽略MMAPv1配置选项。对于MongoDB 4.2,您必须从配置中删除它们。
4.0分片群集必须
featureCompatibilityVersion
设置为4.0
。
为了确保分片群集的所有成员都
featureCompatibilityVersion
设置为4.0
,请连接到每个分片副本集成员和每个配置服务器副本集成员,然后检查featureCompatibilityVersion
:
小费
对于已启用访问控制的分片群集,要对分片副本集成员运行以下命令,您必须以分片本地用户身份连接到该成员。
所有成员都应返回包含的结果
。"featureCompatibilityVersion" : { "version" : "4.0" }
要设置或更新featureCompatibilityVersion
,请在上运行以下命令mongos
:
有关更多信息,请参见
setFeatureCompatibilityVersion
。
对于分片和配置服务器,请确保没有副本集成员处于
ROLLBACK
或RECOVERING
状态。
config
数据库¶可选,但推荐。作为预防措施,在升级分片群集之前,请对config
数据库进行备份
。
仅适用于PowerPC
对于散列索引,MongoDB 4.2确保PowerPC上浮点值2 63的散列值与其他平台一致。
尽管可能包含大于2 63的浮点值的字段上的哈希索引是不受支持的配置,但是客户端仍可以在索引字段具有值2 63的位置插入文档。
如果PowerPC上当前的MongoDB 4.0分片群集已将2 63的分片键值进行哈希处理,则在升级之前:
mongoexport
,使用--query
来在分片字段中使用2 63选择文档。按照以下步骤升级后,将导入已删除的文档。
如果PowerPC上的现有MongoDB 4.0集合具有未用作分片键的值2 63的哈希索引条目,则您还可以选择在升级之前删除索引,然后在升级完成后重新创建索引。
要列出部署的所有哈希索引并查找其索引字段包含值2 63 哈希索引和PowerPC check的文档。
将mongo
外壳连接到分片mongos
群集中的实例,然后运行sh.stopBalancer()
以禁用平衡器:
注意
如果正在进行迁移,则系统将在停止平衡器之前完成正在进行的迁移。您可以运行
sh.isBalancerRunning()
以检查平衡器的当前状态。
要验证是否禁用了平衡器,请运行run
sh.getBalancerState()
,如果禁用了平衡器,则返回false:
有关禁用平衡器的更多信息,请参阅 禁用平衡器。
一次升级 一个副本集的辅助成员:
关闭辅助mongod
实例,并将4.0二进制文件替换为4.2二进制文件。
启动4.2二进制用--configsvr
,
--replSet
和--port
。包括部署使用的任何其他选项。
如果使用配置文件,更新文件来指定,,
,和,然后启动4.2二进制文件:sharding.clusterRole: configsvr
replication.replSetName
net.port
net.bindIp
包括适用于您的部署的任何其他设置。
等待成员恢复SECONDARY
状态,然后再升级下一个辅助成员。要检查成员的状态,请rs.status()
在mongo
shell中发出。
对每个次要成员重复上述步骤。
降级主副本集。
将mongo
外壳连接到主要数据库,并用于
rs.stepDown()
降低主要数据库并强制选择新的主要数据库:
当rs.status()
显示主节点已降级并且另一个成员已PRIMARY
进入状态时,请关闭已降级的主mongod
节点,然后用4.2二进制文件替换二进制文件。
启动4.2二进制用--configsvr
,--replSet
,
--port
,和--bind_ip
选项。包括先前部署使用的所有可选命令行选项:
如果使用配置文件,更新文件来指定,,
,和,然后启动4.2二进制文件:sharding.clusterRole: configsvr
replication.replSetName
net.port
net.bindIp
包括适合您的部署的任何其他配置。
一次升级一个碎片。
对于每个分片副本集:
一次升级 一个副本集的辅助成员:
关闭mongod
实例并将4.0二进制文件替换为4.2二进制文件。
启动4.2二进制用--shardsvr
,--replSet
,
--port
,和--bind_ip
选项。包括适用于您的部署的所有其他命令行选项:
如果使用配置文件,更新文件,包括,
,,和
,然后启动4.2二进制文件:sharding.clusterRole: shardsvr
replication.replSetName
net.port
net.bindIp
包括适合您的部署的任何其他配置。
等待成员恢复SECONDARY
状态,然后再升级下一个辅助成员。要检查成员的状态,可以rs.status()
在
mongo
shell中发出。
对每个次要成员重复上述步骤。
降级主副本集。
将mongo
外壳连接到主要数据库,并用于
rs.stepDown()
降低主要数据库并强制选择新的主要数据库:
当rs.status()
显示主节点已卸任并且另一成员已PRIMARY
处于状态时,请升级已卸除的主抵押:
关闭降级的主数据库,然后用mongod
4.2二进制文件替换
二进制文件。
启动4.2二进制用--shardsvr
,--replSet
,
--port
,和--bind_ip
选项。包括适用于您的部署的所有其他命令行选项:
如果使用配置文件,更新文件来指定,,
,和,然后启动4.2二进制文件:sharding.clusterRole: shardsvr
replication.replSetName
net.port
net.bindIp
包括适合您的部署的任何其他配置。
使用4.2 mongo
Shell,连接到
mongos
集群中的并运行
sh.startBalancer()
以重新启用平衡器:
从MongoDB 4.2开始,sh.startBalancer()
还可以对分片群集进行自动拆分。
如果您不希望在启用平衡器时启用自动拆分功能,则还必须运行sh.disableAutoSplit()
。
有关重新启用平衡器的更多信息,请参阅“ 启用平衡器”。
此时,您可以运行4.2二进制文件,而没有与4.0不兼容的4.2 功能。
要启用这些4.2功能,请将功能兼容版本(FCV
)设置为4.2。
小费
启用这些向后不兼容的功能可能会使降级过程复杂化,因为在降级之前必须删除所有持久的向后不兼容的功能。
建议在升级后,允许您在不启用这些功能的情况下运行部署,并且要在预热期内确保降级的可能性最小。如果您确信降级的可能性很小,请启用这些功能。
在mongos
实例上,setFeatureCompatibilityVersion
在admin
数据库中运行
命令:
此命令必须执行对内部系统集合的写入。如果由于某种原因该命令未成功完成,则可以安全地重试该命令,
mongos
因为该操作是幂等的。
TLS
选项替换不推荐使用的SSL
选项从MongoDB 4.2开始,MongoDB弃用mongod,mongos和mongo shell的SSL选项 以及相应的net.ssl Options配置文件选项。
为避免弃用消息,请TLS
对mongod,mongos和mongo shell使用新选项
。
mongod
和mongos
配置文件的选项,请参阅配置文件页面。tls
选项,请参阅
连接字符串页面。需要与MongoDB 3.6和4.0兼容的官方驱动程序,包括retryWrites=true
在连接字符串中的选项才能
为该连接启用可重试的写入。
与MongoDB 4.2兼容的官方驱动程序默认情况下启用可重试写入。升级到需要兼容重写的4.2兼容驱动程序的应用程序可以忽略该retryWrites=true
选项。应用升级到需要的4.2兼容的驱动程序
禁用重试写操作必须包括
retryWrites=false
连接的字符串中。
如果在PowerPC上,您发现哈希索引字段的值为2 63,