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
- 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
- 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" } )
升級完畢。