MongoDB Cluster 數據平衡優化


 

如果不了解 MongoDB Sharded Cluster 原理,請先閱讀

關於 sharding 遷移,會分3個部分來介紹,本文為第三部分

  1. 負載均衡及遷移策略
  2. chunk 遷移流程
  3. Balancer 運維管理

在前面2個部分里,介紹了 MongoDB sharding 的遷移策略以及 chunk 遷移的步驟,本文將主要介紹如何管理 Balancer,以更好的為業務服務。

關閉 Balancer

可能需要關閉 Balancer 場景包括

  • 對 Sharded cluster 進行備份時,需要先關閉 Balancer,避免備份出來 shard、config server 數據出現不一致。
  • 避免 chunk 遷移對線上服務造成影響

查看 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 工作。

  1.  
    use config
  2.  
    db.settings.update(
  3.  
    { _id: "balancer" },
  4.  
    { $ set: { activeWindow : { start : "02:00", stop : "06:00" } } },
  5.  
    { upsert: true }
  6.  
    )

設置遷移選項

moveChunk 允許用戶自定義遷移數據時,數據寫到目標上的安全級別 (自由的在可靠性和遷移效率間做選擇),通過writeConcern 的方式來指定。

用戶可以修改_secondaryThrottle 以及 writeConcern 參數,這2個參數需要組合起來使用,意思是如果_secondaryThrottle為 true,則使用 writeConcern 選項來指定遷移時寫數據的策略;如果_secondaryThrottle為 false,則使用{w: 1}, 如下命令將 writeConcern 設置為 {w: majority}。

  1.  
    use config
  2.  
    db.settings.update(
  3.  
    { "_id" : "balancer" },
  4.  
    { $ set : { "_secondaryThrottle" : true ,
  5.  
    "writeConcern": { "w": "majority" } } },
  6.  
    { upsert : true }
  7.  
    )

如果沒有設置,則默認使用 {w: 2} ,要求至少寫到目標2個節點(若目標 shard 是單節點,則退化為{w: 1})。

數據遷移完后,源 shard 需要將遷移完的 chunk 移除,默認情況下,源 shard 會將刪除 chunk 的任務加到一個后台隊列,在后台異步刪除,然后 Balancer 就可以啟動下一次的 chunk 遷移。用戶可以設置 _waitForDelete 為 true(默認為 false),讓源 shard 在 chunk 遷移完后同步刪除 chunk 數據。

  1.  
    use config
  2.  
    db.settings.update(
  3.  
    { "_id" : "balancer" },
  4.  
    { $ set : { "_waitForDelete" : true } },
  5.  
    { upsert : true }
  6.  
    )

設置 chunkSize

MognoDB sharding 默認 chunkSize 為64MB,默認設置在絕大多數場景都是合適的,在某些場景下,用戶可能需要修改 chunkSize 配置,具體參考關於MongoDB Sharding,你應該知道的 文章里『關於jumbo chunk及 chunk size』部分,這里不再贅述。

如下命令將 chunkSize 修改為 100MB

  1.  
    use config
  2.  
    db.settings.save( { _id:"chunksize", value: 100 } )

注意事項

  1. 將 chunkSize 改小,后台需要一定時間來對原來 chunk 進行分裂,將大小降低至新 chunkSize 以下。(如果是jumbo chunk,則無法分裂)
  2. 將 chunkSize 改大,原來的小 chunk 不會自動進行合並,只有新的插入或更新操作才能導致 chunk 大小逐步增大。
  3. chunkSize 可修改的范圍為[1MB, 1024MB]之間。

參考資料

轉載自:https://blog.csdn.net/wangkai_123456/article/details/53353193


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM