首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> DB2 資料庫 >> DB2 教學

MongoDB 學習筆記 09:分片集群架構與實戰配置指南

     編輯:DB2 教學

MongoDB 學習筆記 09:分片集群架構與實戰配置指南

分片核心概念

MongoDB 分片通過將數據水平切分到多台服務器,實現海量數據的存儲與高吞吐讀寫。核心組件包括:

  • Shard(分片節點):存儲實際數據分片,生產環境建議為副本集。
  • Config Server(配置服務器):存儲集群元數據(分片鍵範圍、chunk 分佈等),3.4+ 版本強制為副本集。
  • Mongos(路由節點):客戶端請求入口,負責查詢路由、結果聚合,無狀態可水平擴展。

分片架構圖

從零搭建測試環境

1. 啟動 2 個 Shard 節點

mongod --dbpath ~/db/mongo1/database --logpath ~/db/mongo1/log/mongo.log --port 27017 --fork --smallfiles
mongod --dbpath ~/db/mongo2/database --logpath ~/db/mongo2/log/mongo.log --port 27018 --fork --smallfiles

2. 啟動 Config Server

mongod --dbpath ~/db/mongo3/database --logpath ~/db/mongo3/log/mongo.log --port 27019 --fork --smallfiles --configsvr

3. 啟動 Mongos 路由

mongos --logpath ~/db/mongo4/log/mongos.log --port 27020 --configdb 127.0.0.1:27019 --fork
注意:--configdb 指向 Config Server 地址,生產環境應填寫副本集連接串。

4. 連接 Mongos 並添加分片

mongo --port 27020
sh.addShard("127.0.0.1:27017")
sh.addShard("127.0.0.1:27018")
sh.status()  # 查看集群狀態

分片規則配置

基於範圍分片

sh.enableSharding("test")
sh.shardCollection("test.my", {"my_id": 1})

MongoDB 會自動將數據按 my_id 範圍切分為多個 Chunk(默認 64MB),並根據 Chunk 數量均衡分佈到各 Shard。

手動預分片

為避免初期數據寫入集中在單一 Shard 導致熱點,可預先切分 Chunk 並指定分佈:

sh.enableSharding("test")
sh.shardCollection("test.my", {"my_id": 1})
sh.splitAt("test.my", {my_id: 1000})
sh.splitAt("test.my", {my_id: 2000})
sh.splitAt("test.my", {my_id: 3000})
# 可配合 moveChunk 將特定 Chunk 移至目標 Shard

Chunk 大小調整

默認 Chunk 大小 64MB,可根據業務調整(如 4MB):

use config
db.settings.save({_id: "chunksize", value: 4})
較小 Chunk 利於負載均衡,但會增加元數據開銷;生產環境建議 64-128MB。

生產環境關鍵建議

  1. 分片鍵選擇:高基數、均勻分佈、符合查詢模式(如 _id hashed 或複合鍵)。
  2. Config Server:必須部署 3 節點副本集,確保元數據高可用。
  3. Mongos:至少 2 個,應用端通過連接池或 DNS 輪詢實現高可用。
  4. 監控指標:Chunk 分佈均衡度、Jumbo Chunk 數量、Balancer 活躍狀態、分片鍵基數變化。

分片是 MongoDB 水平擴展的核心能力,合理的分片鍵設計與預分片策略,能讓集群在 TB/PB 級數據下依然保持線性擴展性能。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved