参考 > 发行说明 > MongoDB 4.0发行说明 > 将分片群集升级到4.0
在本页面
重要
在尝试进行任何升级之前,请熟悉本文档的内容。
如果您需要有关升级到4.0的指导,MongoDB提供主要版本升级服务,以确保平稳过渡而不会中断您的MongoDB应用程序。
升级时,请考虑以下事项:
要将现有的MongoDB部署升级到4.0,必须运行3.6系列发行版。
要从3.6系列之前的版本升级,必须先升级主要版本,直到升级到3.6系列。例如,如果运行的是3.4系列,则必须先 升级到3.6, 然后才能升级到4.0。
在开始升级之前,请参阅MongoDB 4.0中的兼容性更改文档,以确保您的应用程序和部署与MongoDB 4.0兼容。开始升级之前,请解决部署中的不兼容性。
在升级MongoDB之前,请务必先在临时环境中测试应用程序,然后再将升级部署到生产环境中。
重新启动副本集时,以下过程包括命令行选项
--bind_ip
或配置选项
net.bindIp
。
从MongoDB 3.6开始,必须在不同主机上运行副本集成员或远程客户端连接到部署时指定选项。如果所有成员都在同一主机上运行并且所有客户端都在主机本地,则省略。
从MongoDB 3.6开始,"majority"
默认情况下,MongoDB启用对读取关注的支持
。
对于MongoDB 4.0.3+(和3.6.1+),您可以禁用读取关注,
"majority"
以防止存储高速缓存压力使具有主从仲裁器(PSA)体系结构或分片的三成员副本集的部署固定化具有三个成员PSA碎片的群集。
注意
禁用"majority"
读取关注会禁用对MongoDB 4.0及更早版本的变更流的支持。对于MongoDB 4.2+,禁用读取关注"majority"
不会影响更改流的可用性。
禁用"majority"
不影响
多文档交易;即"majority"
,即使"majority"
禁用读取关注,您也可以为事务指定读取关注。
有关更多信息,请参见禁用多数阅读关注。
MongoDB 4.0引入了新的十六进制编码的字符串更改流 恢复令牌:
恢复令牌_data
类型取决于MongoDB版本,在某些情况下,取决于更改流打开/恢复时的功能兼容性版本(fcv)(即,fcv值的更改不会影响已打开的更改流的恢复令牌。 ):
MongoDB版本 | 功能兼容版本 | 恢复令牌_data 类型 |
---|---|---|
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.0,群集的所有成员必须至少为3.6版。升级过程将检查群集的所有组件,如果任何组件运行的版本早于3.6,将产生警告。
对于分片和配置服务器,请确保没有副本集成员处于
ROLLBACK
或RECOVERING
状态。
MONGODB-CR
从版本4.0开始,MongoDB删除了对不赞成使用的MongoDB Challenge-Response(MONGODB-CR
)身份验证机制的支持。
如果您的部署中有存储在MONGODB-CR
架构中的用户凭据,则在升级到版本4.0 之前,必须先升级到Salted Challenge Response Authentication机制(SCRAM) 。有关升级到SCRAM的信息,请参阅
升级到SCRAM。SCRAM
也可以看看
pv0
副本集¶从版本4.0开始,MongoDB删除不推荐使用的副本集协议版本0 pv0
。
在升级到MongoDB 4.0之前,您必须升级到pv1
。
要升级到pv1
,请将mongo
外壳连接到主副本集,然后执行以下操作序列:
为了减少w:1
回滚的可能性,您还可以将副本集重新配置为更高的
settings.catchUpTimeoutMillis
设置。
有关的详细信息pv1
,请参阅
副本集协议版本。
MongoDB 4.0删除了对不赞成使用的主从复制的支持。在升级到MongoDB 4.0之前,如果您的部署使用主从复制,则必须升级到副本集。
要将主从复制转换为副本集,请参阅 将主从部署转换为副本集。
$isolated
MongoDB放弃了对$isolated
运营商的支持。如果您已有一个包含$isolated
运算符的局部索引或一个包含运算符的视图,请$isolated
在升级之前重新创建索引或视图,而在定义中不包含运算符。
3.6分片群集必须
featureCompatibilityVersion
设置为3.6
。
为了确保分片群集的所有成员都
featureCompatibilityVersion
设置为3.6
,请连接到每个分片副本集成员和每个配置服务器副本集成员,然后检查featureCompatibilityVersion
:
小费
对于已启用访问控制的分片群集,要对分片副本集成员运行以下命令,您必须以分片本地用户身份连接到该成员。
所有成员都应返回包含的结果
。"featureCompatibilityVersion" : { "version" : "3.6" }
要设置或更新featureCompatibilityVersion
,请在上运行以下命令mongos
:
有关更多信息,请参见
setFeatureCompatibilityVersion
。
config
数据库¶可选,但推荐。作为预防措施,在升级分片群集之前,请对config
数据库进行备份
。
将mongo
外壳连接到分片mongos
群集中的实例,然后运行sh.stopBalancer()
以禁用平衡器:
注意
如果正在进行迁移,则系统将在停止平衡器之前完成正在进行的迁移。您可以运行
sh.isBalancerRunning()
以检查平衡器的当前状态。
要验证是否禁用了平衡器,请运行run
sh.getBalancerState()
,如果禁用了平衡器,则返回false:
有关禁用平衡器的更多信息,请参阅 禁用平衡器。
一次升级 一个副本集的辅助成员:
关闭辅助mongod
实例,然后用4.0二进制文件替换3.6二进制文件。
启动4.0二进制用--configsvr
,
--replSet
和--port
。包括部署使用的任何其他选项。
注意
--nojournal
选项或使用WiredTiger存储引擎的副本集成员。storage.journal.enabled:
false
--noIndexBuildRetry
或者storage.indexBuildRetry
一个
mongod
实例是副本集的一部分。如果使用配置文件,更新文件来指定,,
,和,然后启动4.0二进制文件:sharding.clusterRole: configsvr
replication.replSetName
net.port
net.bindIp
包括适用于您的部署的任何其他设置。
注意
--nojournal
选项或使用WiredTiger存储引擎的副本集成员。storage.journal.enabled:
false
--noIndexBuildRetry
或者storage.indexBuildRetry
一个
mongod
实例是副本集的一部分。等待成员恢复SECONDARY
状态,然后再升级下一个辅助成员。要检查成员的状态,请rs.status()
在mongo
shell中发出。
对每个次要成员重复上述步骤。
降级主副本集。
将mongo
外壳连接到主要数据库,并用于
rs.stepDown()
降低主要数据库并强制选择新的主要数据库:
当rs.status()
显示主节点已降级并且另一个成员已PRIMARY
处于状态时,请关闭已降级的主mongod
节点,然后用4.0二进制文件替换二进制文件。
启动4.0二进制用--configsvr
,--replSet
,
--port
,和--bind_ip
选项。包括先前部署使用的所有可选命令行选项:
注意
--nojournal
选项或使用WiredTiger存储引擎的副本集成员。storage.journal.enabled:
false
--noIndexBuildRetry
或者storage.indexBuildRetry
一个
mongod
实例是副本集的一部分。如果使用配置文件,更新文件来指定,,
,和,然后启动4.0二进制文件:sharding.clusterRole: configsvr
replication.replSetName
net.port
net.bindIp
包括适合您的部署的任何其他配置。
注意
--nojournal
选项或使用WiredTiger存储引擎的副本集成员。storage.journal.enabled:
false
--noIndexBuildRetry
或者storage.indexBuildRetry
一个
mongod
实例是副本集的一部分。一次升级一个碎片。
对于每个分片副本集:
一次升级 一个副本集的辅助成员:
关闭mongod
实例,然后用4.0二进制文件替换3.6二进制文件。
启动4.0二进制用--shardsvr
,--replSet
,
--port
,和--bind_ip
选项。包括适用于您的部署的所有其他命令行选项:
注意
--nojournal
选项或使用WiredTiger存储引擎的副本集成员。storage.journal.enabled:
false
--noIndexBuildRetry
或者storage.indexBuildRetry
一个
mongod
实例是副本集的一部分。如果使用配置文件,更新文件,包括,
,,和
,然后启动4.0二进制文件:sharding.clusterRole: shardsvr
replication.replSetName
net.port
net.bindIp
包括适合您的部署的任何其他配置。
注意
--nojournal
选项或使用WiredTiger存储引擎的副本集成员。storage.journal.enabled:
false
--noIndexBuildRetry
或者storage.indexBuildRetry
一个
mongod
实例是副本集的一部分。等待成员恢复SECONDARY
状态,然后再升级下一个辅助成员。要检查成员的状态,可以rs.status()
在
mongo
shell中发出。
对每个次要成员重复上述步骤。
降级主副本集。
将mongo
外壳连接到主要数据库,并用于
rs.stepDown()
降低主要数据库并强制选择新的主要数据库:
当rs.status()
显示主节点已卸任并且另一成员已PRIMARY
处于状态时,请升级已卸除的主抵押:
关闭逐步降低的主数据库,然后用mongod
4.0二进制文件替换
二进制文件。
启动4.0二进制用--shardsvr
,--replSet
,
--port
,和--bind_ip
选项。包括适用于您的部署的所有其他命令行选项:
注意
--nojournal
选项或使用WiredTiger存储引擎的副本集成员。storage.journal.enabled:
false
--noIndexBuildRetry
或者storage.indexBuildRetry
一个
mongod
实例是副本集的一部分。如果使用配置文件,更新文件来指定,,
,和,然后启动4.0二进制文件:sharding.clusterRole: shardsvr
replication.replSetName
net.port
net.bindIp
包括适合您的部署的任何其他配置。
注意
--nojournal
选项或使用WiredTiger存储引擎的副本集成员。storage.journal.enabled:
false
--noIndexBuildRetry
或者storage.indexBuildRetry
一个
mongod
实例是副本集的一部分。mongos
实例。¶将每个mongos
实例替换为4.0二进制文件并重新启动。包括适合您的部署的任何其他配置。
注意
--bind_ip
当分片群集成员在不同主机上运行时,或者如果远程客户端连接到分片群集,则必须指定该选项。有关更多信息,请参见
Localhost绑定兼容性更改。