首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

MongoDB 分片集群架構與部署實戰:從原理到生產級配置

     編輯:Java 綜合教學

核心概念

  • 分片:將集合數據按片鍵拆分,分散存儲到多個分片節點,突破單機存儲/寫入瓶頸。
  • 分區:邏輯概念,同義詞。

集群角色架構

MongoDB 分片架構圖

角色職責進程
mongos路由/查詢協調器,無狀態,客戶端唯一入口輕量級,可多實例高可用
Config Server存儲元數據:分片映射、鍵範圍、集合配置副本集部署(生產 ≥3 節點)
Shard (mongod)實際數據節點,每個分片可為副本集數據存儲主力

從零搭建測試集群

1. 準備目錄

mkdir -p /data/sharding/config
mkdir -p /data/sharding/shard1
mkdir -p /data/sharding/shard2

2. 啟動 Config Server

mongod --configsvr --replSet configRepl --dbpath /data/sharding/config --port 27019 --bind_ip_all

初始化副本集:rs.initiate({_id:"configRepl", members:[{_id:0, host:"localhost:27019"}]})

3. 啟動分片節點

mongod --shardsvr --replSet shard1 --dbpath /data/sharding/shard1 --port 27018 --bind_ip_all
mongod --shardsvr --replSet shard2 --dbpath /data/sharding/shard2 --port 27018 --bind_ip_all

分別初始化副本集 shard1、shard2。

4. 啟動 mongos 路由

mongos --configdb configRepl/localhost:27019 --port 27017 --bind_ip_all

5. 添加分片

mongo --port 27017
sh.addShard("shard1/localhost:27018")
sh.addShard("shard2/localhost:27018")

6. 啟用數據庫/集合分片

sh.enableSharding("testdb")
sh.shardCollection("testdb.person", { "name": "hashed" })  // 哈希分片
// 或範圍分片:{ "age": 1 }

7. 驗證分片效果

// 插入 10 萬測試數據
for (var i=0; i<100000; i++) db.person.insert({name:"jack"+i, age:i%100})

// 查看分片狀態
sh.status()

sh.status() 輸出示例

關鍵觀察點:

  • shards:確認兩個分片 shard0000、shard0001。
  • databases.partitioned:true 表示已分片。
  • chunks:數據塊分佈,如 minkey → jack0 → jack234813 → jack9999 → maxkey,約 3:1 分佈於兩分片。

生產環境關鍵決策

  • 片鍵選擇:高基數、均勻分佈、查詢頻用字段(如 _id、哈希用戶 ID)。
  • 分片策略:哈希分片(寫入均勻)vs 範圍分片(範圍查詢優)。
  • 均衡器:默認後台運行,可配置運行窗口避開業務高峰。
  • 監控指標:chunk 數量、分片數據分佈傾斜、mongos CPU/連接數。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved