MongoDB 分片sharding概述

當MongoDB由於存儲的數據越來越多, 由於性能原因, 或者單個主機資源限制, 垂直擴容沒有辦法進一步的時候, 我們就需要開始考慮水平擴容了。
與垂直擴容不同的是, 水平擴容不需要新添加的機器有多麼強大的功能,它的設計理念是將業務數據儘可能平均的劃分成一段一段的, 每一段分佈在一臺機器上, 這樣, 當系統需要進一步擴容的時候,只需要添加機器, 將現有數據的一部分遷移到新添加的機器上, 舊的系統就有能力繼續處理業務。

sharding 的架構:
在這裏插入圖片描述

ShardRegistry

ShardRegistry是 一個管理集羣shard的類, 它主要有如下的功能:

  • shardMap: 通過shardID, replicaName, host找到Shard;
  • shard與其他的host的網絡連接;
  • 根據configsvr的shard 集合內容更新shard內容;
  • 執行分片的command;

CollectionMetadata

該類記錄了集合的metadata, 尤其是集合的遷移相關的信息。

CatalogManager、CatalogCache

CatalogManager及其子類主要是用來enable sharding集合, 以及添加、刪除shard等操作, 與副本集的catalog類相似, 主要是用來管理cluster的相關操作;
CatalogCache用來緩存集合的metadata, 主要是對只讀的集合metadata。 對於sharding的集合, 很多操作都需要metadata, 通過Cache, 可以方便程序的metadata讀取。

Balancer

balancer是一個後臺進程的類, 它負責將cluster裏面各個shard的chunks的個數的均勻分佈, 它通過ChunkManager, 收集到各個shard的chunk 信息, 當2個shard的chunk數差異超過一定的門檻, 就會觸發MoveChunk 命令, 進行chunk的遷移。

ChunkManager

ChunkManager用來記錄shard的chunk信息, 以及查詢的時候, 將查詢命令裝換成shard key的索引信息;

ShardingState

這個類是DB layer非常重要的一各, 負責記錄任務執行過程中, 集羣的狀態。比如, moveChunk遷移過程中, MigrationSourceManager調用源端接口, 記錄需要遷移的chunks, MigrationDestinationManager表示在目的shard轉入數據, 以及相應的遷入過程;另外, splitChunk, mergeChunk以及moveChunk過程, 都會涉及chunk的改變, 需要更改metadata以及chunk的分佈信息等等。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章