儲存桶複製
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
欄位來指定 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
作業。這降低了寫入作業緩慢的風險,但可能會以遠端位置的物件過時或遺失為代價。
當使用 mc admin bucket remote add
命令設定遠端目標時,您必須明確啟用同步複製,並使用 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
metadata 欄位
複製狀態 |
說明 |
---|---|
|
物件尚未被複製。如果物件符合儲存桶上配置的複製規則之一,MinIO 會套用此狀態。MinIO 會持續掃描尚未加入複製佇列的 對於多站點複製,物件會保持 |
|
物件已成功複製到遠端叢集。 |
|
物件無法複製到遠端叢集。 MinIO 會持續掃描尚未加入複製佇列的 |
|
物件本身是來自遠端來源的複本。 |
複製過程通常具有以下流程之一
PENDING -> COMPLETED
PENDING -> FAILED -> COMPLETED