物件管理
物件是二進位資料,例如圖片、音訊檔案、試算表,甚至是二進位可執行程式碼。「二進位大型物件」或「blob」一詞有時與物件儲存相關聯,儘管 blob 的大小範圍可能從幾個位元組到數個 TB 不等。像 MinIO 這樣的物件儲存平台提供專用的工具和功能,用於使用標準的 S3 相容 API 來儲存、列出和擷取物件。
對磁碟機的獨佔存取
MinIO 要求對提供用於物件儲存的磁碟機或磁碟區具有獨佔存取權。其他程序、軟體、指令碼或人員不應直接對提供給 MinIO 的磁碟機或磁碟區,或是 MinIO 放置在其上的物件或檔案執行任何動作。
除非 MinIO 工程部門指示,否則請勿使用指令碼或工具來直接修改、刪除或移動所提供磁碟機上的任何資料分片、同位分片或中繼資料檔案,包括從一個磁碟機或節點移動到另一個磁碟機或節點。此類操作很可能會導致廣泛的損壞和資料遺失,超出 MinIO 的修復能力。
MinIO 物件儲存使用儲存貯體來組織物件。儲存貯體類似於檔案系統中的頂層磁碟機、資料夾或目錄(/mnt/data
或 C:\
),其中每個儲存貯體可以容納任意數量的物件。
MinIO 伺服器上的物件結構可能如下所示
/ #root
/images/
2020-01-02-MinIO-Diagram.png
2020-01-03-MinIO-Advanced-Deployment.png
MinIO-Logo.png
/videos/
2020-01-04-MinIO-Interview.mp4
/articles/
/john.doe/
2020-01-02-MinIO-Object-Storage.md
2020-01-02-MinIO-Object-Storage-comments.json
/jane.doe/
2020-01-03-MinIO-Advanced-Deployment.png
2020-01-02-MinIO-Advanced-Deployment-comments.json
2020-01-04-MinIO-Interview.md
透過範例結構,管理員會建立 /images
、/videos
和 /articles
儲存貯體。用戶端應用程式使用該物件的完整「路徑」將物件寫入這些儲存貯體,包括所有中間的前置詞。
MinIO 使用前置詞支援多層巢狀目錄和物件,以支援最動態的物件儲存工作負載。MinIO 使用 /
作為分隔符號,從完整物件路徑自動推斷中間前置詞,例如 /articles/john.doe
。用戶端和管理員不應手動建立這些前置詞。
用戶端和管理員都不會手動建立中間前置詞,因為 MinIO 會從物件名稱自動推斷它們。
路徑式與虛擬主機 Bucket 存取
MinIO 支援路徑式(預設)或虛擬主機 Bucket 查找。
例如,假設 MinIO 部署的完整網域名稱 (FQDN) 為 minio.example.net
使用路徑式查找時,應用程式會指定 Bucket 的完整路徑,例如
minio.example.net/mybucket
。使用虛擬主機查找時,應用程式會將 Bucket 指定為子網域,例如
mybucket.minio.example.net/
。
某些應用程式在針對 MinIO 執行 S3 操作時,可能需要或期望虛擬主機查找支援。若要啟用虛擬主機 Bucket 查找,您必須將 MINIO_DOMAIN
環境變數設定為可解析到 MinIO 部署的 FQDN。
如果您設定 MINIO_DOMAIN
,您必須將指定 FQDN 的所有子網域視為專門指定用作 Bucket 名稱。任何與這些網域衝突的 MinIO 服務,例如複寫目標,都可能因此衝突而出現非預期或不想要的行為。
例如,如果設定 MINIO_DOMAIN=minio.example.net
,您無法將 minio.example.net
的任何子網域(形式為 *.minio.example.net
)指派給任何 MinIO 服務或目標。這包括用於Bucket、批次或站點複寫的主機名稱。
重要事項
對於已啟用 TLS 的部署,您必須確保您的 TLS 憑證 SAN 涵蓋指定給 MINIO_DOMAIN
的最左側網域的所有子網域。
例如,MINIO_DOMAIN=minio.example.net
的範例需要一個涵蓋 minio.example.net
子網域的 TLS SAN。您可以設定額外的 TLS SAN *.minio.example.net
,以適當涵蓋子網域命名空間。
TLS 萬用字元規則會阻止連結到其他子網域層級,因此具有萬用字元 SAN *.example.net
的 TLS 憑證不會涵蓋 *.minio.example.net
的虛擬主機查找。
物件組織和規劃
管理員通常會控制 Bucket 的建立和組態。然後,用戶端應用程式可以使用與 S3 相容的 SDK,在 MinIO 部署上建立、列出、擷取和刪除物件。因此,用戶端會驅動指定 Bucket 或前置詞內的資料整體階層,而管理員可以使用原則來控制存取權,以允許或拒絕針對動作或資源的存取權。
MinIO 對指定部署上的 Bucket、物件或前置詞數量沒有硬性閾值。MinIO 部署底層的硬體和網路相對效能可能會對指定前置詞或 Bucket 中的物件數量造成實際限制。具體而言,使用較慢的磁碟機或網路基礎架構的硬體,在具有物件扁平階層的 Bucket 或前置詞中往往表現出較差的效能。如需其他注意事項、閾值或限制,請參閱閾值和限制。
請將以下幾點視為用戶端應用程式工作負載模式的一般指導原則
硬體資源有限或預算有限的部署,應將其工作負載架構設定為以每個前置詞 10,000 個物件為基準。根據實際工作負載的基準測試和監控,將此目標增加到硬體可以有效處理的程度。
具有高效能或企業級硬體的部署,通常可以處理具有數百萬個或更多物件的前置詞。
MinIO SUBNET 企業帳戶可以利用年度架構審查,作為部署和維護策略的一部分,以確保您依賴 MinIO 的專案的長期效能和成功。
如需深入討論限制前置詞內容的好處,請參閱有關最佳化 S3 效能的文章。
物件版本控制
用戶端在 Bucket 上執行寫入、列出、取得或刪除操作的具體行為,取決於該 Bucket 的版本控制狀態
操作 |
已啟用版本控制 |
已停用 | 已暫停版本控制 |
---|---|---|
|
建立物件的新完整版本作為「最新版本」,並指派唯一的版本 ID |
建立具有命名空間比對覆寫的物件。 |
|
預設擷取物件的最新版本 支援依版本 ID 擷取任何物件版本。 |
擷取物件 |
|
擷取指定 Bucket 或前置詞中物件的最新版本 支援擷取所有物件及其相關聯的版本 ID。 |
擷取指定 Bucket 或前置詞中的所有物件 |
|
為物件建立 0 位元組「刪除標記」作為「最新版本」(軟刪除) 支援依版本 ID 刪除任何物件版本(硬刪除)。您無法復原硬刪除操作。 如需詳細資訊,請參閱物件刪除。 |
刪除物件 |
如需更完整的文件,請參閱Bucket 版本控制。
物件標籤
MinIO 支援將自訂標籤新增至物件。標籤是物件的中繼資料中包含的索引鍵值組。標籤可用於透過原則控制存取,或使用mc find --tags
尋找物件。
MinIO 支援將最多 10 個自訂標籤新增至物件。
如需設定標籤的詳細資訊,請參閱mc tag set
。
物件保留
MinIO 物件鎖定(「物件保留」)強制執行「一次寫入多次讀取」(WORM) 不可變性,以保護已版本控制的物件不被刪除。MinIO 支援基於持續時間的物件保留和無限期法律保留。
針對 WORM 鎖定的物件執行的刪除操作取決於具體操作
未指定版本 ID 的刪除操作會建立「刪除標記」
指定鎖定物件版本 ID 的刪除操作會導致 WORM 鎖定錯誤
您只能在首次建立 Bucket 時啟用物件鎖定。啟用 Bucket 鎖定也會啟用版本控制。
MinIO 物件鎖定提供關鍵資料保留合規性,並符合 SEC17a-4(f)、FINRA 4511(C) 和 CFTC 1.31(c)-(d) 的要求,根據Cohasset Associates。
如需更完整的文件,請參閱MinIO 物件鎖定和物件刪除。
物件生命週期管理
MinIO 物件生命週期管理允許建立規則,以進行基於時間或日期的物件自動轉換或到期。對於物件轉換,MinIO 會自動將物件移動到已設定的遠端儲存層。對於物件到期,MinIO 會自動刪除物件。
MinIO 使用與一般用戶端操作相同的行為,在已版本控制和未版本控制的 Bucket上套用生命週期管理規則。您可以指定處理最新物件版本、非最新物件版本或兩者的轉換或生命週期規則。
MinIO 生命周期管理是為行為和語法相容於AWS S3 生命周期管理而建置的。MinIO 使用 JSON 來描述生命週期管理規則。從 S3 或類似相容平台建立的規則可能需要轉換為 XML 或從 XML 轉換。
如需更完整的文件,請參閱物件生命週期管理。
目標 Bucket 考量
MinIO 並不要求目標 Bucket 在物件管理或版本控制組態上與來源 Bucket 相符。如果謹慎定義,目標 Bucket 可能有其自己的一組物件管理規則。
目標 Bucket 應該不要有其自己的到期或額外分層規則。到期規則可能會導致移除仍由來源 Bucket 使用的分層資料。分層到其他遠端會在熱層及其資料之間建立額外的網路跳躍,同時也會增加操作複雜性。
您可以在遠端 Bucket 上設定物件鎖定或版本控制。
在目標 Bucket 上啟用版本控制或物件鎖定可能會產生以下影響
在目標 Bucket 上設定的物件鎖定可能會阻止來源 Bucket 完成所需的
delete
操作。MinIO 使用自己的
UUID
對物件進行分層,因此目標 Bucket 上的版本控制充其量是多餘的。目標端的儲存效率降低,因為
delete
操作會建立DeleteMarker
,而不是釋放空間。來源和目標儲存桶上重複的刪除標記。
遠端資料的獨佔存取
MinIO 必須對目標儲存桶擁有獨佔存取權。沒有其他使用者、程序、應用程式或資源應該對目標儲存桶有任何存取權或執行任何操作。
所有對已轉換物件的存取必須僅透過 MinIO 的 S3 API 操作進行。 手動修改已轉換的物件 (無論是在 "hot" MinIO 層上的中繼資料,還是在遠端 "warm/cold" 層上的物件資料) 都可能導致該物件資料遺失。
MinIO 會忽略遠端儲存桶或儲存桶前綴中任何未由 MinIO 部署明確管理的物件。 自動轉換和透明物件檢索取決於以下假設
遠端儲存上沒有物件的外部變更、遷移或刪除。
遠端儲存桶上沒有生命週期管理規則(例如轉換或過期)。
為了方便這種獨佔存取,請在生命週期管理使用者的 政策中,授予其對目標儲存桶的 read
、write
和 delete
存取權。所有其他政策都應該 deny
對目標儲存桶的存取權。