文件

儲存桶複製

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、Metrics 和 SourceSelectionCriteria 等設定。

  • 來源和目的地儲存桶之間物件的主動-主動(雙向)複製。

  • 三個或更多 MinIO 部署之間物件的多站點複製

重新同步(災難復原)

重新同步主要用於在副本配置中,使用健康的部署來恢復 MinIO 部署上部分或全部資料遺失的情況。使用 mc replicate resync 命令,使用指定的來源儲存桶完全重新同步遠端目標 (mc admin bucket remote)。

重新同步過程會根據所有已設定的複製規則檢查來源儲存桶中的所有物件,這些規則包含現有物件複製。對於每個符合規則的物件,重新同步過程會將該物件放入複製佇列,無論物件目前的複製狀態為何。

MinIO 會跳過同步那些遠端副本與來源完全匹配的物件,包括物件元數據。 除此之外,MinIO 不會優先處理或修改佇列,也不會考慮目標的現有內容。

mc replicate resync 在儲存桶層級運作,並且支援前綴層級的粒度。在大型儲存桶上啟動重新同步可能會導致與複製相關的負載和流量顯著增加。請謹慎使用此命令,並且僅在必要時使用。

對於已設定物件轉換(分層)的儲存桶,複製重新同步會將物件還原為未轉換的狀態,且不帶任何相關的轉換元數據。因此,先前轉換到遠端儲存體的任何資料都將永久與遠端 MinIO 部署斷開連接。對於將明確的人類可讀前綴指定為遠端配置一部分的分層配置,您可以安全地清除該前綴中已轉換的資料,以避免與「遺失」資料相關的成本。

刪除操作的複製

MinIO 支援複製刪除操作,其中 MinIO 會同步刪除特定的物件版本以及新的刪除標記。刪除操作複製使用與所有其他複製操作相同的複製過程

MinIO 要求明確啟用版本化的刪除和刪除標記複製。使用 mc replicate add --replicate 欄位來指定 deletedelete-marker 中的其中一者或兩者,以分別啟用版本化的刪除和刪除標記複製。若要同時啟用兩者,請使用逗號分隔符號 delete,delete-marker 來指定兩個字串。

對於刪除標記複製,MinIO 會在刪除操作建立刪除標記後開始複製過程。MinIO 使用 X-Minio-Replication-DeleteMarker-Status 元數據欄位來追蹤刪除標記複製狀態。在主動-主動複製配置中,如果兩個叢集同時為一個物件建立刪除標記,或者如果一個或兩個叢集在複製事件同步之前已關閉,MinIO 可能會產生重複的刪除標記。

為了複製特定物件版本的刪除,MinIO 會將物件版本標記為 PENDING,直到複製完成。一旦遠端目標刪除該物件版本,MinIO 就會在來源上刪除該物件。雖然此過程可確保近乎同步的版本刪除,但可能會導致列出操作在初始刪除操作後傳回物件版本。MinIO 使用 X-Minio-Replication-Delete-Status 來追蹤刪除版本複製狀態。

MinIO 僅複製明確的用戶端驅動刪除操作。MinIO 會複製因應用生命週期管理到期規則而刪除的物件。對於主動-主動配置,請在所有複製儲存桶上設定相同的到期規則,以確保物件到期的一致應用。

現有物件的複製

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 操作。這降低了寫入操作緩慢的風險,但可能會導致遠端位置出現過期或遺失的物件。

當使用 mc admin bucket remote add 命令配置遠端目標時,您必須使用 add 旗標顯式啟用同步複寫。

複寫內部原理

本節記錄了內部複寫行為,對於使用或實作複寫並非至關重要。此文件僅供學習和教育目的。

複寫流程

MinIO 使用複寫佇列系統,多個並行的複寫工作程序在此佇列上運作。MinIO 持續複寫並從佇列中移除物件,同時掃描新的未複寫物件以將其加入佇列。

變更於版本 RELEASE.2022-07-18T17-49-40Z:MinIO 會將失敗的複寫操作放入佇列,並重試這些操作最多三次。

MinIO 會將在三次嘗試後仍無法複寫的複寫操作從佇列中移除。掃描器稍後可以選取這些受影響的物件,並將它們重新加入複寫佇列。

變更於版本 RELEASE.2022-08-11T04-37-28Z:當執行列表或任何 GETHEAD API 方法時,失敗或待處理的複寫會自動重新排隊。例如,在使用遠端位置恢復連線後,使用 mc statmc catmc ls 會將複寫重新排隊。

MinIO 會根據物件的複寫狀態設定 X-Amz-Replication-Status 元數據欄位。

複寫狀態

描述

PENDING

物件尚未被複寫。如果物件符合儲存桶上設定的其中一個複寫規則,MinIO 會套用此狀態。MinIO 會持續掃描尚未進入複寫佇列的 PENDING 物件,並在空間可用時將它們加入佇列。

對於多站點複寫,物件會保持 PENDING 狀態,直到複寫到該儲存桶或儲存桶前綴的所有已設定遠端位置。

COMPLETED

物件已成功複寫到遠端叢集。

FAILED

物件複寫到遠端叢集失敗。

MinIO 會持續掃描尚未進入複寫佇列的 FAILED 物件,並在空間可用時將它們加入佇列。

REPLICA

物件本身是來自遠端來源的複本。

複寫過程通常具有以下流程之一

  • PENDING -> COMPLETED

  • PENDING -> FAILED -> COMPLETED