参考 > 发行说明 > MongoDB 2.6发行说明 > 将MongoDB升级到2.6
在本页面
通常,从MongoDB 2.4升级到2.6是二进制兼容的“嵌入式”升级:关闭mongod
实例并用mongod
运行2.6 的实例替换它们。但是,在尝试进行任何升级之前,请熟悉本文档的内容,尤其是《
升级建议和清单》,分片群集的升级过程以及在运行2.6之后恢复为2.4的注意事项
。
升级时,请考虑以下事项:
要将现有的MongoDB部署升级到2.6,必须运行2.4。如果您正在运行 2.4之前的MongoDB版本,则必须先升级到2.4,然后再升级到2.6。有关从2.2 升级到2.4的过程,请参阅将 MongoDB升级到2.4。
如果您使用MongoDB Cloud Manager Backup,请确保在升级之前至少运行v20131216.1
Backup Agent的版本
。版本1.4.0
备份代理的跟随v20131216.1
升级之前,在将升级部署到生产环境之前,MongoDB始终在过渡环境中测试您的应用程序。
要开始升级过程,请将2.6 mongo
Shell 连接到您的MongoDB 2.4 mongos
或mongod
运行
db.upgradeCheckAllDBs()来检查数据集的兼容性。这是初步的自动检查。评估并解决db.upgradeCheckAllDBs()确定的所有问题。
MongoDB 2.6中的某些更改需要手动检查和干预。有关这些更改的说明,请参阅MongoDB 2.6中的兼容性更改。在继续之前,请解决部署中的所有不兼容性。
对于使用身份验证和授权的部署,在升级MongoDB二进制文件之前,请确保admin
数据库中至少有一个具有该角色的
用户。对于当前使用身份验证和授权的部署,请参阅有关使用身份验证和授权的部署的注意事项。userAdminAnyDatabase
MongoDB 2.6对授权模型进行了重大更改,这需要更改MongoDB存储用户凭据的方式。因此,除了升级MongoDB进程外,如果您的部署使用身份验证和授权,则在将所有MongoDB进程升级到2.6之后,您还必须升级授权模型。
在开始使用身份验证和授权的部署的升级过程之前:
admin
数据库中至少存在一个具有角色的用户userAdminAnyDatabase
。<database>.system.users
收集或使用
db.addUser()
样的方法,那么你必须
升级那些驱动程序(即客户端库)之前
mongod
或mongos
实例。开始将使用身份验证的MongoDB部署升级到2.6之后,您将无法修改现有用户数据,直到完成授权用户架构升级。
有关授权模型的升级过程(包括其他要求和过程)的完整讨论,请参阅将用户授权数据升级为2.6格式。
升级到MongoDB 2.6后,您将无法降级到MongoDB 2.4之前的任何版本。如果您在
运行2.6时创建text
或创建2dsphere
索引,则只能降级到MongoDB 2.4.10或更高版本。
mongod
实例升级到MongoDB 2.6¶以下步骤概述了将独立mongod
版本从2.4 升级
到2.6的过程。要从2.2版升级到2.6 版, 请先升级到2.4版,然后按照以下步骤从2.4版升级到2.6版。
mongod
实例。将现有的二进制文件替换为2.6 mongod
二进制文件,然后重新启动mongod
。以下步骤概述了将副本集从MongoDB 2.4升级到MongoDB 2.6的过程。从MongoDB的2.2升级到2.6, 副本集的所有成员都升级到2.4版本, 第一,然后按照升级的MongoDB从2.4到2.6的过程。
您可以使用“滚动”升级从MongoDB 2.4升级到2.6,以通过在其他成员可用时分别升级成员来最大程度地减少停机时间:
rs.stepDown()
在mongo
shell中使用它可以降级主数据库并强制将其设置为故障转移。rs.stepDown()
加快故障转移过程,并且比直接关闭主数据库更可取。
当rs.status()
显示主节点已退出并且另一个成员已PRIMARY
进入状态时,请关闭先前的主节点,并用mongod
2.6二进制文件替换二进制文件并启动新实例。
副本集故障转移不是即时的,但是将使该集不可用,接受写入操作将一直持续到故障转移过程完成为止。通常,这需要30秒或更长时间:在计划的维护时段内计划升级过程。
如果集群的所有成员当前正在运行2.4实例,则仅将分片集群升级到2.6 。运行2.2的分片群集的唯一受支持的升级路径是通过2.4。升级过程将检查群集的所有组件,如果任何组件正在运行2.2版,则将生成警告。
升级过程不需要任何停机时间。但是,在升级分片群集时,请确保客户端不对集合元数据进行更改。例如,在升级过程中,也没有 做任何以下内容:
sh.enableSharding()
sh.shardCollection()
sh.addShard()
db.createCollection()
db.collection.drop()
db.dropDatabase()
可选,但推荐。作为预防措施,在升级分片群集之前,请对config
数据库进行备份
。
mongos
通过configDB
指向群集的配置服务器和--upgrade
选项启动单个2.6 实例。
要运行mongos
带有该--upgrade
选项的,您可以将现有mongos
实例升级到2.6,或者如果您需要避免重新配置生产mongos
实例,则可以使用mongos
可以访问所有配置服务器的新2.6 。
要升级元数据,请运行:
您可以包括将--logpath
日志消息输出到文件而不是标准输出的选项。还包括启动mongos
集群中的实例所需的任何其他选项
,例如
--sslOnNormalPorts
或
--sslPEMKeyFile
。
该操作mongos
将在该--upgrade
过程完成后退出
。
升级将防止在升级过程中发生任何块移动或分裂。如果数据文件具有许多分片的集合,或者失败的进程持有过时的锁,则获取所有集合的锁可能需要几秒钟或几分钟的时间。查看日志以获取进度更新。
成功升级所有 mongos
实例后,可以升级MongoDB部署中的其他实例。
在仍然禁用平衡器的情况下,请按以下顺序升级分片群集的组件:
mongod
配置服务器实例,使第一个系统保留在参数last升级中
。mongos --configdb
mongod
在运行replSetStepDown
和升级每个分片的主数据库之前先升级第二个。完成此过程后,请重新启用平衡器。
升级到MongoDB 2.6后,您将无法降级到MongoDB 2.4之前的任何版本。如果有text
或2dsphere
索引,则只能降级到MongoDB 2.4.10或更高版本。
除非本页中有描述,否则在2.4和2.6之间移动是一种直接替代:
mongod
实例。¶例如,在Linux上,mongod
使用以下
--shutdown
选项运行2.4 :
/var/mongod/data
用您的MongoDB 替换dbPath
。另请参见Stop mongod进程,以了解停止mongod
实例的替代方法。