摘要: 如果不了解 MongoDB Sharded Cluster 原理,請先閱讀 MongoDB Sharded cluster架構原理 關於MongoDB Sharding,你應該知道的 關於 sharding 遷移,會分3個部分來介紹,本文為第三部分 負載均衡及遷移策略 chunk 遷移流程 Ba...
如果不了解 MongoDB Sharded Cluster 原理,請先閱讀
關於 sharding 遷移,會分3個部分來介紹,本文為第三部分
負載均衡及遷移策略
chunk 遷移流程
Balancer 運維管理
在前面2個部分裡,介紹了 MongoDB sharding 的遷移策略以及 chunk 遷移的步驟,本文將主要介紹如何管理 Balancer,以更好的為業務服務。
關閉 Balancer
可能需要關閉 Balancer 場景包括
查看 Balancer 當前狀態
sh.getBalancerState()
關閉 Balancer
sh.stopBalancer()
開啟 Balancer
sh.startBalancer()
說明:本文中提到的命令,都是連接到 sharding cluster 的 mongos 上執行
針對某個集合關閉 Balancer
默認情況下,Balancer 會針對所有分片的集合做負載均衡,如果針對某些特殊集合,不想 Balancer 自動去遷移數據,可以僅針對該集合關閉。
針對 students.grades 集合關閉 Balancer
sh.disableBalancing("students.grades")
針對 students.grades 集合開啟 Balancer
sh.enableBalancing("students.grades")
設置 Balancer 時間窗口
為了儘量避免 chunk 遷移影響業務,可以將 Balancer 設置為只在某個時間窗口內工作,避開業務高峰期,如下命令設置 Balancer 只在凌晨2:00 - 6:00 工作。
use config
db.settings.update(
{ _id: "balancer" },
{ $set: { activeWindow : { start : "02", stop : "06" } } },
{ upsert: true }
)
設置遷移選項
moveChunk 允許用戶自定義遷移數據時,數據寫到目標上的安全級別 (自由的在可靠性和遷移效率間做選擇),通過 writeConcern 的方式來指定。
用戶可以修改_secondaryThrottle 以及 writeConcern 參數,這2個參數需要組合起來使用,意思是如果_secondaryThrottle為 true,則使用 writeConcern 選項來指定遷移時寫數據的策略;如果_secondaryThrottle為 false,則使用{w: 1}, 如下命令將 writeConcern 設置為 {w: majority}。
use config
db.settings.update(
{ "_id" : "balancer" },
{ $set : { "_secondaryThrottle" : true ,
"writeConcern": { "w": "majority" } } },
{ upsert : true }
)
如果沒有設置,則默認使用 {w: 2} ,要求至少寫到目標2個節點(若目標 shard 是單節點,則退化為{w: 1})。
數據遷移完後,源 shard 需要將遷移完的 chunk 移除,默認情況下,源 shard 會將刪除 chunk 的任務加到一個後臺隊列,在後臺異步刪除,然後 Balancer 就可以啟動下一次的 chunk 遷移。用戶可以設置 _waitForDelete 為 true(默認為 false),讓源 shard 在 chunk 遷移完後同步刪除 chunk 數據。
use config
db.settings.update(
{ "_id" : "balancer" },
{ $set : { "_waitForDelete" : true } },
{ upsert : true }
)
設置 chunkSize
MognoDB sharding 默認 chunkSize 為64MB,默認設置在絕大多數場景都是合適的,在某些場景下,用戶可能需要修改 chunkSize 配置,具體參考關於MongoDB Sharding,你應該知道的 文章裡『關於jumbo chunk及 chunk size』部分,這裡不再贅述。
如下命令將 chunkSize 修改為 100MB
use config
db.settings.save( { _id:"chunksize", value: 100 } )
注意事項
將 chunkSize 改小,後臺需要一定時間來對原來 chunk 進行分裂,將大小降低至新 chunkSize 以下。(如果是 jumbo chunk,則無法分裂)
將 chunkSize 改大,原來的小 chunk 不會自動進行合併,只有新的插入或更新操作才能導致 chunk 大小逐步增大。
chunkSize 可修改的範圍為[1MB, 1024MB]之間。
參考資料
(文中所有標藍部分均可閱讀原文獲取詳情)
這是架構師最好的時代。物聯網、移動、雲計算、大數據、人工智慧等新技術在行業的深入應用不斷驅動著企業IT系統的變遷。作為系統的靈魂,架構師的思想、設計、技能和經驗,影響深遠。峰會將深入分享構師們在高可用、高並發、高性能應用架構搭建與實踐的經驗與心得體會,以及自我驅動成長、Docker帶來的架構設計理念等方面的收穫,幫助更多夥伴學習和成長。
13:20-13:30 【視頻】談架構師自我修養 阿里云云棲社區明星專家們
13:30-13:40 開場 郭雪梅 阿里云云棲社區總編
13:40-14:20 我看分布式系統發展和阿里實踐 林偉 阿里雲大數據計算平臺資深架構師
14:20-15:00 Docker大規模應用帶來的架構設計新挑戰 吳崢濤 螞蟻金服高級技術專家
15:00-15:40 微博混合雲,極端流量下的峰值應對與架構挑戰 王關勝 新浪微博資深運維架構師
15:40-16:20 千萬級用戶直播App服務端架構設計和思考 張華偉 一下科技 技術副總裁
16:20-17:00 基於機器學習的阿里智能助理在電商領域的架構構建與實踐 海青 阿里巴巴高級技術專家
掃碼直入活動頁: