可用性和彈性
本頁面從生產的角度概述了 MinIO 的可用性和彈性設計和功能。
注意
本頁面的內容旨在作為盡力而為的指南,以了解 MinIO 的預期設計以及可用性和彈性背後的理念。它不能取代 MinIO SUBNET 的功能,這允許在規劃 MinIO 部署時與 MinIO 工程團隊協調。
社群使用者可以在 MinIO 社群 Slack 上尋求支援。社群支援僅為盡力而為,且不保證回應時間。
分散式 MinIO 部署
- MinIO 實作 Erasure Coding 作為在磁碟機或節點級別故障事件期間提供可用性和彈性的核心組件。
MinIO 將每個物件分割成資料和 同位 分片,並將這些分片分散到單個 Erasure Set 中。
這個小型單節點部署在一個 Erasure Set 中有 16 個磁碟機。假設預設的 同位 為
EC:4
,MinIO 將物件分割成 4 個(四個)同位分片和 12 個(十二個)資料分片。MinIO 將這些分片均勻地分佈在 Erasure Set 中的每個磁碟機上。- MinIO 使用確定性演算法來選擇給定物件的 Erasure Set。
對於每個唯一的物件命名空間
BUCKET/PREFIX/[PREFIX/...]/OBJECT.EXTENSION
,MinIO 總是為讀取/寫入操作選擇相同的 Erasure Set。這包括同一物件的所有 版本。- MinIO 需要 讀取和寫入仲裁,才能對 Erasure Set 執行讀取和寫入操作。
仲裁取決於部署設定的同位。讀取仲裁始終等於設定的同位,以便 MinIO 可以對任何未遺失比同位更多磁碟機的 Erasure Set 執行讀取操作。
使用預設同位
EC:4
,部署可以容忍每個 Erasure Set 遺失 4 個(四個)磁碟機,並且仍然可以提供讀取操作。- 寫入仲裁取決於設定的同位和 Erasure Set 的大小。
如果同位小於 Erasure Set 磁碟機數量的一半(一半),則寫入仲裁等於同位,並且功能類似於讀取仲裁。
MinIO 會自動增加寫入到降級的 Erasure Set 的物件同位元,以確保物件可以達到與健康 Erasure Set 中物件相同的 SLA。同位元升級行為提供額外的風險緩解層,但不能取代修復或更換損壞磁碟以使 Erasure Set 回復到完全健康狀態的長期解決方案。
使用預設的
EC:4
同位元,部署可以容忍每個 Erasure Set 損失 4 個磁碟,並且仍然可以提供寫入操作。- 如果同位元等於 Erasure Set 磁碟數量的一半 (1/2),則寫入仲裁等於同位元 + 1 (一),以避免由於「裂腦」情境造成資料不一致。
例如,如果 Erasure Set 中恰好一半的磁碟由於網路故障而隔離,MinIO 會認為仲裁遺失,因為它無法為寫入操作建立 N+1 個磁碟群組。
此節點有 50% 的磁碟故障。如果同位元為
EC:8
,則此 Erasure Set 無法滿足寫入仲裁,並且 MinIO 會拒絕寫入該集合的操作。由於 Erasure Set 仍然保持讀取仲裁,因此對現有物件的讀取操作仍然可以成功。- 永久遺失的磁碟數量多於配置同位元的 Erasure Set 已遭受資料遺失。
對於最大同位元配置,如果磁碟遺失等於同位元,則 Erasure Set 會進入「唯讀」模式。對於最大 Erasure Set 大小為 16 且最大同位元為 8 的情況,這將需要遺失 9 個磁碟才會發生資料遺失。
此 Erasure Set 遺失的磁碟數量多於配置的
EC:4
同位元,因此已遺失讀取和寫入仲裁。MinIO 無法復原儲存在此 Erasure Set 中的任何資料。暫時性的磁碟故障,例如由於儲存控制器或連接硬體故障,可能會在 Erasure Set 內恢復到正常運作狀態。
- MinIO 通過在集區中的每個節點上對稱地「條帶化」Erasure Set 磁碟,進一步降低 Erasure Set 故障的風險。
MinIO 會根據節點和磁碟的數量自動計算最佳的 Erasure Set 大小,其中最大集合大小為 16 (十六)。然後,它會針對每個 Erasure Set,從每個節點中選擇一個磁碟,在集區中循環,如果 Erasure Set 條帶大小大於節點數量,則會繞回。此拓撲結構提供了對單個節點或甚至該節點上的儲存控制器損失的恢復能力。
在此 16 x 8 部署中,MinIO 會計算出 8 個各包含 16 個磁碟的 Erasure Set。它會在可用節點中分配每個節點一個磁碟,以填滿每個 Erasure Set。如果有 8 個節點,MinIO 每個 Erasure Set 都需要選擇每個節點 2 個磁碟。
在上述拓撲結構中,集區有 8 個每個 16 個磁碟的 Erasure Set,分佈在 16 個節點上。每個節點將為每個 Erasure Set 分配一個磁碟。雖然失去一個節點在技術上會導致遺失 8 個磁碟,但每個 Erasure Set 只會遺失一個磁碟。即使節點停機,這也能維持仲裁。
- 每個 Erasure Set 都獨立於同一個集區中的其他所有 Erasure Set。
如果一個 Erasure Set 完全降級,MinIO 仍然可以在其他 Erasure Set 上執行讀取/寫入操作。
一個集區有一個降級的 Erasure Set。雖然 MinIO 無法再為該 Erasure Set 提供讀取/寫入操作,但它可以繼續為該集區中健康的 Erasure Set 提供操作。
但是,遺失的資料可能仍然會影響依賴 100% 資料可用性假設的工作負載。此外,每個 Erasure Set 都完全獨立於其他 Erasure Set,因此您無法使用其他 Erasure Set 將資料還原到完全降級的 Erasure Set。您必須使用站點或儲存桶複製,以建立可隨時用於BC/DR的遠端部署,以還原遺失的資料。
- 對於多集區 MinIO 部署,每個集區至少需要一個 Erasure Set 來維護讀取/寫入仲裁,才能繼續執行操作。
如果一個集區遺失所有 Erasure Set,MinIO 將無法再確定給定的讀取/寫入操作是否會路由到該集區。因此,MinIO 會停止對部署的所有 I/O,即使其他集區仍然可以運作。
此部署中的一個集區已完全失敗。MinIO 無法再確定將 I/O 路由到哪個集區或 Erasure Set。持續操作可能會產生不一致的狀態,其中物件和/或其版本存在於不同的 Erasure Set 中。因此,MinIO 會暫停部署中的所有I/O,直到集區復原。
若要還原對部署的存取權,管理員必須將集區還原至正常操作。這可能需要格式化磁碟、更換硬體或更換節點,具體取決於故障的嚴重程度。如需更完整的說明文件,請參閱硬體故障後復原。
使用複製的遠端還原遺失到部署的資料。儲存在健康集區上的所有資料都安全地保留在磁碟上。
對磁碟的獨佔存取權
MinIO **需要**對物件儲存提供的磁碟或磁碟區具有_獨佔_存取權。其他任何程序、軟體、指令碼或人員都不應直接對提供給 MinIO 的磁碟或磁碟區,或 MinIO 放置在它們上面的物件或檔案執行_任何_動作。
除非 MinIO 工程部門指示,否則請勿使用指令碼或工具直接修改、刪除或移動提供的磁碟上的任何資料碎片、同位元碎片或中繼資料檔案,包括從一個磁碟或節點移動到另一個磁碟或節點。此類操作很可能會導致超出 MinIO 修復能力的廣泛損壞和資料遺失。
已複製的 MinIO 部署
- 在 MinIO 部署中發生大小規模的資料遺失時,MinIO 會實作站點複製,作為確保業務連續性和災害復原 (BC/DR) 的主要措施。
每個對等站點都部署到獨立的資料中心,以提供針對大規模故障或災害的保護。如果一個資料中心完全離線,用戶端可以故障轉移到另一個站點。
- MinIO 複製可以自動修復由於暫時性或持續性停機而導致部分或全部資料遺失的站點。
資料中心 2 已關閉,站點 B 需要重新同步。負載平衡器處理將操作路由到資料中心 1 中的站點 A。站點 A 持續將資料複製到站點 B。
一旦所有資料同步完成,您就可以將正常連線還原至該站點。根據複製延遲、站點之間的延遲和整體工作負載I/O量,您可能需要暫時停止寫入操作,以便讓站點完全趕上進度。
如果對等站點完全故障,您可以完全從組態中移除該站點。負載平衡器組態也應移除該站點,以避免將用戶端請求路由到離線站點。
然後,您可以通過將其新增回站點複製組態,在修復原始硬體或完全更換硬體之後,還原對等站點。MinIO 會在持續複製新資料的同時,自動開始重新同步現有資料。
- 站點可以在重新同步期間繼續處理操作,方法是將
GET/HEAD
請求代理到健康的對等站點。 站點 B 沒有要求的物件,可能是由於複製延遲所致。它會將
GET
請求代理到站點 A。站點 A 會傳回物件,然後站點 B 會將其傳回給請求的用戶端。用戶端會收到第一個傳回所要求物件_任何_版本的對等站點的結果。
PUT
和DELETE
操作會使用正規的複製程序進行同步。LIST
操作不會進行代理,並要求用戶端專門針對健康的對等站點發出操作。