原文:
MongoDBhttp://t.zoukankan.com/realcp1018-p-15532868.html
官方文档提供了版本升级的说明,本文只介绍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
Upgrade a Standalone to 3.6 — MongoDB Manual
Upgrade a Replica Set to 3.6 — MongoDB Manual
Upgrade a Sharded Cluster to 3.6 — MongoDB Manual
Downgrade 3.6 Standalone to 3.4 — MongoDB Manual
Downgrade 3.6 Replica Set to 3.4 — MongoDB Manual
Downgrade 3.6 Sharded Cluster to 3.4 — MongoDB Manual
三、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
四、4.0==>4.2
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
-
确保未跨偶数版本升级,即3.4只能升级到3.6
-
确保应用使用的mongodb驱动兼容了.6版本
通过Start Developing with MongoDB — MongoDB Drivers来查看各语言的mongo驱动。
-
查看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)
-
3.6后新增read concern=majority选项
此配置项确保数据被多数节点同步后才会读取到数据,一般使用默认的local配置项即可,无需特意修改。
5.2 升级前的准备
- 确保所有节点的featureCompatibilityVersion参数设置正确,查询和更改语句如下:
db.adminCommand( { getParameter: 1, featureCompatibilityVersion: 1 } )
db.adminCommand( { setFeatureCompatibilityVersion: “3.4” } )
2. 确保没有副本集节点处于ROLLBACK or RECOVERING状态。
- 在要升级的节点安装3.6版本的mongodb。
5.3 升级流程
-
关闭3.4版本的实例(如果是primary,当然要先stepdown啦),然后使用3.6的二进制文件替换3.4版本的。
这里要注意,如果单机多实例部署且公用二进制文件,则需要确认是否一并升级所有集群,如果否那么先把其他节点迁走。如果不共用二进制文件那么替换自己的二进制文件即可。
-
依次替换所有节点的二进制文件。
-
设置版本兼容性为3.6,primary节点执行,可重试(幂等操作)。
db.adminCommand( { setFeatureCompatibilityVersion: “3.6” } )
升级完毕。
注意事项:
mongodb的二进制安装包是tgz包,替换掉原有二进制包即可,也可以把conf安装配置文档复制到最新的二进制文件夹中,启动的时候引用新安装包即可