MongoDB官方文档提供了版本升级的说明,本文只介绍3.0==>3.2==>3.4==>3.6==>4.0==>4.2之间的升级文档,其他版本之间的暂不添加,可自行到官网搜索。
注意:MongoDB的升级路径必须是按偶数版本循序渐进的(偶数版本一般是稳定版本)。不能直接跨偶数版本的由3.2升级至3.6或者3.4升级至4.0。
一、3.2==>3.4
- Upgrade a Standalone to 3.4 — MongoDB Manual
- Upgrade a Replica Set to 3.4 — MongoDB Manual
- Upgrade a Sharded Cluster to 3.4 — MongoDB Manual
- Downgrade 3.4 Standalone to 3.2 — MongoDB Manual
- Downgrade 3.4 Replica Set to 3.2 — MongoDB Manual
- Downgrade 3.4 Sharded Cluster to 3.2 — MongoDB Manual
二、3.4==>3.6
三、3.6==>4.0
- Upgrade a Standalone to 4.0 — MongoDB Manual
- Upgrade a Replica Set to 4.0 — MongoDB Manual
- Upgrade a Sharded Cluster to 4.0 — MongoDB Manual
- Downgrade 4.0 Standalone to 3.6 — MongoDB Manual
- Downgrade 4.0 Replica Set to 3.6 — MongoDB Manual
- Downgrade 4.0 Sharded Cluster to 3.6 — MongoDB Manual
- Upgrade a Standalone to 4.2 — MongoDB Manual
- Upgrade a Replica Set to 4.2 — MongoDB Manual
- Upgrade a Sharded Cluster to 4.2 — MongoDB Manual
- Downgrade 4.2 Standalone to 4.0 — MongoDB Manual
- Downgrade 4.2 Replica Set to 4.0 — MongoDB Manual
- Downgrade 4.2 Sharded Cluster to 4.0 — MongoDB Manual
鉴于文档和场景较多,只里只选一个3.4ReplicaSet升级至3.6ReplicaSet的文档做解释,不通版本的副本集升级大同小异,查看各个版本的升级文档即可;分片集的升级则需要细看升级文档,官方提示:升级之前要做到对升级文档了熟于心!!!
5.1 升级前的checklist
1. 确保未跨偶数版本升级,即3.4只能升级到3.6
2. 确保应用使用的mongodb驱动兼容了.6版本
通过Start Developing with MongoDB — MongoDB Drivers来查看各语言的mongo驱动。
3. 查看3.6的兼容性更改,确保你的应用和服务部署与3.6版本兼容,文档地址:Compatibility Changes in MongoDB 3.6 — MongoDB Manual
简单的看了一眼第一个localhost binding需要注意,3.6以后为安全起见mongodb默认绑定到localhost地址,这样会禁止外部连接访问,需要你设置为绑定本地网卡外部IP地址,同时建议开启权限认证,确保安全。
然后配置文件中有些配置项被移除了,需要看下自己用没用,用了的也一并提前移除,否则会导致实例起不来。至于查询语句的差异则可以不用重视。
net.http.enabled net.http.JSONPEnabled net.http.port net.http.RESTInterfaceEnabled httpinterface nohttpinterface jsonp rest
4. 确保没有Initial Sync在跑
即确保没有其他secondary在做全量同步(一般新增secondary节点或者secondary节点数据目录被清空时会触发initial sync)
5. 3.6后新增read concern=majority选项
此配置项确保数据被多数节点同步后才会读取到数据,一般使用默认的local配置项即可,无需特意修改。
5.2 升级前的准备
1. 确保所有节点的featureCompatibilityVersion参数设置正确,查询和更改语句如下:
db.adminCommand( { getParameter: 1, featureCompatibilityVersion: 1 } ) db.adminCommand( { setFeatureCompatibilityVersion: "3.4" } )
2. 确保没有副本集节点处于ROLLBACK or RECOVERING状态。
5.3 升级流程
1. 关闭3.4版本的实例(如果是primary,当然要先stepdown啦),然后使用3.6的二进制文件替换3.4版本的。
这里要注意,如果单机多实例部署且公用二进制文件,则需要确认是否一并升级所有集群,如果否那么先把其他节点迁走。如果不共用二进制文件那么替换自己的二进制文件即可。
2. 依次替换所有节点的二进制文件。
3. 设置版本兼容性为3.6,primary节点执行,可重试(幂等操作)。
db.adminCommand( { setFeatureCompatibilityVersion: "3.6" } )
升级完毕。