儲存桶複寫
MinIO 支援來源和目的地儲存桶之間物件的伺服器端和用戶端複寫。
- 伺服器端儲存桶複寫
設定每個儲存桶的規則,以便在 MinIO 部署之間自動同步物件。您設定儲存桶複寫規則的部署會作為「來源」,而設定的遠端部署會作為「目標」。MinIO 會將規則作為物件寫入操作(例如
PUT
)的一部分來套用,並自動同步新物件和物件變更,例如新物件版本或物件中繼資料的變更。MinIO 伺服器端儲存桶複寫僅支援在遠端複寫目標上使用相同版本的 MinIO 叢集。
- 用戶端儲存桶複寫
使用命令處理來同步同一個 S3 相容叢集內或兩個獨立的 S3 相容叢集之間的儲存桶中的物件。使用
mc mirror
的用戶端複寫支援 MinIO 到 S3 以及類似的複寫配置。
儲存桶與站點複寫
儲存桶複寫與站點複寫不同,並且是互斥的。
儲存桶複寫會同步儲存桶層級的資料,例如儲存桶前置路徑和物件。
您可以隨時設定儲存桶複寫,並且遠端 MinIO 部署可能在複寫目標儲存桶上具有預先存在的資料。
站點複寫會將儲存桶複寫延伸到包含IAM、安全性權杖、存取金鑰和儲存桶層級的配置。
站點複寫通常在最初部署 MinIO 對等站點時進行設定。在初始設定時,只有一個站點可以持有任何儲存桶或物件。
伺服器端儲存桶複寫
MinIO 伺服器端儲存桶複寫是一種自動儲存桶層級的配置,可在來源和目的地儲存桶之間同步物件。MinIO 伺服器端複寫要求來源和目的地儲存桶是兩個執行相同 MinIO 伺服器版本的不同 MinIO 叢集。
對於儲存桶的每個寫入操作,MinIO 都會檢查儲存桶的所有已設定複寫規則,並套用具有最高設定優先順序的相符規則。MinIO 會同步新物件和物件變更,例如新物件版本或物件中繼資料的變更。這包括中繼資料操作,例如啟用或修改物件鎖定或保留設定。
MinIO 伺服器端儲存桶複寫的功能與 Amazon S3 複寫類似,同時新增了以下 MinIO 獨有的功能
來源和目的地儲存桶名稱可以相符,支援站點對站點的使用案例,例如 Splunk 或 Veeam BC/DR。
比 S3 儲存桶複寫配置更簡化的實作,無需設定 AccessControlTranslation、指標和 SourceSelectionCriteria 等設定。
來源和目的地儲存桶之間物件的 Active-Active (雙向) 複寫。
三個或更多 MinIO 部署之間物件的多站點複寫
重新同步 (災害復原)
重新同步主要支援在使用複本組態中的健康部署,來復原 MinIO 部署上部分或全部的資料遺失。使用 mc replicate resync
命令,可以完全重新同步遠端目標(mc admin bucket remote
),使用指定的來源儲存桶。
重新同步的過程會檢查來源儲存桶中的所有物件,並比對所有包含 現有物件複製 的已設定複製規則。對於符合規則的每個物件,重新同步過程會將物件放入複製 佇列 中,無論物件目前的複製狀態為何。
MinIO 會跳過同步那些遠端副本與來源完全匹配的物件,包括物件的中繼資料。在其他情況下,MinIO 不會優先處理或修改佇列,考量到目標的現有內容。
mc replicate resync
在儲存桶層級操作,並且不支援前綴層級的粒度。在大型儲存桶上啟動重新同步可能會導致與複製相關的負載和流量顯著增加。請謹慎使用此命令,且僅在必要時使用。
對於已設定 物件轉換(分層)的儲存桶,複製重新同步會還原處於非轉換狀態且沒有關聯轉換中繼資料的物件。因此,先前轉換到遠端儲存體的任何資料都會與遠端 MinIO 部署永久斷開連線。對於指定明確人類可讀取的前綴作為遠端組態一部分的分層組態,您可以安全地清除該前綴中已轉換的資料,以避免與「遺失」資料相關的成本。
刪除操作的複製
MinIO 支援複製 刪除 操作,其中 MinIO 會同步刪除特定物件版本以及新的 刪除標記。刪除操作複製使用與所有其他複製操作相同的複製過程。
MinIO 需要明確啟用版本化的刪除和刪除標記複製。使用 mc replicate add --replicate
欄位來指定 delete
和 delete-marker
的其中一項或兩者,以分別啟用版本化刪除和刪除標記複製。若要同時啟用兩者,請使用逗號分隔符號 delete,delete-marker
指定兩個字串。
對於刪除標記複製,MinIO 會在刪除操作建立刪除標記後開始複製過程。MinIO 使用 X-Minio-Replication-DeleteMarker-Status
中繼資料欄位來追蹤刪除標記複製狀態。在 主動-主動 複製組態中,如果兩個叢集同時為物件建立刪除標記,或者如果其中一個或兩個叢集在複製事件同步之前關閉,則 MinIO 可能會產生重複的刪除標記。
對於複製特定物件版本的刪除,MinIO 會將物件版本標記為 PENDING
,直到複製完成。遠端目標刪除該物件版本後,MinIO 會刪除來源上的物件。雖然此過程確保接近同步的版本刪除,但可能會導致在初始刪除操作之後,列出操作傳回物件版本。MinIO 使用 X-Minio-Replication-Delete-Status
來追蹤刪除版本複製狀態。
MinIO 僅複製明確的用戶端驅動刪除操作。MinIO 不會複製從 生命週期管理到期規則 的應用程式中刪除的物件。對於 主動-主動 組態,請在所有複製儲存桶上設定相同的到期規則,以確保物件到期的一致應用。
MinIO 會修剪來源和遠端儲存桶上的空物件前綴
如果刪除操作移除儲存桶前綴中的最後一個物件,則 MinIO 會遞迴地移除前綴的每個空部分,直到儲存桶根目錄。MinIO 僅將遞迴移除應用於隱式建立的前綴,作為物件寫入操作的一部分,也就是說,前綴不是使用明確的目錄建立命令(例如 mc mb
)建立的。
如果複製規則啟用複製刪除操作,則複製過程也會在目標 MinIO 叢集上應用隱式前綴修剪行為。
例如,假設有一個儲存桶 photos
,其中包含下列物件前綴
photos/2021/january/myphoto.jpg
photos/2021/february/myotherphoto.jpg
photos/NYE21/NewYears.jpg
photos/NYE21
是唯一使用 mc mb
明確建立的前綴。所有其他前綴都是隱式建立的,作為寫入位於該前綴的物件的一部分。
一個命令刪除了
myphoto.jpg
。MinIO 會自動修剪空的/janaury
前綴。然後,一個命令刪除了
myotherphoto.jpg
。MinIO 會自動修剪/february
前綴以及現在為空的/2021
前綴。一個命令刪除了
NewYears.jpg
物件。MinIO 會將/NYE21
前綴保留在原地,因為它是明確建立的。
現有物件的複製
預設情況下,MinIO 會將來源儲存桶中的現有物件複製到設定的遠端,類似於 AWS:在 S3 儲存桶之間複製現有物件,而沒有聯絡技術支援的額外負擔。
MinIO 會將所有符合複製規則的物件或物件前綴標記為符合與遠端叢集和儲存桶同步的資格。MinIO 只會排除沒有版本 ID 的那些物件,例如在儲存桶上啟用版本控制之前寫入的那些物件。
您可以在設定或修改儲存桶複製規則時,停用現有物件複製。您必須在建立或修改期間指定所有所需的複製功能
對於新的複製規則,請從指定給
mc replicate add --replicate
的複製功能清單中排除"existing-objects"
。對於現有的複製規則,請使用
mc replicate update --replicate
從現有複製功能清單中移除"existing-objects"
。新規則會取代先前的規則。
停用現有物件複製不會移除任何已複製到遠端儲存桶的物件。
同步與非同步複製
MinIO 支援為給定的遠端目標指定非同步(預設)或同步複製。
使用非同步複製,MinIO 會在將物件放入複製佇列之前,完成原始的 PUT
操作。因此,原始用戶端可能會在物件複製之前,看到成功的 PUT
操作。雖然這可能會導致遠端物件過時或遺失,但它可以降低因複製負載而導致寫入操作緩慢的風險。
使用同步複製,MinIO 會嘗試在完成原始 PUT
操作之前複製物件。無論複製嘗試是否成功,MinIO 都會傳回成功的 PUT
操作。這會降低遠端位置物件過時或遺失的風險,但可能會導致寫入操作緩慢。
當使用具有 add
旗標的 mc admin bucket remote add
命令設定遠端目標時,您必須明確啟用同步複製。
複製內部機制
本節記錄了內部複製行為,對於使用或實作複製而言並非至關重要。此文件僅供學習和教育目的而提供。
複製過程
MinIO 使用複製佇列系統,其中多個並行複製工作程式在該佇列上執行。MinIO 會持續工作以複製和移除佇列中的物件,同時掃描新的未複製物件以新增至佇列。
版本變更:RELEASE.2022-07-18T17-49-40Z:MinIO 會將失敗的複寫操作加入佇列,並重試這些操作最多三次。
MinIO 會將嘗試三次後仍無法複寫的複寫操作從佇列中移除。掃描器稍後可以提取這些受影響的物件,並將它們重新加入複寫佇列。
版本變更:RELEASE.2022-08-11T04-37-28Z:執行列表或任何 GET
或 HEAD
API 方法時,失敗或等待中的複寫會自動重新加入佇列。例如,在遠端位置恢復連線後,使用 mc stat
、mc cat
或 mc ls
,會將複寫重新加入佇列。
MinIO 會根據物件的複寫狀態設定 X-Amz-Replication-Status
元資料欄位。
複寫狀態 |
描述 |
---|---|
|
物件尚未被複寫。如果物件符合儲存桶上設定的其中一項複寫規則,MinIO 會套用此狀態。MinIO 會持續掃描尚未加入複寫佇列的 對於多站點複寫,物件會保持在 |
|
物件已成功複寫到遠端叢集。 |
|
物件複寫到遠端叢集失敗。 MinIO 會持續掃描尚未加入複寫佇列的 |
|
物件本身是來自遠端來源的複本。 |
複寫過程通常具有以下其中一種流程:
PENDING -> COMPLETED
PENDING -> FAILED -> COMPLETED