核心操作概念
MinIO 部署的元件有哪些?
MinIO 部署包含一組儲存和運算資源,這些資源執行一個或多個 minio server
節點,這些節點一起作為單一物件儲存庫。
MinIO 的獨立執行個體包含單一伺服器集區,其中包含單一 minio server
節點。獨立執行個體最適合用於初始開發和評估。
MinIO 部署可以直接在 裸機
或非虛擬化基礎架構中的實體裝置上執行。或者,MinIO 可以在雲端服務上的虛擬機器中執行,例如使用 Docker、Podman 或 Kubernetes。MinIO 可以在本機、私有雲或市場上提供的許多公有雲中的任何一個執行。
您設計、架構和建置系統的特定方式稱為系統的 拓撲
。
MinIO 支援哪些系統拓撲?
MinIO 可以部署到三種類型的拓撲
分散式 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 部署。
請考慮以下命令,它會建立一個包含兩個伺服器池的叢集,每個伺服器池有 4 個 minio server
節點,且每個節點有 4 個硬碟,總共 32 個硬碟。
minio server https://minio{1...4}.example.net/mnt/disk{1...4} \
https://minio{5...8}.example.net/mnt/disk{1...4}
| Server Pool |
每個伺服器池都有一或多個 抹除集,具體取決於池中的硬碟和節點數量。
MinIO 強烈建議生產環境的叢集在一個伺服器池中至少包含 4 個 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 Client 版本 RELEASE.2022-11-07T23-47-39Z 開始,您可以使用 mc admin rebalance
手動啟動所有伺服器池的重新平衡操作。
重新平衡不會封鎖進行中的操作,並會與所有其他 I/O 平行執行。這可能會導致正常操作的效能降低。請考慮在非尖峰期間排程重新平衡操作,以避免影響生產工作負載。您可以隨時開始和停止重新平衡
我該如何將物件上傳到 MinIO?
您可以使用任何與 S3 相容的 SDK 將物件上傳到 MinIO 部署。每個 SDK 都會執行相當於 PUT 操作的操作,該操作會將物件傳輸到 MinIO 以進行儲存。
MinIO 還實作了對 多部分上傳 的支援,用戶端可以將物件分割成多個部分,以提高傳輸的輸送量和可靠性。MinIO 會重新組裝這些部分,直到它具有完成的物件,然後將該物件儲存在指定的路徑。
MinIO 如何提供可用性、冗餘和可靠性?
MinIO 使用 抹除編碼 來實現資料冗餘和可靠性
MinIO 抹除編碼是一種資料冗餘和可用性功能,可讓具有多個硬碟的 MinIO 部署,即使叢集中遺失多個硬碟或節點,也能自動即時重建物件。與 RAID 或複寫等相鄰技術相比,抹除編碼以顯著較低的額外負荷,提供了物件層級的 修復。
MinIO 實作位元腐爛修復以保護靜態資料
位元腐爛是指可能在任何儲存裝置上發生的隨機、靜默的資料損毀。位元腐爛損毀不是由使用者的任何活動所觸發的,系統的作業系統本身也不知道損毀情況,無法通知使用者或管理員資料的變更。
位元腐爛的一些常見原因包括
硬碟老化
電流尖峰
硬碟韌體中的錯誤
幻影寫入
錯誤導向的讀取/寫入
驅動程式錯誤
意外覆寫
MinIO 使用雜湊演算法來確認物件的完整性。此演算法會自動在物件的任何 GET
和 HEAD
操作時套用。對於版本化儲存貯體中的物件,如果 MinIO 識別出版本不一致的情況,PUT
操作也可能會觸發修復。如果物件因位元腐爛而損毀,MinIO 可以根據物件的同位區塊的可用性自動 修復 該物件。
MinIO 也可以使用 MinIO 掃描器 來執行位元腐爛檢查和修復。但是,掃描器的位元腐爛檢查預設為關閉。與位元腐爛影響分佈在多個硬碟和節點上的多個物件分片的低機率相比,掃描器在掃描期間進行的位元腐爛修復具有很高的效能影響。正常操作期間的自動檢查通常足以應對位元腐爛,而且 MinIO 不建議使用掃描器進行此類型的健康狀態檢查。
MinIO 在 抹除集 中分散資料,以實現高可用性和復原能力
抹除集是一組支援 MinIO 抹除編碼的多個磁碟機。抹除編碼為儲存在 MinIO 部署中的資料提供高可用性、可靠性和冗餘。
MinIO 將物件分割成稱為 分片 的區塊,並將它們均勻分佈在抹除集中的每個磁碟機之間。即使任何單一磁碟機發生故障,MinIO 仍可繼續無縫地處理讀取和寫入請求。在最高冗餘等級下,即使部署中總磁碟機數的一半 (\(N / 2\)) 發生故障,MinIO 仍可以最小的效能影響處理讀取請求。
MinIO 會根據集合中磁碟機的總數以及集合中 minio
伺服器的數量來計算伺服器池中抹除集的大小和數量。如需更多資訊,請參閱抹除編碼基礎。
MinIO 會自動即時修復損壞或遺失的資料
修復是 MinIO 在發生某些事件導致資料遺失後還原資料的能力。資料遺失可能來自位元衰減、磁碟機故障或節點故障。
如果物件部分遺失,抹除編碼 可持續提供讀取和寫入存取權。
磁碟機的獨佔存取權
MinIO 需要對提供用於物件儲存的磁碟機或磁碟區進行獨佔存取。其他處理程序、軟體、指令碼或人員不應直接對提供給 MinIO 的磁碟機或磁碟區,或 MinIO 放置在其上的物件或檔案執行任何操作。
除非 MinIO 工程部門指示,否則請勿使用指令碼或工具直接修改、刪除或移動所提供磁碟機上的任何資料分片、同位分片或中繼資料檔案,包括從一個磁碟機或節點移動到另一個磁碟機或節點。此類操作很可能會導致廣泛的損壞和資料遺失,超出 MinIO 的修復能力。
MinIO 使用同位在物件層級寫入資料保護
具有多個磁碟機的 MinIO 部署會將可用磁碟機分為資料磁碟機和同位磁碟機。在寫入物件時,MinIO 抹除編碼會將關於物件內容的額外雜湊資訊新增至同位磁碟機。MinIO 使用同位資訊來確認物件的完整性,並在必要時還原特定磁碟機或磁碟機組上遺失、缺失或損壞的物件分片。
MinIO 可以容忍遺失最多等於抹除集中可用同位裝置總數的磁碟機數,同時仍能提供對物件的完全存取權。
使用仲裁交付讀取和寫入功能
執行任務必須可用的最少磁碟機數量。MinIO 有一個用於讀取資料的仲裁,以及一個用於寫入資料的獨立仲裁。
通常,MinIO 需要較高數量的可用磁碟機來維持寫入物件的能力,高於讀取物件所需。