物件管理
一個 物件 是二進位資料,例如圖片、音訊檔案、試算表,甚至是二進位可執行程式碼。「二進位大型物件」或「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 會自動從物件名稱推斷它們。
路徑與虛擬主機儲存桶存取
MinIO 同時支援 路徑樣式 (預設) 或 虛擬主機儲存桶查找。
例如,考慮一個 MinIO 部署,其指派的完整網域名稱 (FQDN) 為 minio.example.net
。
使用路徑樣式查詢時,應用程式會指定儲存貯體的完整路徑,例如
minio.example.net/mybucket
。使用虛擬主機查詢時,應用程式會將儲存貯體指定為子網域,例如
mybucket.minio.example.net/
。
某些應用程式在對 MinIO 執行 S3 操作時,可能需要或期望虛擬主機查詢支援。若要啟用虛擬主機儲存貯體查詢,您必須將 MINIO_DOMAIN
環境變數設定為可解析至 MinIO 部署的 FQDN。
如果您設定 MINIO_DOMAIN
,您必須將指定 FQDN 的所有子網域視為專門指派為儲存貯體名稱使用。任何與這些網域衝突的 MinIO 服務 (例如複寫目標) 都可能因衝突而產生非預期或不希望發生的行為。
例如,如果設定 MINIO_DOMAIN=minio.example.net
,則您無法將 minio.example.net
的任何子網域 (以 *.minio.example.net
的形式) 指派給任何 MinIO 服務或目標。這包括用於 儲存貯體、批次 或 網站複寫 的主機名稱。
重要
對於啟用 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
的虛擬主機查詢。
物件組織與規劃
管理員通常會控制儲存貯體的建立與設定。然後,用戶端應用程式可以使用 與 S3 相容的 SDK,以在 MinIO 部署上建立、列出、擷取和刪除物件。因此,用戶端會驅動給定儲存貯體或前置詞內資料的整體階層,而管理員可以使用原則來授予或拒絕對動作或資源的存取權,以行使控制權。
MinIO 對於給定部署上的儲存貯體、物件或前置詞數量沒有硬性閾值。MinIO 部署基礎的硬體與網路的相對效能,可能會對給定前置詞或儲存貯體中的物件數量造成實際限制。具體來說,使用較慢磁碟機或網路基礎結構的硬體,在具有物件平面階層的儲存貯體或前置詞中,往往會顯示效能不佳。如需其他考量、閾值或限制 (請務必記住),請參閱閾值與限制。
請將下列幾點視為用戶端應用程式工作負載模式的一般指引
硬體效能普通或以預算為重點的部署,應將其工作負載設計為以每個前置詞 10,000 個物件為目標基準。根據實際工作負載的基準測試與監控來提高此目標,直到硬體能夠有意義地處理為止。
具有高效能或企業級硬體的部署,通常可以處理具有數百萬個物件或更多物件的前置詞。
MinIO SUBNET 企業帳戶可以利用年度架構檢閱,作為部署和維護策略的一部分,以確保您依賴 MinIO 的專案的長期效能和成功。
如需深入討論限制前置詞內容的優點,請參閱有關最佳化 S3 效能的文章。
物件版本控制
儲存貯體上寫入、列出、取得或刪除操作的特定用戶端行為,取決於該儲存貯體的版本控制狀態
操作 |
已啟用版本控制 |
已停用 | 已暫停版本控制 |
---|---|---|
|
建立物件的新完整版本作為「最新」,並指派唯一的版本 ID |
建立具有命名空間比對覆寫的物件。 |
|
依預設擷取物件的最新版本 支援依版本 ID 擷取任何物件版本。 |
擷取物件 |
|
擷取指定儲存貯體或前置詞中物件的最新版本 支援擷取所有物件及其相關的版本 ID。 |
擷取指定儲存貯體或前置詞中的所有物件 |
|
為物件建立 0 位元組「刪除標記」作為「最新」(軟刪除) 支援依版本 ID 刪除任何物件版本 (硬刪除)。您無法還原硬刪除操作。 如需詳細資訊,請參閱物件刪除。 |
刪除物件 |
如需更完整的說明文件,請參閱儲存貯體版本控制。
物件標記
MinIO 支援將自訂標籤新增至物件。標籤是包含在物件中繼資料中的索引鍵值組。標籤可用於透過原則控制存取,或使用 mc find --tags
尋找物件。
MinIO 支援將最多 10 個自訂標籤新增至物件。
如需更多有關設定標籤的資訊,請參閱mc tag set
。
物件保留
MinIO 物件鎖定 (「物件保留」) 強制執行一次寫入多次讀取 (WORM) 不可變性,以保護版本化的物件免於刪除。MinIO 支援持續時間型物件保留和無限期法律保留。
對 WORM 鎖定物件的刪除操作取決於特定操作
未指定版本 ID 的刪除操作會導致建立「刪除標記」
指定鎖定物件版本 ID 的刪除操作會導致 WORM 鎖定錯誤
您只能在首次建立儲存貯體時啟用物件鎖定。啟用儲存貯體鎖定也會啟用版本控制。
MinIO 物件鎖定提供主要的資料保留合規性,並符合 Cohasset Associates 所述的 SEC17a-4(f)、FINRA 4511(C) 和 CFTC 1.31(c)-(d) 要求。
如需更完整的說明文件,請參閱MinIO 物件鎖定和物件刪除。
物件生命週期管理
MinIO 物件生命週期管理允許建立規則,以根據時間或日期自動轉換或使物件過期。對於物件轉換,MinIO 會自動將物件移至已設定的遠端儲存層。對於物件過期,MinIO 會自動刪除物件。
MinIO 對於版本化和未版本化的儲存貯體,採用與正常用戶端操作相同的行為,來套用生命週期管理規則。您可以指定處理最新物件版本、非最新物件版本或兩者的轉換或生命週期規則。
MinIO 生命週期管理的建構目的,是為了與AWS S3 生命週期管理的行為和語法相容。MinIO 使用 JSON 來描述生命週期管理規則。從 S3 或類似相容平台上建立的規則進行匯入時,可能需要轉換為 XML 或從 XML 轉換。
如需更完整的說明文件,請參閱物件生命週期管理。
目標儲存貯體考量
MinIO 並不要求目標儲存貯體與來源儲存貯體的物件管理或版本控制設定相符。目標儲存貯體可能有其自己的一組物件管理規則,如果謹慎定義的話。
目標儲存貯體應不要有其自己的到期或額外分層規則。到期規則可能會導致移除來源儲存貯體仍在使用的分層資料。分層到其他遠端會在熱層及其資料之間建立額外的網路躍點,同時也會增加操作複雜性。
您可以在遠端儲存貯體上設定物件鎖定或版本控制。
在目標儲存貯體上啟用版本控制或物件鎖定可能會產生以下影響
目標儲存桶上設定的物件鎖定可能會阻止來源儲存桶中所需的
delete
操作完成。MinIO 依據各自的
UUID
對物件進行分層,因此目標儲存桶上的版本控制充其量是多餘的。目標儲存空間的儲存效率降低,因為
delete
操作會建立一個DeleteMarker
,而不是釋放空間。來源和目標儲存桶上重複的刪除標記。
遠端資料的獨佔存取權
MinIO 必須具有對目標儲存桶的獨佔存取權。其他使用者、程序、應用程式或資源不應對目標儲存桶進行任何存取或執行任何操作。
所有對已轉換物件的存取必須僅透過 MinIO 以 S3 API 操作進行。手動修改已轉換的物件(無論是「熱」MinIO 層上的元數據還是遠端「溫/冷」層上的物件資料)都可能導致該物件資料的遺失。
MinIO 會忽略遠端儲存桶或儲存桶前綴中,未由 MinIO 部署明確管理的任何物件。自動轉換和透明的物件檢索取決於以下假設
遠端儲存空間上的物件沒有外部的變更、遷移或刪除。
遠端儲存桶上沒有生命週期管理規則(例如轉換或過期)。
為了促進此獨佔存取,請在目標儲存桶的原則中授予生命週期管理使用者對目標儲存桶的 read
、 write
和 delete
存取權。所有其他原則都應 deny
對目標儲存桶的存取。