步步爲營,mongodb3.2.x版本升級至4.2.x版本全過程——面向standalone和副本集部署模式

注:
mongodb所有部署模式都不可以跨版本升級
3.2.x版本升級到4.2.x版本升級路線如下:
1.升級至3.4.x版本
2.升級至3.6.x版本
3.升級至4.0.x版本
4.升級至4.2.x版本

一.standalone部署模式升級步驟

1.1 升級前準備

1.在官網下載好各版本mongodb安裝包。
2.停止所有應用程序對mongodb的讀寫操作。(保險起見可先關閉防火牆中開啓的mongod實例端口)
3.備份數據庫數據,目的:一旦升級版本很難降級,假如出現問題,可執行版本回滾,進行數據庫恢復。

1.2 執行升級

1.2.1 升級至3.4.x版本:

1.下載3.4.x版本gz文件,然後解壓
2.使用3.4.x版本bin目錄下mongod shell,用現有mongo.conf配置啓動實例
3.啓動實例後使用mongo shell登錄mongodb控制檯
執行修改兼容性版本命令:

db.adminCommand( { setFeatureCompatibilityVersion: "3.4" } )

如果報錯:

{
	"ok" : 0,
	"errmsg" : "not authorized on admin to execute command { setFeatureCompatibilityVersion: \"3.4\" }",
	"code" : 13,
	"codeName" : "Unauthorized"
}

需添加root角色用戶,或使用具有root角色用戶賬戶登錄
添加root角色用戶方式如下:

use admin;
db.createUser({"user":"dbupdater","pwd":"l79bv2PA","roles":[{role:"root",db:"admin"}]})
db.auth('dbupdater','l79bv2PA')

再使用新創建的root角色用戶登錄,執行修改兼容性版本爲3.4命令:

db.adminCommand( { setFeatureCompatibilityVersion: "3.4" } )

4.查看當前兼容性版本:

db.adminCommand( { getParameter: 1, featureCompatibilityVersion: 1 } )

返回

{ "featureCompatibilityVersion" : "3.4", "ok" : 1 }

說明兼容性版本更改成功

1.2.2 從3.4.x版本升級至3.6.x版本

1.關閉3.4的mongod進程,啓動3.6的mongod
2.執行修改兼容性版本命令:

db.adminCommand( { setFeatureCompatibilityVersion: "3.6" } )

返回:

{ "ok" : 1 }

執行成功
3.查看當前兼容性版本:

db.adminCommand( { getParameter: 1, featureCompatibilityVersion: 1 } )

返回:

{ "featureCompatibilityVersion" : { "version" : "3.6" }, "ok" : 1 }

兼容性版本更改成功

1.2.3 從3.6.x版本升級至4.0.x版本(操作同上)

1.關閉3.6的mongod進程,啓動4.0的mongod
2.執行修改兼容性版本命令:

db.adminCommand( { setFeatureCompatibilityVersion: "4.0" } )

返回:

{ "ok" : 1 }

執行成功
3.查看當前兼容性版本:

db.adminCommand( { getParameter: 1, featureCompatibilityVersion: 1 } )

返回:

{ "featureCompatibilityVersion" : { "version" : "4.0" }, "ok" : 1 }

升級成功

1.2.4 從4.0.x版本升級至4.2.x版本(操作同上)

注:從4.2.x版本開始,mongodb將不再支持MMPv1引擎,相關配置項將失效

1.關閉4.0.x版本的mongod進程,啓動4.2.x的mongod
2.執行修改兼容性版本命令:

db.adminCommand( { setFeatureCompatibilityVersion: "4.2" } )

返回:

{ "ok" : 1 }

查看當前兼容性版本:

db.adminCommand( { getParameter: 1, featureCompatibilityVersion: 1 } )

返回:

{ "featureCompatibilityVersion" : { "version" : "4.2" }, "ok" : 1 }

standalone部署模式升級完成。

二.副本集部署模式升級步驟

注:
可參考官網不停機平滑升級模式(對業務影響較小):
1.先在primary節點執行rs.stepDown()觸發副本集primary節點的降級。
2.執行rs.status()命令,查看primary節點降級是否成功,stateStr變爲SECONDARY,則成功。
3.停止該節點mongod進程 使用3.4.x版本二進制文件替換原文件,按副本集模式重啓該mongod。 依次替換所有節點的二進制文件。
4.在primary節點,執行修改兼容性版本命令(會自動同步到其他副本集節點): db.adminCommand( {
setFeatureCompatibilityVersion: “3.4” } )
5.查看當前兼容性版本是否修改成功:
db.adminCommand( { getParameter: 1, featureCompatibilityVersion: 1 } )

本方案採用停機升級方式。

2.1 升級前準備

1.停止所有應用程序對mongodb的讀寫操作。(保險起見可先關閉防火牆中開啓的mongod實例端口)
2.備份數據庫數據,目的:一旦升級版本很難降級,假如出現問題,可執行版本回滾,進行數據庫恢復。
3.創建具有clusterAdmin角色的用戶
4.下載各版本mongodb文件並準備好數據庫配置文件。

創建具有clusterAdmin角色的用戶方式如下:
a.使用具有clusterAdmin角色的用戶登錄mongo shell:

use admin
db.getCollection("system.users").find({})

b.查詢是否有具有clusterAdmin,若無,添加具有clusterAdmin角色的用戶。

exp:
db.createUser({"user":"abc","pwd":"123456","roles":[{role:"root",db:"admin"},{role:"clusterAdmin",db:"admin"}]})
db.auth('abc','123456')

注:
如遇執行命令報錯: not authorized on admin to execute command 解決方式:
註釋當前副本集節點的副本集相關配置,以standalone模式創建mongod實例,再登錄mongo shell創建用戶

創建完成後
還原註釋掉的副本集配置,以副本集模式重啓該mongod實例。

2.2 執行升級

2.2.1 從3.2.x版本升級到3.4.x版本

使用創建的clusterAdmin角色用戶登錄mongodb
在副本集primary節點依次執行(兼容性版本設置,會自動同步到副本集節點):
1.修改兼容性版本命令:

db.adminCommand( { setFeatureCompatibilityVersion: "3.4" } )

2.查看當前兼容性版本是否修改成功:

db.adminCommand( { getParameter: 1, featureCompatibilityVersion: 1 } )

注:
3.4.x版本如果遇到mongod啓動失敗,日誌報錯: exception in initAndListen: 28595 -31802: WT_ERROR: non-specific WiredTiger error, terminating 需進入數據文件夾 執行如下刪除命令
rm -rf journal rm -rf mongod.lock rm -rf WiredTiger.lock

待所有副本集節點同步完成進行下一步

2.2.2 從3.4.x版本升級到3.6.x版本

停止所有mongod實例(請使用如下方式停止mongod實例,而非kill進程方式):
打開mongo shell,執行:

use admin
db.shutdownServer()

注: 須在配置文件中增加 bind_ip_all = true 配置
允許mongod和mongo實例使用所有連接,否則只能通過127.0.0.1訪問。該配置從3.6版本開始支持,詳情參見:https://docs.mongodb.com/manual/reference/configuration-options/index.html#net.bindIpAll
否則會出現副本集節點之間報錯:
HostUnreachable: Connection refused

1.使用3.6.x版本重啓所有副本集實例。
2.採用之前方式,在副本集primary節點執行(兼容性版本設置,會自動同步到副本集節點)。
修改兼容性版本命令:

db.adminCommand( { setFeatureCompatibilityVersion: "3.4" } )

查看當前兼容性版本是否修改成功:

db.adminCommand( { getParameter: 1, featureCompatibilityVersion: 1 } )

待所有副本集節點同步完成進行下一步

2.2.3 從3.6.x版本升級到4.0.x版本

1.停止所有mongod實例(請使用這種方式停止mongod實例,而非kill進程方式):
打開mongo shell,執行:

use admin
db.shutdownServer()

2.使用4.0.x版本重啓所有副本集實例
3.採用之前方式,在副本集primary節點執行(兼容性版本設置,會自動同步到副本集節點)
修改兼容性版本命令:

db.adminCommand( { setFeatureCompatibilityVersion: "3.4" } )

查看當前兼容性版本是否修改成功:

db.adminCommand( { getParameter: 1, featureCompatibilityVersion: 1 } )

待所有副本集節點同步完成進行下一步

2.2.4 從4.0.x版本升級到4.2.x版本

1.停止所有mongod實例(請使用這種方式停止mongod實例,而非kill進程方式):
打開mongo shell,執行:

use admin
db.shutdownServer()

2.使用4.2.x版本重啓所有副本集實例
3.採用之前方式,在副本集primary節點執行(兼容性版本設置,會自動同步到副本集節點)
修改兼容性版本命令:

db.adminCommand( { setFeatureCompatibilityVersion: "3.4" } )

查看當前兼容性版本是否修改成功:

db.adminCommand( { getParameter: 1, featureCompatibilityVersion: 1 } )

待所有副本集節點同步完成,重啓所有mongod實例,升級完成。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章