参考 > 发行说明 > MongoDB 3.2发行说明 > 从3.2降级MongoDB
在尝试任何降级之前,请熟悉本文档的内容,尤其是《降级建议和清单》 以及降级群集的过程。
降级时,请考虑以下因素:
要降级,请使用3.0系列中的最新版本。
如果您具有版本3文本索引(即MongoDB 3.2中文本索引的默认版本),请在降级MongoDB之前删除版本3文本索引。降级后,重新创建删除的文本索引。
要确定text
索引的版本,请运行
db.collection.getIndexes()
以查看索引规格。对于文本索引,该方法在字段中返回版本信息
textIndexVersion
。例如,以下显示
集合text
上的索引quotes
是版本3。
2dsphere
索引版本检查¶如果您具有版本3 2dsphere
索引(即2dsphere
MongoDB 3.2中索引的默认版本),请在降级MongoDB之前删除版本3
2dsphere
索引。降级后,重新创建2dsphere
索引。
要确定2dsphere
索引的版本,请运行
db.collection.getIndexes()
以查看索引规格。对于
2dsphere
索引,该方法在字段中返回版本信息
2dsphereIndexVersion
。例如,以下显示
集合2dsphere
上的索引locations
是版本3。
在降级MongoDB之前,请删除所有部分索引。
mongod
实例¶以下步骤概述了将独立mongod
版本从3.2 降级
到3.0的过程。
对于降级,请使用3.0系列中的最新版本。
mongod
实例重新启动。¶重要
如果您的mongod
实例使用的是WiredTiger存储引擎,则必须在3.0二进制文件中包含该
--storageEngine
选项(或者storage.engine
如果使用配置文件)。
以下步骤概述了副本集的“滚动”降级过程。“滚动”降级过程通过在其他成员可用时分别对成员进行降级来最大程度地减少停机时间:
降级副本集的每个辅助成员,一次降级一个:
关闭mongod
。有关安全终止进程的说明,请参阅停止mongod进程mongod
。
将3.2二进制文件替换为3.0二进制文件,然后重新启动。
重要
如果您的mongod
实例使用的是WiredTiger存储引擎,则必须在3.0二进制文件中包含该
--storageEngine
选项(或者storage.engine
如果使用配置文件)。
等待成员恢复SECONDARY
状态,然后再降级下一个辅助节点。要检查成员的状态,请使用外壳程序中的rs.status()
方法mongo
。
mongod
。¶当rs.status()
显示主节点已退出并且另一个成员已PRIMARY
进入状态时,请关闭前一个主mongod
节点,然后用3.0二进制文件替换二进制文件并启动新实例。
重要
如果您的mongod
实例使用的是WiredTiger存储引擎,则必须在3.0二进制文件中包含该
--storageEngine
选项(或者storage.engine
如果使用配置文件)。
副本集故障转移不是即时的,但将导致该集不可用于写入和中断读取,直到故障转移过程完成为止。通常,这需要10秒钟或更长时间。您可能希望在预定的维护时段内计划降级。
在降级过程中,您无法更改集合元数据。例如,降级过程中,千万 不能做任何以下内容:
sh.enableSharding()
sh.shardCollection()
sh.addShard()
db.createCollection()
db.collection.drop()
db.dropDatabase()
对于每个副本集碎片:
mongod
次级之前降级的主。replSetStepDown
然后再降级。有关降级副本集的详细信息,请参阅降级3.2副本集。
如果分片群集将3个镜像mongod
实例用于配置服务器,请按照--configdb
选项
中的相反顺序降级这三个实例mongos
。例如,如果mongos
具有以下--configdb
列表:
第一次降级confserver3
,那么confserver2
,最后,
confserver1
。如果您的mongod
实例使用的是
WiredTiger存储引擎,则必须在3.0二进制文件中包含该--storageEngine
选项(或者
storage.engine
如果使用配置文件)。
minOpTimeUpdaters
值。¶如果分片群集对每个分片使用CSRS,请检查该值以查看其是否为零。一个
零值,表明有没有进行中的迁移。非零值表示正在进行迁移,或者先前完成的迁移因某种原因未能清除该值,因此应清除。minOpTimeUpdaters
minOpTimeUpdaters
minOpTimeUpdaters
要检查值,对于每个分片,请连接到主要成员(或者,如果分片是独立的,则连接到独立的)并system.version
在admin
数据库中查询该minOpTimeRecovery
文档的集合:
如果minOpTimeUpdaters
为非零值,则通过降低当前主变量来清除该值。当选择新的主数据库时,将清除该值。
如果该分片是独立的,请重新启动该分片以清除该值。
如果分片群集使用CSRS:
从副本集中删除次要成员,使其只有一个主要成员和两个次要成员,并且只有主要成员可以投票并有资格成为主要成员;即其他两名成员拥有0
的
votes
和priority
。
将mongo
外壳连接到主外壳并运行:
replSetStepDown
对admin
数据库使用降级的主数据库。确保有足够的时间让中学学习。
将mongo
外壳连接到主外壳并运行:
关闭配置服务器副本集,mongos
实例和分片的所有成员。
如果要回滚到MMAPv1:
以独立身份启动CSRS成员;即没有--replSet
或,如果使用配置文件,则为replication.replSetName
。
运行mongodump
以转储config
数据库,然后关闭CSRS
成员。
包括部署所需的所有其他选项。
为mongod
将与MMAPv1存储引擎一起运行的新实例创建数据目录。mongod
必须具有数据目录的读写权限。
mongod
使用MMAPv1的用户不会以使用其他存储引擎创建的数据文件开头。
以MMAPv1独立版本重新启动mongod,即使用
和不使用或(如果使用配置文件,则使用)。--storageEngine mmapv1
--replSet
replication.replSetName
使用到还原转储到新MMAPv1 。mongorestore --drop
config
mongod
对CSRS的每个成员重复上述步骤。
(可选)一旦分片群集联机并按预期工作,请删除WiredTiger数据目录。
将每个配置服务器重新启动为独立版本3.2 mongod
;即没有--replSet
或,如果使用配置文件,则为replication.replSetName
。
mongos
实例。¶重要
当配置服务器从副本集更改为三个镜像mongod
实例时,请更新
--configdb
设置。所有mongos
必须使用相同的--configdb
字符串。
降级二进制文件并重新启动。
降级二进制文件并重新启动。在中的--configdb
选项中
按降序排列降级mongos
。
如果您的mongod
实例使用的是WiredTiger存储引擎,则必须在3.0二进制文件中包含该
--storageEngine
选项(或者storage.engine
如果使用配置文件)。
对于每个分片,使用以下删除操作minOpTimeRecovery
从admin.system.version
集合中删除文档
。如果该分片是副本集,请在副本集的主副本上针对每个分片执行remove操作:
注意
如果群集在启用身份验证的情况下运行,则您必须拥有一个具有适当特权的用户才能minOpTimeRecovery
从admin.system.version
集合中删除文档。以下操作downgrade
在admin
数据库上创建具有适当特权的用户:
对于每个副本集碎片,请降级mongod
二进制文件并重新启动。如果您的mongod
实例使用的是
WiredTiger存储引擎,则必须在3.0二进制文件中包含该--storageEngine
选项(或者storage.engine
如果使用配置文件)。
mongod
次级之前降级的主。replSetStepDown
然后再降级。有关降级副本集的详细信息,请参阅降级3.2副本集。
(可选)local
从SCCC成员中删除数据库(如果存在)。