總結:整理不易,如果對你有幫助,可否點贊關注一下?


一、部署背景

由於業務系統的特殊性,我們需要面向不同客户環境部署定製化的系統實例。作為基礎組件之一,MongoDB在各類客户現場需頻繁 部署高可用分片集羣。尤其在支持多種 CPU 架構 (如 x86_64 和 ARM64)的場景下,手動部署不僅效率低下,還容易引發配置不一致等問題。

當前我們已採用 MongoDB 7.0.22 容器化版本,具備良好的可移植性與環境隔離能力。為進一步提升運維效率、降低人為錯誤風險,有必要開發一套 自動化部署工具,專門用於快速、可靠地構建跨架構(x86_64 + ARM64)的 MongoDB 分片集羣,實現部署流程的標準化、批量化和可重複化。

CPU架構

docker版本

docker-compose版本

X86_64

26.1.3

v2.29.0

ARM64

26.1.3

v2.29.0


二、工具介紹

一鍵部署工具實現功能如下:

1、支持 ARM64與x86_64架構 CPU,確保在異構硬件環境下均可部署運行。
2、支持TLS/SSL全鏈路通信加密, SSL證書有效期為100年,降低證書維護頻率與部署複雜度。
3、支持單節點MongoDB實例部署,適用於開發、測試或輕量級應用場景。
4、支持在同一主機上部署完整的偽分佈式分片集羣,包含:1個Config Server副本集,2個Shard副本集,3個mongos路由節點,實現本地模擬生產環境架構。
5、支持跨主機的生產級分佈式部署,架構包括:1個高可用Config Server副本集,2個獨立Shard副本集,3個mongos路由節點(負載均衡),滿足高併發、高可用業務需求。
6、支持數據目錄、日誌目錄路徑、服務端口、最大併發連接數、管理賬號與密碼、副本集名稱等靈活配置。
7、支持數據目錄、日誌目錄及核心配置文件的持久化存儲。
8、支持集羣的創建、啓動、停止、卸載等完整生命週期操作,便於自動化運維與環境清理。
9、提供一鍵連接、一鍵備份、一鍵還原等便捷功能,提升運維效率,降低操作門檻。

如下圖所示:

《Linux運維實戰:Centos7.6基於docker-compose一鍵離線部署單節點redis6.2.8 》_docker離線部署redis_#運維


《Linux運維實戰:Centos7.6基於docker-compose一鍵離線部署單節點redis6.2.8 》_docker離線部署redis_#架構_02


《Linux運維實戰:Centos7.6基於docker-compose一鍵離線部署單節點redis6.2.8 》_docker離線部署redis_#linux_03


説明:工具使用非常簡單,只需要修改變量文件,就可以快速幫你快速部署mongodb 7.0.22分片集羣。


三、工具下載

基於X86_64+ARM64架構CPU使用docker-compose一鍵離線部署mongodb 7.0.22容器版分片集羣工具

主控腳本部分內容如下:

《Linux運維實戰:Centos7.6基於docker-compose一鍵離線部署單節點redis6.2.8 》_docker離線部署redis_#分片集羣_04


四、部署步驟

説明:單機偽集羣是指在單主機部署mongodb分片集羣,分佈式集羣是指在多個不同主機上部署mongodb分片集羣,這裏部署的是多機分佈式分片集羣。


4.1、部署規劃

1、查看幫助命令

《Linux運維實戰:Centos7.6基於docker-compose一鍵離線部署單節點redis6.2.8 》_docker離線部署redis_#架構_05

説明:這裏由於資源限制,使用4台服務器部署分片集羣。如果你的資源充足,建議每個實例使用單獨1台服務器部署。

宿主機IP

操作系統

內核版本

節點説明

192.168.1.111

Ubuntu 22.04.4 LTS

5.15.0-113-generic

配置服務副本集(1primary+2secondary,共3個實例)

192.168.1.112

Ubuntu 22.04.4 LTS

5.15.0-113-generic

分片1副本集(1primary+1secondary+1arbiter,共3個實例)

192.168.1.113

Ubuntu 22.04.4 LTS

5.15.0-113-generic

分片2副本集(1primary+1secondary+1arbiter,共3個實例)

192.168.1.114

Ubuntu 22.04.4 LTS

5.15.0-113-generic

路由節點(3個mongos實例)

説明:部署順序必須為
1、配置節點 > 分片節點1 > 分片節點2 > 路由節點
2、配置節點順序為secondary2>secondary1>primary,分片節點順序為arbiter>secondary>primary,路由節點順序為route1>route2>route3


4.2、部署配置服務副本集

1、準備一鍵部署工具包

説明:將一鍵部署工具包分上傳到config-secondary2節點。


2、編輯變量文件

説明:分片集羣所有節點變量文件相同。

root@config:/data/pkgs/mongodb-shard-cluster# cp cluster.conf.tpl cluster.conf
root@config:/data/pkgs/mongodb-shard-cluster# vim cluster.conf

如下圖所示:

《Linux運維實戰:Centos7.6基於docker-compose一鍵離線部署單節點redis6.2.8 》_docker離線部署redis_#架構_06


《Linux運維實戰:Centos7.6基於docker-compose一鍵離線部署單節點redis6.2.8 》_docker離線部署redis_#架構_07


《Linux運維實戰:Centos7.6基於docker-compose一鍵離線部署單節點redis6.2.8 》_docker離線部署redis_#分片集羣_08


3、配置服務副本集部署(192.168.1.111)

root@config:/data/pkgs/mongodb-shard-cluster# ./op.sh -a build -m config-secondary2
root@config:/data/pkgs/mongodb-shard-cluster# ./op.sh -a build -m config-secondary1
root@config:/data/pkgs/mongodb-shard-cluster# ./op.sh -a build -m config-primary

如下圖所示:

《Linux運維實戰:Centos7.6基於docker-compose一鍵離線部署單節點redis6.2.8 》_docker離線部署redis_#運維_09


4.3、分發部署包

説明:部署完config-secondary2實例後,將部署包分別發送到其它實例節點主機。

root@config:/data/pkgs# scp -r mongodb-shard-cluster root@192.168.1.112:/data/pkgs
root@config:/data/pkgs# scp -r mongodb-shard-cluster root@192.168.1.113:/data/pkgs
root@config:/data/pkgs# scp -r mongodb-shard-cluster root@192.168.1.114:/data/pkgs

4.4、部署分片1副本集

1、分片1副本集部署(192.168.1.112)

root@shard2:/data/pkgs/mongodb-shard-cluster# ./op.sh -a build -m shard1-arbiter
root@shard2:/data/pkgs/mongodb-shard-cluster# ./op.sh -a build -m shard1-secondary
root@shard2:/data/pkgs/mongodb-shard-cluster# ./op.sh -a build -m shard1-primary

如下圖所示:

《Linux運維實戰:Centos7.6基於docker-compose一鍵離線部署單節點redis6.2.8 》_docker離線部署redis_#分片集羣_10


4.5、部署分片2副本集

1、分片2副本集部署(192.168.1.113)

root@shard2:/data/pkgs/mongodb-shard-cluster# ./op.sh -a build -m shard2-arbiter
root@shard2:/data/pkgs/mongodb-shard-cluster# ./op.sh -a build -m shard2-secondary
root@shard2:/data/pkgs/mongodb-shard-cluster# ./op.sh -a build -m shard2-primary

如下圖所示:

《Linux運維實戰:Centos7.6基於docker-compose一鍵離線部署單節點redis6.2.8 》_docker離線部署redis_#運維_11


4.6、部署路由節點集羣

1、路由節點部署(192.168.1.114)

root@mongos:/data/pkgs/mongodb-shard-cluster# ./op.sh -a build -m route1
root@mongos:/data/pkgs/mongodb-shard-cluster# ./op.sh -a build -m route2
root@mongos:/data/pkgs/mongodb-shard-cluster# ./op.sh -a build -m route3

如下圖所示:

《Linux運維實戰:Centos7.6基於docker-compose一鍵離線部署單節點redis6.2.8 》_docker離線部署redis_#linux_12


五、其它操作

5.1、啓動

説明:分別在對應主機節點上執行。

root@localhost:/data/pkgs/mongodb-shard-cluster# ./op.sh -a start -m config-secondary2
root@localhost:/data/pkgs/mongodb-shard-cluster# ./op.sh -a start -m config-secondary1
root@localhost:/data/pkgs/mongodb-shard-cluster# ./op.sh -a start -m config-primary

root@localhost:/data/pkgs/mongodb-shard-cluster# ./op.sh -a start -m shard1-arbiter
root@localhost:/data/pkgs/mongodb-shard-cluster# ./op.sh -a start -m shard1-secondary
root@localhost:/data/pkgs/mongodb-shard-cluster# ./op.sh -a start -m shard1-primary

root@localhost:/data/pkgs/mongodb-shard-cluster# ./op.sh -a start -m shard2-arbiter
root@localhost:/data/pkgs/mongodb-shard-cluster# ./op.sh -a start -m shard2-secondary
root@localhost:/data/pkgs/mongodb-shard-cluster# ./op.sh -a start -m shard2-primary

root@localhost:/data/pkgs/mongodb-shard-cluster# ./op.sh -a start -m route1
root@localhost:/data/pkgs/mongodb-shard-cluster# ./op.sh -a start -m route2
root@localhost:/data/pkgs/mongodb-shard-cluster# ./op.sh -a start -m route3

5.2、停止

説明:分別在對應主機節點上執行。

root@localhost:/data/pkgs/mongodb-shard-cluster# ./op.sh -a stop -m config-secondary2
root@localhost:/data/pkgs/mongodb-shard-cluster# ./op.sh -a stop -m config-secondary1
root@localhost:/data/pkgs/mongodb-shard-cluster# ./op.sh -a stop -m config-primary

root@localhost:/data/pkgs/mongodb-shard-cluster# ./op.sh -a stop -m shard1-arbiter
root@localhost:/data/pkgs/mongodb-shard-cluster# ./op.sh -a stop -m shard1-secondary
root@localhost:/data/pkgs/mongodb-shard-cluster# ./op.sh -a stop -m shard1-primary

root@localhost:/data/pkgs/mongodb-shard-cluster# ./op.sh -a stop -m shard2-arbiter
root@localhost:/data/pkgs/mongodb-shard-cluster# ./op.sh -a stop -m shard2-secondary
root@localhost:/data/pkgs/mongodb-shard-cluster# ./op.sh -a stop -m shard2-primary

root@localhost:/data/pkgs/mongodb-shard-cluster# ./op.sh -a stop -m route1
root@localhost:/data/pkgs/mongodb-shard-cluster# ./op.sh -a stop -m route2
root@localhost:/data/pkgs/mongodb-shard-cluster# ./op.sh -a stop -m route3

5.3、檢查

説明:分別在對應主機節點上執行。

root@localhost:/data/pkgs/mongodb-shard-cluster# ./op.sh -a check -m config-secondary2
root@localhost:/data/pkgs/mongodb-shard-cluster# ./op.sh -a check -m config-secondary1
root@localhost:/data/pkgs/mongodb-shard-cluster# ./op.sh -a check -m config-primary

root@localhost:/data/pkgs/mongodb-shard-cluster# ./op.sh -a check -m shard1-arbiter
root@localhost:/data/pkgs/mongodb-shard-cluster# ./op.sh -a check -m shard1-secondary
root@localhost:/data/pkgs/mongodb-shard-cluster# ./op.sh -a check -m shard1-primary

root@localhost:/data/pkgs/mongodb-shard-cluster# ./op.sh -a check -m shard2-arbiter
root@localhost:/data/pkgs/mongodb-shard-cluster# ./op.sh -a check -m shard2-secondary
root@localhost:/data/pkgs/mongodb-shard-cluster# ./op.sh -a check -m shard2-primary

root@localhost:/data/pkgs/mongodb-shard-cluster# ./op.sh -a check -m route1
root@localhost:/data/pkgs/mongodb-shard-cluster# ./op.sh -a check -m route2
root@localhost:/data/pkgs/mongodb-shard-cluster# ./op.sh -a check -m route3

5.4、卸載

説明:分別在對應主機節點上執行。

root@localhost:/data/pkgs/mongodb-shard-cluster# ./op.sh -a clear -m config-secondary2
root@localhost:/data/pkgs/mongodb-shard-cluster# ./op.sh -a clear -m config-secondary1
root@localhost:/data/pkgs/mongodb-shard-cluster# ./op.sh -a clear -m config-primary

root@localhost:/data/pkgs/mongodb-shard-cluster# ./op.sh -a clear -m shard1-arbiter
root@localhost:/data/pkgs/mongodb-shard-cluster# ./op.sh -a clear -m shard1-secondary
root@localhost:/data/pkgs/mongodb-shard-cluster# ./op.sh -a clear -m shard1-primary

root@localhost:/data/pkgs/mongodb-shard-cluster# ./op.sh -a clear -m shard2-arbiter
root@localhost:/data/pkgs/mongodb-shard-cluster# ./op.sh -a clear -m shard2-secondary
root@localhost:/data/pkgs/mongodb-shard-cluster# ./op.sh -a clear -m shard2-primary

root@localhost:/data/pkgs/mongodb-shard-cluster# ./op.sh -a clear -m route1
root@localhost:/data/pkgs/mongodb-shard-cluster# ./op.sh -a clear -m route2
root@localhost:/data/pkgs/mongodb-shard-cluster# ./op.sh -a clear -m route3

5.5、連接

説明:分別在對應主機節點上執行。

root@localhost:/data/pkgs/mongodb-shard-cluster/tools# ./auto_connect.sh connect config-secondary2
root@localhost:/data/pkgs/mongodb-shard-cluster/tools# ./auto_connect.sh connect config-secondary1
root@localhost:/data/pkgs/mongodb-shard-cluster/tools# ./auto_connect.sh connect config-primary

root@localhost:/data/pkgs/mongodb-shard-cluster/tools# ./auto_connect.sh connect shard1-arbiter
root@localhost:/data/pkgs/mongodb-shard-cluster/tools# ./auto_connect.sh connect shard1-secondary
root@localhost:/data/pkgs/mongodb-shard-cluster/tools# ./auto_connect.sh connect shard1-primary

root@localhost:/data/pkgs/mongodb-shard-cluster/tools# ./auto_connect.sh connect shard2-arbiter
root@localhost:/data/pkgs/mongodb-shard-cluster/tools# ./auto_connect.sh connect shard2-secondary
root@localhost:/data/pkgs/mongodb-shard-cluster/tools# ./auto_connect.sh connect shard2-primary

root@localhost:/data/pkgs/mongodb-shard-cluster/tools# ./auto_connect.sh connect route1
root@localhost:/data/pkgs/mongodb-shard-cluster/tools# ./auto_connect.sh connect route2
root@localhost:/data/pkgs/mongodb-shard-cluster/tools# ./auto_connect.sh connect route3

5.6、備份(支持單機和分片集羣模式)

説明:在route3節點上執行。

root@localhost:/data/pkgs/mongodb-shard-cluster# cd tools
root@localhost:/data/pkgs/mongodb-shard-cluster/tools# ./auto_backup.sh backup route3

注意:如果你想手動備份還原,建議參考《Linux運維總結:使用 MongoDB工具備份和恢復mongodb 7.0.14分片集羣(方案一)》


5.7、還原(僅支持單機模式)

root@localhost:/data/pkgs/mongodb-shard-cluster# cd tools
root@localhost:/data/pkgs/mongodb-shard-cluster/tools# ./auto_backup.sh backup single

注意:由於分片集羣還原操作,比較複雜,建議參考《Linux運維總結:使用 MongoDB工具備份和恢復mongodb 7.0.14分片集羣(方案一)》


總結:整理不易,如果對你有幫助,可否點贊關注一下?

更多詳細內容請參考:《Linux運維篇:Linux系統運維指南》