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