文件

儲存桶複製

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 的物件,例如在儲存桶上啟用版本控制之前寫入的物件。

您可以在設定或修改儲存桶複寫規則時停用現有物件複寫。 您必須在建立或修改期間指定所有所需的複寫功能

停用現有物件複寫不會移除任何已複寫到遠端儲存桶的物件。

同步與非同步複寫

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 metadata 欄位。

複製狀態

描述

PENDING

物件尚未複製。如果物件符合儲存貯體上配置的複製規則之一,MinIO 會套用此狀態。MinIO 持續掃描尚未在複製佇列中的 PENDING 物件,並在空間可用時將它們新增至佇列。

對於多站點複製,物件會保持在 PENDING 狀態,直到複製到該儲存貯體或儲存貯體前綴的所有配置的遠端。

COMPLETED

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

FAILED

物件無法複製到遠端叢集。

MinIO 持續掃描尚未在複製佇列中的 FAILED 物件,並在空間可用時將它們新增至佇列。

REPLICA

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

複製流程通常具有以下流程之一

  • PENDING -> COMPLETED

  • PENDING -> FAILED -> COMPLETED