天天看點

MongoDB sharding遷移那些事(三)

MongoDB sharding遷移那些事(三)

如果不了解 mongodb sharded cluster 原理,請先閱讀

<a href="https://yq.aliyun.com/articles/32434?spm=5176.8091938.0.0.5cqblw">mongodb sharded cluster架構原理</a>

<a href="https://yq.aliyun.com/articles/60096?spm=5176.8091938.0.0.ia5ha5">關于mongodb sharding,你應該知道的</a>

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

<a href="https://yq.aliyun.com/articles/60881?spm=5176.8091938.0.0.1448o4">負載均衡及遷移政策</a>

<a href="https://yq.aliyun.com/articles/60935?spm=5176.8091938.0.0.k1p02g">chunk 遷移流程</a>

balancer 運維管理

在前面2個部分裡,介紹了 mongodb sharding 的遷移政策以及 chunk 遷移的步驟,本文将主要介紹如何管理 balancer,以更好的為業務服務。

可能需要關閉 balancer 場景包括

對 sharded cluster 進行備份時,需要先關閉 balancer,避免備份出來 shard、config server 資料出現不一緻。

避免 chunk 遷移對線上服務造成影響

檢視 balancer 目前狀态

關閉 balancer

開啟 balancer

說明:本文中提到的指令,都是連接配接到 sharding cluster 的 mongos 上執行

預設情況下,balancer 會針對所有分片的集合做負載均衡,如果針對某些特殊集合,不想 balancer 自動去遷移資料,可以僅針對該集合關閉。

針對 students.grades 集合關閉 balancer

針對 students.grades 集合開啟 balancer

為了盡量避免 chunk 遷移影響業務,可以将 balancer 設定為隻在某個時間視窗内工作,避開業務高峰期,如下指令設定 balancer 隻在淩晨2:00 - 6:00 工作。

使用者可以修改<code>_secondarythrottle</code> 以及 <code>writeconcern</code> 參數,這2個參數需要組合起來使用,意思是如果<code>_secondarythrottle</code>為 true,則使用 <code>writeconcern</code> 選項來指定遷移時寫資料的政策;如果<code>_secondarythrottle</code>為 false,則使用{w: 1}, 如下指令将 writeconcern 設定為 {w: majority}。

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

資料遷移完後,源 shard 需要将遷移完的 chunk 移除,預設情況下,源 shard 會将删除 chunk 的任務加到一個背景隊列,在背景異步删除,然後 balancer 就可以啟動下一次的 chunk 遷移。使用者可以設定 _waitfordelete 為 true(預設為 false),讓源 shard 在 chunk 遷移完後同步删除 chunk 資料。

如下指令将 chunksize 修改為 100mb

注意事項

将 chunksize 改大,原來的小 chunk 不會自動進行合并,隻有新的插入或更新操作才能導緻 chunk 大小逐漸增大。

chunksize 可修改的範圍為[1mb, 1024mb]之間。

<a href="https://docs.mongodb.com/manual/tutorial/manage-sharded-cluster-balancer/#disable-balancing-on-a-collection">manage sharded cluster balancer</a>

<a href="https://docs.mongodb.com/manual/tutorial/clear-jumbo-flag/">jumbo chunk</a>

<a href="https://www.aliyun.com/product/mongodb">mongodb cloud service</a>