参考 > 发行说明 > MongoDB 4.2发行说明 > 降级4.2至4.0 > 将4.2分片群集降级到4.0
在尝试任何降级之前,请熟悉本文档的内容。
升级到4.2后,如果需要降级,建议将其降级到最新的4.0补丁程序。
小费
如果降级,
从MongoDB 4.2开始,无论是否支持读关注,更改流都可用"majority"。也就是说,majority可以启用阅读关注支持(默认)或禁用
以使用更改流。
在MongoDB 4.0和更早版本中,更改流仅在"majority"启用了阅读关注支持时才可用(默认)。
降级到4.0系列后,如果您已禁用读取关注,则更改流将被禁用"majority"。
可选,但推荐。 创建数据库的备份。
如果分片群集已启用访问控制,则降级的用户特权必须包括其他特权来管理config数据库上的索引。
将新创建的角色添加到您的降级用户。例如,如果数据库中已有一个用户myDowngradeUser,该用户admin已经具有该root角色,则可以使用它
db.grantRolesToUser()来授予其他角色:
要将版本从4.2降级到4.0,必须删除保留的不兼容功能和/或更新不兼容的配置设置。这些包括:
要降级分片featureCompatibilityVersion群集的:
降级featureCompatibilityVersion到"4.0"。
该setFeatureCompatibilityVersion命令执行对内部系统集合的写操作,并且是幂等的。如果由于某种原因该命令未成功完成,请在mongos实例上重试该命令
。
为了确保分片群集的所有成员都反映更新的内容featureCompatibilityVersion,请连接到每个分片副本集成员和每个配置服务器副本集成员,然后检查
featureCompatibilityVersion:
小费
对于已启用访问控制的分片群集,要对分片副本集成员运行以下命令,您必须以分片本地用户身份连接到该成员。
所有成员应返回的结果包括:
如果任何成员返回featureCompatibilityVersion的"4.2",请等待该成员反映版本,"4.0"然后再继续。
有关返回featureCompatibilityVersion
值的更多信息,请参见View FeatureCompatibilityVersion。
仅当fCV设置为时,才需要执行以下步骤
"4.2"。
删除所有与4.0不兼容的持久性4.2功能。这些包括:
从MongoDB 4.2开始,对于featureCompatibilityVersion(fCV)设置为"4.2"或更大,MongoDB会删除。对于fCV设置为,该限制仍然适用。Index Key
Limit"4.0"
如果索引的键超过将fCV设置为的索引,请考虑将索引更改为哈希索引或索引计算值。您也可以在解决问题之前暂时使用
set to 。但是,设置
为时,使用这些索引的查询可能返回不完整的结果。Index Key
Limit"4.0"failIndexKeyTooLongfalsefailIndexKeyTooLongfalse
从MongoDB 4.2开始,对于featureCompatibilityVersion(fCV)设置为"4.2"或更大,MongoDB会删除。对于fCV设置为,该限制仍然适用。Index Name
Length"4.0"
如果索引的名称超出了将fCV设置为的一次,请删除并重新创建一个具有较短名称的索引。Index Name
Length"4.0"
对于featureCompatibilityVersion(fCV)设置为"4.2",MongoDB支持创建通配符索引。在降级为fCV之前,必须删除所有通配符索引"4.0"。
使用以下脚本删除并重新创建所有通配符索引:
重要
"4.0"在进行中的通配符索引构建期间降级到fCV 不会自动删除或终止索引构建。降级到fcv后,索引构建可以完成"4.0",从而在集合上产生有效的通配符索引。针对该数据目录启动4.0二进制文件将导致启动失败。
使用db.currentOp()来检查任何正在进行中的通配符建立索引。一旦任何正在进行的通配符索引构建完成,请运行脚本以将其删除,然后再降级为fCV "4.0"。
降级的二进制文件之前,修改只读视图定义和收集验证包括定义4.2运营商,如
$set,$unset,$replaceWith。
$set舞台,请改用$addFields
舞台。$replaceWith舞台,请改用
$replaceRoot舞台。$unset舞台,请改用$project
舞台。您可以通过以下方式修改视图:
db.myview.drop()方法)并重新创建视图(db.createView()方法)或collMod命令。您可以通过以下方式修改大学验证验证表达式:
collMod命令。tls前缀配置¶从MongoDB 4.2开始,MongoDB添加"tls"-prefixed选项作为选项的别名"ssl"-prefixed。
如果您的部署或客户端使用"tls"-prefixed选项,请用mongod,mongos和mongo shell
和驱动程序的相应"ssl"-prefixed选项
替换。
zstd压缩降级¶zstd日记压缩¶该zstd压缩库可用于日志数据压缩在4.2版本开始。
对于使用zstd库作为日记压缩器的任何分片或配置服务器成员:
zstd用于日记压缩和zstd数据压缩,storage.wiredTiger.engineConfig.journalCompressor以使用默认压缩器(snappy)或设置为其他4.0支持的压缩器。zstd用于日记压缩,注意
以下过程涉及在没有日志的情况下作为独立实例重新启动副本成员。
对mongod实例执行干净关闭:
更新配置文件以准备独立启动:
storage.journal.enabled到false。skipShardingConfigurationChecks为true。disableLogicalSessionCacheRefresh为
。truesetParametersharding.clusterRole设置。net.port如果未明确设置,请将设置为成员的当前端口。例如:
如果使用命令行选项而不是配置文件,则必须在重新启动期间更新命令行选项。
重新启动mongod实例:
如果您使用的是配置文件:
如果您使用命令行选项而不是配置文件:
--nojournal
选项。skipShardingConfigurationChecks为true。disableLogicalSessionCacheRefresh为
。true--setParameter--replSet)。--shardsvr/ --configsvr选项。--port设置为实例的当前端口。对mongod实例执行干净关闭:
确认该进程不再运行。
更新配置文件以准备使用新的日志压缩器重新启动:
storage.journal.enabled设置。skipShardingConfigurationChecks参数设置。disableLogicalSessionCacheRefresh参数设置。sharding.clusterRole设置。storage.wiredTiger.engineConfig.journalCompressor设置以使用默认的日志压缩器或指定新值。例如:
如果使用命令行选项而不是配置文件,则必须在下面的重新启动过程中更新命令行选项。
mongod作为副本集成员重新启动实例:
如果您使用的是配置文件:
如果您使用命令行选项而不是配置文件:
--nojournal选项。skipShardingConfigurationChecks参数设置。disableLogicalSessionCacheRefresh参数设置。--wiredTigerJournalCompressor命令行选项以使用默认的日志压缩器或更新为新值。--shardsvr/ --configsvr选项。zstd数据压缩¶重要
如果还使用 zstd Journal Compression,请在执行日记压缩器的必备步骤之后执行以下步骤。
该zstd压缩库可在4.2版本开始。对于任何使用zstd压缩存储数据的配置服务器成员或分片成员,降级过程将需要对该成员进行初始同步。准备:
为该实例创建一个新的空白。此目录将在下面的降级过程中使用。data directorymongod
重要
确保正在运行的用户帐户mongod具有新目录的读写权限。
如果使用配置文件,请更新该文件以准备降级过程:
storage.wiredTiger.collectionConfig.blockCompressor
以使用默认压缩器(snappy)或设置为其他4.0支持的压缩器。storage.dbPath到新的数据目录。zstd网络压缩¶该zstd压缩库可用于网络消息压缩4.2版开始。
准备降级:
对于任何mongod/ mongos实例用途zstd用于网络消息压缩并使用配置文件中,更新
net.compression.compressors设定为降级过程期间重新启动作好准备。
对于zstd在其中指定的任何客户端,请更新以从列表中删除。URI
connection stringzstd
对于在
mongo其中指定的任何shell ,请更新以从列表中删除。zstd--networkMessageCompressorszstd
重要
当双方都启用网络压缩时,消息将被压缩。否则,双方之间的消息将不被压缩。
重要
在降级服务器之前,请删除应用程序中的客户端字段级加密代码 。
MongoDB 4.2增加了对
强制客户端字段级加密的支持,这是集合的
JSON Schema文档验证的一部分。具体来说,该$jsonSchema对象支持
encrypt和encryptMetadata
关键字。MongoDB的4.0并不能支持这些关键字,并无法启动如有系列S