文件

錯誤更正碼

MinIO 實作錯誤更正碼作為提供資料冗餘和可用性的核心元件。此頁面提供 MinIO 錯誤更正碼的簡介。

如需 MinIO 如何在生產部署中使用錯誤更正碼的詳細資訊,請參閱 可用性和彈性部署架構

錯誤更正碼基礎

注意

本節中的圖表和內容呈現 MinIO 錯誤更正碼運作的簡化視圖,並非旨在表示 MinIO 完整錯誤更正碼實作的複雜性。

MinIO 將每個 伺服器集區 中的磁碟機分組為一個或多個相同大小的 錯誤更正集
Diagram of erasure set covering 4 nodes and 16 drives

上述範例部署包含 4 個節點,每個節點有 4 個磁碟機。MinIO 使用由所有四個節點上的所有 16 個磁碟機組成的單一錯誤更正集初始化。

MinIO 在初始化 伺服器集區 時,會決定錯誤更正集的最佳數量和大小。在此初始設定之後,您無法修改這些設定。

對於每個寫入操作,MinIO 會將物件分割為 資料同位 分片。

錯誤更正集條帶大小決定了部署的最大可能 同位。用於確定要產生的資料和同位分片數量的公式是

N (ERASURE SET SIZE) = K (DATA) + M (PARITY)
Diagram of possible erasure set parity settings

上述範例部署具有 16 個磁碟機的錯誤更正集。這可以支援 EC:0 和錯誤更正集磁碟機的 1/2 之間的同位,即 EC:8

您可以將同位值設定為 0 到錯誤更正集大小的 1/2 之間。
Diagram of an object being sharded using MinIO's Reed-Solomon Erasure Coding algorithm.

MinIO 使用 Reed-Solomon 錯誤更正碼實作,並分割物件以分佈在錯誤更正集中。上面的範例部署的錯誤更正集大小為 16,同位為 EC:4

如果您稍後變更同位值,則以給定同位設定寫入的物件不會自動更新。

MinIO 需要至少 K 個任何類型的分片才能 讀取 物件。

此處的值 K 構成部署的 讀取仲裁。因此,錯誤更正集必須在錯誤更正集中至少有 K 個健康的磁碟機才能支援讀取操作。

Diagram of a 4-node 16-drive deployment with one node offline.

此部署有一個離線節點,導致只剩下 12 個健康的磁碟機。該物件以 EC:4 寫入,讀取仲裁為 K=12。因此,此物件維持讀取仲裁,MinIO 可以重建它以進行讀取操作。

MinIO 無法重建失去讀取仲裁的物件。這類物件可能需要透過其他方式恢復,例如複寫重新同步

MinIO 至少需要 K 個 erasure set 磁碟才能寫入物件。

此處的 K 值構成部署的寫入仲裁。因此,erasure set 必須至少有 K 個可用的線上磁碟才能支援寫入操作。

Diagram of a 4-node 16-drive deployment where one node is offline.

此部署有一個節點離線,導致只剩下 12 個健康的磁碟。客戶端使用 EC:4 同位設定寫入物件,其中 erasure set 的寫入仲裁為 K=12。此 erasure set 維持寫入仲裁,因此 MinIO 可以用於寫入操作。

如果同位 EC:M 恰好是 erasure set 大小的 1/2,則寫入仲裁K+1

這可以防止發生腦裂類型的狀況,例如網路問題隔離了 erasure set 中恰好一半的磁碟。

Diagram of an erasure set with where Parity ``EC:M`` is 1/2 the set size

由於暫時性網路故障,此部署有兩個節點離線。客戶端使用 EC:8 同位設定寫入物件,其中 erasure set 的寫入仲裁為 K=9。此 erasure set 已失去寫入仲裁,因此 MinIO 無法用於寫入操作。

K+1 邏輯確保客戶端不會有可能將相同物件寫入兩次 - 一次寫入 erasure set 的每個「一半」。

對於維持讀取仲裁的物件,MinIO 可以使用任何資料或同位分片來修復損壞的分片。
Diagram of MinIO using parity shards to heal lost data shards on a node.

由於磁碟故障,具有 EC:4 的物件在 12 個資料分片中遺失了 4 個。由於物件維持了讀取仲裁,MinIO 可以使用可用的同位分片來修復這些遺失的資料分片。

使用 MinIO Erasure Coding Calculator 來探索您計劃的拓撲可能採用的 erasure set 大小和分佈。在可能的情況下,每個節點使用偶數個節點和磁碟,以簡化拓撲規劃和磁碟/erasure-set 分佈的概念化。

獨佔磁碟存取

MinIO 要求對用於物件儲存的磁碟或卷具有獨佔存取權。其他任何程序、軟體、腳本或人員都不應直接對提供給 MinIO 的磁碟或卷,或是 MinIO 放置在它們上面的物件或檔案執行任何操作。

除非 MinIO 工程部門指示,否則請勿使用腳本或工具直接修改、刪除或移動所提供磁碟上的任何資料分片、同位分片或中繼資料檔案,包括從一個磁碟或節點移動到另一個磁碟或節點。此類操作很可能導致超出 MinIO 修復能力的廣泛損壞和資料遺失。

抹除同位和儲存效率

為部署設定同位是可用性和總可用儲存空間之間的平衡。較高的同位值會增加對磁碟或節點故障的彈性,但會犧牲可用儲存空間,而較低的同位值則提供最大儲存空間,但對磁碟/節點故障的容忍度較低。使用 MinIO Erasure Code Calculator 來探索同位對您計劃的叢集部署的影響。

下表列出了在由 1 個節點和 16 個 1TB 磁碟組成的 MinIO 部署中,不同抹除程式碼同位級別的結果

16 個磁碟 MinIO 叢集上的同位設定結果

同位

總儲存空間

儲存比例

讀取操作的最低磁碟數量

寫入操作的最低磁碟數量

EC: 4 (預設)

12 兆位元組

0.750

12

12

EC: 6

10 兆位元組

0.625

10

10

EC: 8

8 兆位元組

0.500

8

9

位元衰減保護

位元衰減是指儲存媒體層級隨機變更導致的無聲資料損壞。對於資料磁碟而言,通常是代表資料的電荷或磁方位衰減所致。這些來源可能包括停電期間的小電流尖峰,到導致位元翻轉的隨機宇宙射線。產生的「位元衰減」可能會在資料媒體上造成細微的錯誤或損壞,而不會觸發監視工具或硬體。

MinIO 對 HighwayHash 演算法的優化實作可確保它能即時擷取和修復損壞的物件。透過計算 READ 上的雜湊值,並在 WRITE 從應用程式、跨網路以及到記憶體或磁碟進行驗證,確保端對端的完整性。此實作旨在提高速度,在 Intel CPU 的單核心上可以實現超過 10 GB/秒的雜湊速度。