MongoDB分片叢集由以下元件組成:
-
shard:每個分片包含分片資料的子集。每個分片必須部署為副本集。
-
mongos:
mongos
充當查詢路由器,提供客戶端應用程式和分片叢集之間的介面。mongos
可以支援 對沖讀取以最小化延遲。 - config servers:配置伺服器儲存叢集的後設資料和配置設定。從 MongoDB 3.4 開始,配置伺服器必須部署為副本集 (CSRS)。
生產配置
在生產叢集中,確保資料冗餘並且系統高度可用。對於生產分片叢集部署,請考慮以下事項:
-
將 Config Server 部署為 3 成員副本集
-
將每個分片部署為 3 成員副本集
-
部署一臺或多臺
mongos
路由器
副本集分佈
如果可能,請考慮將每個副本集的一個成員部署在適合作為災難恢復位置的站點中。
mongos
數量及分佈
mongos
路由器經常與您的配置伺服器通訊。隨著路由器數量的增加,效能可能會下降。如果效能下降,請減少路由器的數量。您的部署不應超過 30 個mongos
路由器。
開發配置
為了進行測試和開發,您可以部署具有最少數量元件的分片叢集。這些非生產叢集具有以下元件:
僅將測試叢集架構用於測試和開發。
分片shard
分片包含分片叢集的分片資料的子集。叢集的分片共同儲存叢集的整個資料集。
分片必須部署為副本集以提供冗餘和高可用性。
primary shard
分片叢集中的每個資料庫都有一個主分片,用於儲存該資料庫的所有未分片集合。每個資料庫都有自己的主分片。主分片與副本集中的主分片沒有關係。
Shard Status
Use the sh.status()
method in mongosh
to see an overview of the cluster.
配置伺服器
配置伺服器儲存分片叢集的後設資料。後設資料反映了分片叢集內所有資料和元件的狀態和組織。後設資料包括每個分片上的塊列表以及定義塊的範圍。
例項mongos
快取此資料並使用它來將讀寫操作路由到正確的分片。mongos
當叢集的後設資料發生更改時更新快取,例如新增分片。分片還從配置伺服器讀取塊後設資料。
每個分片叢集必須有自己的配置伺服器。不要對不同的分片叢集使用相同的配置伺服器。
副本集配置伺服器
資料庫admin
和配置資料庫存在於配置伺服器上。
配置伺服器可用性
如果配置伺服器副本集丟失其主副本並且無法選擇主副本,則叢集的後設資料將變為只讀。您仍然可以從分片讀取和寫入資料,但在副本集可以選擇主分片之前,不會發生塊遷移或塊分割。
在分片叢集中,mongod
例項mongos
監控分片叢集中的副本集(例如分片副本集、配置伺服器副本集)。
如果所有配置伺服器都不可用,則叢集可能無法執行。為了確保配置伺服器保持可用且完好無損,配置伺服器的備份至關重要。與叢集中儲存的資料相比,配置伺服器上的資料較小,並且配置伺服器的活動負載相對較低。
mongos路由
從應用程式的角度來看,提供了分片叢集的唯一介面。應用程式從不直接與分片連線或通訊。
路由和結果處理
例項透過以下方式將查詢路由到mongos叢集:
-
確定必須接收查詢的分片列表。
-
在所有目標分片上建立遊標。
然後mongos
合併來自每個目標分片的資料並返回結果文件。在 mongos檢索結果之前,會在每個分片上執行某些查詢修飾符(例如排序) 。