核心操作概念
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 |
每個伺服器池都有一個或多個 erasure set,具體取決於池中的磁碟機和節點數量。
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 Console 圖形使用者介面
我該如何管理 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 需要比讀取物件所需更多的可用硬碟數量,才能維持寫入物件的能力。