抹除碼
MinIO 實作抹除碼作為提供資料冗餘和可用性的核心元件。此頁面提供了 MinIO 抹除碼的介紹。
請參閱 可用性和復原能力 和 部署架構,以取得有關 MinIO 如何在生產部署中使用抹除碼的更多資訊。
抹除碼基礎知識
注意
本節中的圖表和內容呈現了 MinIO 抹除碼操作的簡化視圖,並非旨在代表 MinIO 完整抹除碼實作的複雜性。
- MinIO 將每個 伺服器集區 中的磁碟機分組為一個或多個相同大小的抹除集合。
上面的範例部署由 4 個節點組成,每個節點有 4 個磁碟機。MinIO 初始化時會使用一個由所有四個節點上的所有 16 個磁碟機組成的抹除集合。
MinIO 會在初始化 伺服器集區 時決定抹除集合的最佳數量和大小。您無法在此初始設定之後修改這些設定。
- 對於每個寫入操作,MinIO 將物件分割為資料和同位分片。
抹除集合條帶大小決定了部署的最大可能 同位。用於確定要產生多少資料和同位分片的公式為
N (ERASURE SET SIZE) = K (DATA) + M (PARITY)
上面的範例部署有一個 16 個磁碟機的抹除集合。這可以支援
EC:0
和抹除集合磁碟機的 1/2 之間的同位,或EC:8
。- 您可以將同位值設定為 0 到抹除集合大小的 1/2 之間。
MinIO 使用 Reed-Solomon 抹除碼實作,並分割物件以在抹除集合中分發。上面的範例部署的抹除集合大小為 16,同位為
EC:4
如果您稍後變更同位值,則使用給定同位設定寫入的物件不會自動更新。
- MinIO 至少需要
K
個任何類型的分片才能讀取物件。 此處的值
K
構成部署的讀取仲裁。因此,抹除集合必須至少有K
個健康的磁碟機在抹除集合中,才能支援讀取操作。此部署有一個離線節點,導致僅剩餘 12 個健康的磁碟機。物件以
EC:4
寫入,讀取仲裁為K=12
。因此,此物件保持讀取仲裁,並且 MinIO 可以重建它以進行讀取操作。MinIO 無法重建已失去讀取仲裁的物件。此類物件可透過其他方式復原,例如 複製重新同步。
- MinIO 至少需要
K
個抹除集合磁碟機才能寫入物件。 此處的值
K
構成部署的寫入仲裁。因此,抹除集合必須至少有K
個可用的磁碟機在線上,才能支援寫入操作。此部署有一個離線節點,導致只剩下 12 個可用的健康硬碟。客戶端使用
EC:4
同位設定寫入物件,其中 erasure set 的寫入仲裁為K=12
。此 erasure set 維持寫入仲裁,MinIO 可以使用它進行寫入操作。- 如果同位
EC:M
正好是 erasure set 大小的 1/2,則寫入仲裁為K+1
這可以防止腦裂類型的情境,例如網路問題將 erasure set 的一半硬碟與另一半隔離的情況。
由於暫時性的網路故障,此部署有兩個節點離線。客戶端使用
EC:8
同位設定寫入物件,其中 erasure set 的寫入仲裁為K=9
。此 erasure set 已失去寫入仲裁,MinIO 無法使用它進行寫入操作。K+1
邏輯確保客戶端不會可能將同一個物件寫入兩次 - 分別寫入 erasure set 的每個「一半」。- 對於維持讀取仲裁的物件,MinIO 可以使用任何資料或同位分片來修復損壞的分片。
由於硬碟故障,具有
EC:4
的物件在 12 個資料分片中遺失了四個。由於該物件維持了讀取仲裁,MinIO 可以使用可用的同位分片來修復那些遺失的資料分片。
使用 MinIO Erasure Coding 計算器來探索您計畫的拓撲結構可能的 erasure set 大小和分佈。在可能的情況下,每個節點使用偶數個節點和硬碟,以簡化拓撲結構規劃和硬碟/erasure-set 分佈的概念化。
硬碟的獨佔存取權
MinIO 要求對提供的物件儲存硬碟或卷擁有獨佔存取權。任何其他處理程序、軟體、腳本或人員都不應直接對提供給 MinIO 的硬碟或卷,或 MinIO 放置在其上的物件或檔案執行任何操作。
除非 MinIO 工程部門指示,否則請勿使用腳本或工具直接修改、刪除或移動所提供硬碟上的任何資料分片、同位分片或中繼資料檔案,包括從一個硬碟或節點到另一個硬碟或節點。此類操作很可能會導致廣泛的損壞和資料遺失,超出 MinIO 的修復能力。
Erasure 同位和儲存效率
設定部署的同位是可用性和總可用儲存空間之間的平衡。較高的同位值會增加對硬碟或節點故障的恢復能力,但會犧牲可用的儲存空間,而較低的同位則提供最大的儲存空間,但對硬碟/節點故障的容忍度較低。使用 MinIO Erasure Code 計算器來探索同位對您計畫的叢集部署的影響。
下表列出在包含 1 個節點和 16 個 1TB 硬碟的 MinIO 部署中,不同 erasure code 同位等級的結果
同位 |
總儲存空間 |
儲存比例 |
讀取操作的最小硬碟數 |
寫入操作的最小硬碟數 |
---|---|---|---|---|
|
12 Tebibytes |
0.750 |
12 |
12 |
|
10 Tebibytes |
0.625 |
10 |
10 |
|
8 Tebibytes |
0.500 |
8 |
9 |
位元衰減保護
位元衰減是指儲存媒體層級隨機變更導致的靜默資料損壞。對於資料硬碟,它通常是代表資料的電荷或磁性方向衰減的結果。這些來源可能包括停電期間的小電流尖峰到導致位元翻轉的隨機宇宙射線。由此產生的「位元衰減」可能會在資料媒體上造成細微的錯誤或損壞,而不會觸發監控工具或硬體。
MinIO 對 HighwayHash 演算法的優化實作確保它可以即時捕獲並修復損壞的物件。透過在應用程式的 READ 上計算雜湊值,並在 WRITE 上驗證它,跨越網路以及到記憶體或硬碟,來確保端到端的完整性。此實作的設計目的是為了速度,並且可以在 Intel CPU 上的單個核心上實現超過 10 GB/秒的雜湊速度。