文件

核心操作概念

MinIO 部署的元件有哪些?

MinIO 部署包含一組執行一個或多個 minio server 節點的儲存和運算資源,這些節點共同充當單一物件儲存庫。

獨立的 MinIO 執行個體包含具有單一 minio server 節點的單一伺服器池。獨立執行個體最適合用於初始開發和評估。

MinIO 部署可以直接在 裸機 或非虛擬化基礎架構中的實體裝置上執行。或者,MinIO 可能會在雲端服務上的虛擬機器中執行,例如使用 Docker、Podman 或 Kubernetes。MinIO 可以在本機、私有雲或市場上任何可用的公有雲中執行。

您設計、架構和建置系統的特定方式稱為系統的 拓撲

MinIO 支援哪些系統拓撲?

MinIO 可以部署到三種類型的拓撲

  1. 單節點單磁碟機,一個具有單一磁碟機或資料夾的 MinIO 伺服器

    例如,使用電腦硬碟上的資料夾在本機 PC 上進行測試。

  2. 單節點多磁碟機,一個具有多個掛載磁碟機或資料夾的 MinIO 伺服器

    例如,一個具有兩個或多個掛載磁碟區的單一容器。

  3. 多節點多磁碟機,多個具有多個掛載磁碟機或資料磁碟區的 MinIO 伺服器

    例如,使用 Kubernetes 管理和部署 Pod 及其相關聯的永久磁碟區聲明的生產部署。

分散式 MinIO 部署如何運作?

分散式部署會利用多個實體或虛擬機器的運算和儲存資源。在現代情境中,這通常意味著在私有雲或公有雲環境中運行 MinIO,例如 Amazon Web Services、Google Cloud Platform、Microsoft Azure 平台或許多其他平台。

MinIO 如何管理多個虛擬或實體伺服器?

雖然測試 MinIO 可能只涉及單一電腦上的單一磁碟機,但大多數生產環境的 MinIO 部署都會使用多個運算和儲存裝置來建立高可用性環境。伺服器池是一組 minio server 節點,這些節點會將其磁碟機和資源集中起來,以支援物件儲存寫入和擷取請求。

MinIO 支援將一個或多個伺服器池新增到現有的 MinIO 部署中,以進行水平擴展。當 MinIO 有多個可用的伺服器池時,個別物件始終會寫入同一個伺服器池中的同一個 Erasure Set。

如果一個伺服器池發生故障,MinIO 會暫停所有池的 I/O,直到叢集恢復正常運作。您必須將該池恢復到正常運作狀態,才能恢復對部署的 I/O。當您執行修復作業時,寫入其他池的物件會安全地保留在磁碟上。

傳遞給 minio server 命令的 HOSTNAME 引數代表一個伺服器池。

請考慮以下啟動命令範例,它會建立一個包含 4 個 minio server 節點的單一伺服器池,每個節點有 4 個磁碟機,總共有 16 個磁碟機。

minio server https://minio{1...4}.example.net/mnt/disk{1...4}

             |                    Server Pool                |

在同一個 minio server 啟動命令中啟動伺服器池,可以讓所有伺服器池同級感知。

請參閱 minio server 以取得完整的語法和用法。

我可以變更現有 MinIO 部署的大小嗎?

MinIO 分散式部署 支援擴展和停用功能,以增加或減少可用的儲存空間。

擴展包括將一個或多個 伺服器池 新增到現有的部署中。每個伺服器池都包含專用的節點和儲存空間,這些節點和儲存空間會貢獻於部署的整體容量。建立伺服器池後,您無法變更其大小,但您可以隨時透過新增或停用池來新增或移除容量。

如需更多資訊,請參閱 擴展 MinIO 租用戶

對於有多個伺服器池的部署,您可以停用較舊的池,並將該資料移轉到部署中較新的池。一旦開始,停用就無法停止。MinIO 打算將停用用於移除具有老舊硬體的較舊池,而不是在任何部署中定期執行的操作。

在停用然後新增時,請維護池的順序

如果您在多池部署中停用一個池,則無法為新池使用相同的節點序列。例如,考慮一個具有以下池的部署

https://minio-{1...4}.example.net/mnt/drive-{1...4}
https://minio-{5...8}.example.net/mnt/drive-{1...4}
https://minio-{9...12}.example.net/mnt/drive-{1...4}

如果您停用 minio-{5...8} 池,則無法新增具有相同節點編號的新池。您必須在 minio-{9...12} 之後 新增新池

https://minio-{1...4}.example.net/mnt/drive-{1...4}
https://minio-{9...12}.example.net/mnt/drive-{1...4}
https://minio-{13...16}.example.net/mnt/drive-{1...4}

如何管理一個或多個 MinIO 執行個體或叢集?

有多個選項可管理您的 MinIO 部署和叢集

如何管理跨 MinIO 部署的物件分佈?

MinIO 會將新物件(也就是沒有現有版本的物件)寫入可用伺服器池中總可用空間中剩餘空間最多的伺服器池,以最佳化物件在可用池中的儲存。MinIO 不會執行將物件從較舊池重新平衡到較新池的昂貴動作。相反地,新物件通常會路由到新池,因為它具有最多的可用空間。當該池填滿時,新的寫入操作最終會在部署中的所有池之間達到平衡。如需關於寫入偏好計算邏輯的詳細資訊,請參閱下方的寫入檔案

在擴展後重新平衡所有池中的資料是一項昂貴的操作,需要掃描整個部署並在池之間移動物件。這可能需要很長時間才能完成,具體取決於要移動的資料量。

從 MinIO 用戶端版本 RELEASE.2022-11-07T23-47-39Z 開始,您可以使用 mc admin rebalance 手動啟動跨所有伺服器池的重新平衡操作。

重新平衡不會封鎖正在進行的操作,並且會與所有其他 I/O 並行執行。這可能會導致常規操作的效能降低。請考慮在非尖峰期間排程重新平衡操作,以避免影響生產工作負載。您可以隨時啟動和停止重新平衡

如何將物件上傳到 MinIO?

您可以使用任何與 S3 相容的 SDK,將物件上傳到 MinIO 部署。每個 SDK 都會執行相當於 PUT 操作,該操作會將物件傳輸到 MinIO 以進行儲存。

MinIO 還實作了對 多部分上傳 的支援,其中用戶端可以將物件分割成多個部分,以提高傳輸的輸送量和可靠性。MinIO 會重新組裝這些部分,直到它有一個完整的物件,然後將該物件儲存在指定的路徑。

MinIO 如何提供可用性、冗餘和可靠性?

MinIO 使用 Erasure Coding 來實現資料冗餘和可靠性

MinIO Erasure Coding 是一種資料冗餘和可用性功能,可讓具有多個磁碟機的 MinIO 部署在叢集中損失多個磁碟機或節點的情況下,自動即時重建物件。Erasure Coding 提供物件層級的 修復,其額外負擔遠低於相鄰技術(例如 RAID 或複寫)。

MinIO 實作位元衰減修復來保護靜態資料

位元衰減是在任何儲存裝置上都可能發生的隨機、靜默的資料損壞。位元衰減損壞不是由使用者的任何活動提示,系統的作業系統本身也沒有察覺到損壞,無法通知使用者或管理員有關資料的變更。

位元衰減的一些常見原因包括

  • 老化的磁碟機

  • 電流尖峰

  • 磁碟機韌體中的錯誤

  • 幻影寫入

  • 導向錯誤的讀取/寫入

  • 驅動程式錯誤

  • 意外覆寫

MinIO 使用雜湊演算法來確認物件的完整性。此演算法會在針對物件執行任何 GETHEAD 操作時自動套用。對於版本控制儲存貯體中的物件,如果 MinIO 識別出版本不一致,則 PUT 操作也可能會觸發修復。如果物件因位元衰減而損壞,MinIO 可以根據物件的同位分片的可用性,自動修復物件。

MinIO 也可以使用 MinIO 掃描器 執行位元衰減檢查和修復。但是,掃描器位元衰減檢查預設為 關閉。在掃描器期間主動進行位元衰減修復與位元衰減影響分佈在多個磁碟機和節點上的多個物件分片的低機率相比,具有很高的效能影響。正常操作期間的自動檢查通常足以處理位元衰減,MinIO 不建議使用掃描器進行此類健康情況檢查。

MinIO 為了實現高可用性和彈性,將資料分散至抹除集 (Erasure Sets)

抹除集是一組支援 MinIO 抹除編碼 (Erasure Coding) 的多個硬碟。抹除編碼提供高可用性、可靠性,以及 MinIO 部署上儲存資料的冗餘性。

MinIO 將物件分割成稱為 分片 (shards) 的區塊,並將它們均勻地分散到抹除集中的每個硬碟上。即使損失任何單一硬碟,MinIO 也能夠無縫地繼續處理讀寫請求。在最高冗餘等級下,即使部署中總共有一半 (\(N / 2\)) 的硬碟損失,MinIO 也能夠以最小的效能影響來處理讀取請求。

MinIO 根據集合中的硬碟總數以及集合中 minio 伺服器的數量,來計算伺服器池中抹除集的大小和數量。請參閱 抹除編碼基礎知識 以取得更多資訊。

MinIO 會在運作時自動修復損壞或遺失的資料

修復 (Healing) 是 MinIO 在發生導致資料遺失的事件後恢復資料的能力。資料遺失可能來自位元衰減 (bit rot)、硬碟遺失或節點遺失。

如果物件部分遺失,抹除編碼 提供了持續的讀寫權限。

硬碟的獨佔存取權

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

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

MinIO 使用同位在物件層級寫入資料保護

具有多個硬碟的 MinIO 部署會將可用的硬碟分為資料硬碟和同位硬碟。當寫入物件時,MinIO 抹除編碼會將物件內容的額外雜湊資訊新增至同位硬碟。MinIO 使用同位資訊來確認物件的完整性,並且在必要時,還原指定硬碟或一組硬碟上遺失、缺少或損壞的物件分片。

MinIO 可以容忍損失的硬碟總數等於抹除集中可用的同位裝置數量,同時仍然提供對物件的完整存取權。

使用仲裁 (Quorum) 提供讀寫功能

執行任務時必須可用的最少硬碟數量。MinIO 具有一個用於讀取資料的仲裁和一個用於寫入資料的獨立仲裁。

通常,MinIO 需要更多的可用硬碟來維持寫入物件的能力,而不是讀取物件所需的能力。