Cloud Storage 鏡像提供自動化、事件導向的同步處理服務,可持續將 Cloud Storage bucket 中的檔案鏡像至 Managed Lustre 目錄。鏡像功能僅支援單向,即從 Cloud Storage 到 Managed Lustre。
Cloud Storage 鏡像僅依要求提供。如要表達意願,請提交 Cloud Storage 鏡像要求表單。
如需使用中的 Cloud Storage 鏡像支援,請傳送電子郵件至 google-cloud-managed-lustre-support@google.com。
Cloud Storage 鏡像與隨選資料移轉的比較
Managed Lustre 支援兩種透過 Cloud Storage 移動資料的機制:
| 功能 | Cloud Storage 鏡像 | 隨選資料移轉 |
|---|---|---|
| 方向 | Cloud Storage 到 Managed Lustre | Cloud Storage 到 Managed Lustre Managed Lustre 到 Cloud Storage |
| 觸發條件 | 事件導向;在建立、更新及刪除物件時自動同步 | 手動 |
| 階層命名空間 | 不支援 | 支援且建議使用,可加快傳輸速度 |
| Rapid Storage bucket | 不支援 | 不支援 |
如要瞭解隨選移轉作業,請參閱「將資料移轉至 Cloud Storage 或從中移出」。
Cloud Storage 鏡像的運作方式
Cloud Storage 鏡像會在 Cloud Storage 來源和目標 Managed Lustre 目錄之間,執行事件導向的移轉作業。Cloud Storage 來源可以是 bucket,或 bucket 內的特定物件前置字串。鏡像作業分為兩個階段:建立鏡像時的初始同步處理,以及後續變更的持續複製。
初始同步處理
建立 Cloud Storage 鏡像時,服務會執行初始同步,將所有現有物件從來源 Cloud Storage 路徑,複製到目標 Managed Lustre 目錄。
持續事件導向複製
初始同步處理完成後,鏡像服務會監聽 bucket 通知並複製變更。
大多數物件可在幾分鐘內複製完成。建立或修改物件時,系統會複製整個檔案。
在 Cloud Storage 建立新物件時,系統會自動在 Managed Lustre 建立對應的檔案。
修改 Cloud Storage 中的現有物件,會覆寫 Managed Lustre 中的檔案,並捨棄在檔案系統中進行的任何本機修改。
如果變更 Cloud Storage 物件的自訂 POSIX 中繼資料屬性 (例如 UID、GID、模式或
mtime),對應的 Managed Lustre 檔案也會更新。根據預設,刪除 Cloud Storage 中的物件,也會刪除 Managed Lustre 中的鏡像檔案。您可以使用
--deleted-files-retained旗標變更這項行為。刪除最後一個檔案後,空白的上層目錄仍會保留在檔案系統中。在 Managed Lustre 中對鏡像檔案所做的修改,不會複製回來源 bucket。如果來源物件日後更新,Managed Lustre 檔案會遭到來源物件的內容覆寫,並捨棄任何本機修改內容。
刪除 Managed Lustre 中的鏡像檔案,不會刪除 Cloud Storage 中的對應物件。
傳輸速度
下列傳輸速度適用於 bucket 和執行個體位於相同 Google Cloud 區域的 Cloud Storage 鏡像:
初始同步作業會複製現有資料,檔案超過 32 MB 時,速度最高可達 100 GBps;小型檔案則每秒最多可複製 10,000 個物件。
持續複製功能會自動同步處理進行中的變更,傳輸效能會因檔案大小而異:
- 10 MB 以上的大型檔案傳輸速度最高可達 3.5 GBps 尖峰處理量。
- 4 KB 以下的小型檔案,傳輸速度最高可達每秒 4,900 個物件。
如果資料寫入 Cloud Storage 的速度快於鏡像複製的速度,事件就會在待處理項目中排入佇列,導致變更顯示在 Managed Lustre 的時間增加。一旦變更率降低,鏡像就會自動趕上。
傳輸速度受限於:
執行個體的處理量上限,也就是執行個體容量乘以效能級別。
Cloud Storage egress 頻寬,每個專案在各區域的限制為 200 Gbps 或 25 GBps。如要取得更高的輸出頻寬,請申請提高配額。
跨區域移轉的網路延遲時間。為獲得最佳效能,請將來源 bucket 和執行個體放在相同區域。
定價
Cloud Storage 鏡像會產生標準 Cloud Storage 費用,並向包含來源 bucket 的專案收取:
- 初始同步作業會對來源 bucket 執行 A 級清單作業和 B 級讀取作業,而持續複製作業會執行 B 級讀取作業,這些作業會產生 Cloud Storage 營運費用。
- 如果來源 bucket 與 Managed Lustre 執行個體位於不同區域,鏡像資料會產生跨區域資料移轉費用。
事前準備
建立 Cloud Storage 鏡像時,必須符合下列條件:
- 處於
ACTIVE狀態的 Managed Lustre 執行個體。 - 現有的 Cloud Storage bucket,做為鏡像來源。不支援啟用階層命名空間的 bucket、Rapid Storage bucket,以及啟用要求者付費的 bucket。
必要權限、角色和資源
您必須具備下列 IAM 權限、角色和資源,才能建立及管理 Cloud Storage 鏡像。
使用者權限
如要建立及管理鏡像,使用者帳戶或服務帳戶必須具備 Managed Lustre 管理員角色 (roles/lustre.admin)。
如果使用自訂角色,該角色必須具備下列權限:
lustre.mirrors.create:建立鏡像。lustre.mirrors.get:描述鏡子。lustre.mirrors.list:用於列出鏡像。lustre.mirrors.update:用於更新鏡像。lustre.mirrors.delete:刪除鏡像。
Cloud Storage 服務代理初始化
專案中必須有 Cloud Storage 服務代理,才能發布 bucket 通知事件:
gcloud storage service-agent --project=PROJECT_ID
將 PROJECT_ID 替換為 Google Cloud 專案 ID。
Managed Lustre 服務代理權限
Google 代管的 Managed Lustre 服務代理需要存取來源 Cloud Storage bucket。如要瞭解如何尋找或初始化服務代理身分,請參閱「Managed Lustre 服務代理」。
服務代理需要來源 Cloud Storage bucket 的下列權限:
storage.buckets.getstorage.buckets.updatestorage.objects.getstorage.objects.list
建立包含下列權限的自訂角色:
gcloud iam roles create lustreMirrorUser \
--project=PROJECT_ID \
--title="Lustre mirror user" \
--permissions=storage.buckets.get,storage.buckets.update,storage.objects.get,storage.objects.list
將自訂角色授予來源 bucket 的 Managed Lustre 服務代理:
gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \
--member="serviceAccount:service-PROJECT_NUMBER@gcp-sa-lustre.iam.gserviceaccount.com" \
--role="projects/PROJECT_ID/roles/lustreMirrorUser"
更改下列內容:
- PROJECT_ID: Google Cloud 專案 ID。
- BUCKET_NAME:來源 Cloud Storage bucket 的名稱。
- PROJECT_NUMBER:您的 Google Cloud 專案編號。
建立 Cloud Storage 鏡像
每個 Managed Lustre 執行個體可以建立一個 Cloud Storage 鏡像。
如果執行個體正在執行匯入或匯出作業,就無法建立 Cloud Storage 鏡像。
gcloud
執行 mirrors create 指令:
gcloud lustre instances mirrors create MIRROR_NAME \
--instance=INSTANCE_ID \
--location=LOCATION \
--direction=from-cloud-storage \
--gcs-path-uri="gs://BUCKET_NAME/PREFIX/" \
--lustre-path="/LUSTRE_DIRECTORY"
其中:
- MIRROR_NAME 是這個鏡像資源的名稱。長度必須介於 1 到 63 個半形字元之間,只能使用小寫英文字母、數字和連字號,開頭須為英文字母,結尾則須為英文字母或數字。
- INSTANCE_ID 是 Managed Lustre 執行個體 ID。
- LOCATION 是執行個體的可用區。例如:
us-central1-a。 --direction指定鏡像方向。必須為from-cloud-storage。--gcs-path-uri是來源 Cloud Storage bucket 和選用的物件前置字串。如果指定物件前置字元,路徑結尾必須是正斜線:gs://<var>BUCKET_NAME</var>/<var>PREFIX</var>/。--lustre-path是 Managed Lustre 檔案系統的目標目錄。必須是開頭為/的絕對路徑,例如/data或/data/subdir。預設為根目錄/。如果指定目錄不存在,系統會自動建立。
可用的選用參數如下:
--deleted-files-retained或--no-deleted-files-retained:控制是否要在 Managed Lustre 中保留 Cloud Storage 刪除的檔案。預設值為--no-deleted-files-retained。--description=DESCRIPTION_TEXT:鏡像的選用說明。
REST
向 instances.mirrors.create 方法傳送 POST 要求:
POST https://lustre.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/instances/INSTANCE_ID/mirrors?mirrorId=MIRROR_NAME
Authorization: Bearer YOUR_ACCESS_TOKEN
Content-Type: application/json
{
"gcsPath": {
"uri": "gs://BUCKET_NAME/PREFIX/"
},
"lustrePath": {
"path": "/LUSTRE_DIRECTORY"
},
"direction": "FROM_CLOUD_STORAGE"
}
其中:
- PROJECT_ID 是您的 Google Cloud 專案 ID。
- LOCATION 是 Managed Lustre 執行個體的可用區。例如:
us-central1-a。 - INSTANCE_ID 是執行個體 ID。
- MIRROR_NAME 是這個鏡像資源的名稱。長度必須介於 1 到 63 個半形字元之間,只能使用小寫英文字母、數字和連字號,開頭須為英文字母,結尾則須為英文字母或數字。
gcsPath包含uri欄位,其中有來源 Cloud Storage bucket 和選用的物件前置字串。如果指定物件前置字串,路徑結尾必須是正斜線:gs://<var>BUCKET_NAME</var>/<var>PREFIX</var>/。lustrePath是 Managed Lustre 檔案系統的目標目錄。必須是開頭為/的絕對路徑,例如/data或/data/subdir。預設為根目錄/。如果指定目錄不存在,系統會自動建立。direction指定鏡像方向。必須為FROM_CLOUD_STORAGE。
要求主體也支援下列選用欄位:
deletedFilesRetained:設為true,即可在 Cloud Storage 刪除對應檔案後,保留 Managed Lustre 中的檔案。預設值為false。description:鏡像的選用說明。
檔案屬性
將檔案從 Cloud Storage bucket 複製到 Managed Lustre 執行個體時,Managed Lustre 執行個體中的檔案屬性會透過下列兩種方式之一設定:
- 如果 Cloud Storage 物件具有匯出資料所述的自訂中繼資料,則:
- 系統會根據物件的自訂中繼資料,設定檔案的 UID、GID、模式和
mtime。 - 檔案的
atime會設為與mtime相同的值。
- 系統會根據物件的自訂中繼資料,設定檔案的 UID、GID、模式和
- 如果 Cloud Storage 物件沒有自訂中繼資料,則:
- 檔案的 UID 和 GID 設為 0 (
root)。 - 檔案的模式設為
rwxr-xr-x(755)。 - 檔案的
atime和mtime會設為 Cloud Storage 物件的建立時間。
- 檔案的 UID 和 GID 設為 0 (
無論是哪一種情況:
- 檔案的
ctime會設為檔案寫入執行個體的時間。 - 目錄的
atime、ctime和mtime會設為目錄在執行個體上建立的時間。
管理 Cloud Storage 鏡像
您可以使用 Google Cloud CLI 工具或 REST API,列出、說明、更新及刪除 Cloud Storage 鏡像。如要變更現有鏡像的來源或目標路徑,請刪除現有鏡像並建立新鏡像。
列出鏡像
如要查看在執行個體上設定的鏡像,請按照下列步驟操作:
gcloud
gcloud lustre instances mirrors list \
--instance=INSTANCE_ID \
--location=LOCATION
REST
向 instances.mirrors.list 方法傳送 GET 要求:
GET https://lustre.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/instances/INSTANCE_ID/mirrors
Authorization: Bearer YOUR_ACCESS_TOKEN
描述鏡子
如要查看鏡像的設定和運作狀態,請按照下列步驟操作:
gcloud
gcloud lustre instances mirrors describe MIRROR_NAME \
--instance=INSTANCE_ID \
--location=LOCATION
REST
向 instances.mirrors.get 方法傳送 GET 要求:
GET https://lustre.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/instances/INSTANCE_ID/mirrors/MIRROR_NAME
Authorization: Bearer YOUR_ACCESS_TOKEN
鏡像狀態
list 和 describe 指令傳回的 state 欄位會回報鏡像在其生命週期中的位置:
| 狀態 | 說明 |
|---|---|
CREATING |
正在建立鏡像資源。 |
INITIAL_SYNC |
初始同步作業會從 Cloud Storage 複製現有物件。 |
ACTIVE |
鏡像會同步處理發生的變更。 |
DELETING |
正在刪除鏡像。 |
更新鏡像
您可以更新鏡像的說明、標籤,以及是否保留已刪除的檔案。
Cloud Storage 和 Managed Lustre 路徑無法變更。如要將鏡像指向其他路徑,請刪除鏡像並建立新的鏡像。
更新鏡像不會重新執行初始同步。
gcloud
gcloud lustre instances mirrors update MIRROR_NAME \
--instance=INSTANCE_ID \
--location=LOCATION \
--description="DESCRIPTION_TEXT"
REST
使用 updateMask 查詢參數,向 instances.mirrors.patch 方法傳送 PATCH 要求:
PATCH https://lustre.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/instances/INSTANCE_ID/mirrors/MIRROR_NAME?updateMask=description
Authorization: Bearer YOUR_ACCESS_TOKEN
Content-Type: application/json
{
"description": "DESCRIPTION_TEXT"
}
刪除鏡像
如要刪除鏡像,請按照下列步驟操作:
gcloud
gcloud lustre instances mirrors delete MIRROR_NAME \
--instance=INSTANCE_ID \
--location=LOCATION
REST
向 instances.mirrors.delete 方法傳送 DELETE 要求:
DELETE https://lustre.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/instances/INSTANCE_ID/mirrors/MIRROR_NAME
Authorization: Bearer YOUR_ACCESS_TOKEN
刪除鏡像後,Cloud Storage 和 Managed Lustre 之間就不會再同步處理。移除鏡像時,系統不會刪除已複製到 Managed Lustre 的檔案。
刪除鏡像時,正在進行的檔案傳輸作業會中斷。如果傳輸作業未完成,刪除鏡像後,鏡像目錄中可能會留下名稱格式為 FILENAME.cloud_transfer.UUID.NUMBER.tmp 的暫存檔案。你可以刪除這些檔案。
查看記錄
鏡像記錄會找出無法同步處理的個別檔案。
記錄會依據 lustre.googleapis.com/Instance 資源,轉送至 Cloud Logging,記錄名稱為 mirror。
如要查看鏡像作業的記錄,請按照下列步驟操作:
- 前往記錄檔探索工具。
輸入下列查詢:
resource.type="lustre.googleapis.com/Instance" logName="projects/PROJECT_ID/logs/lustre.googleapis.com%2Fmirror" resource.labels.instance_id="INSTANCE_ID"
疑難排解
來源 bucket 發生 PERMISSION_DENIED 項錯誤
如果建立鏡像時發生 PERMISSION_DENIED 錯誤、檔案未同步,或記錄顯示「PERMISSION_DENIED」錯誤:
確認 Cloud Storage 服務代理已初始化:
gcloud storage service-agent --project=PROJECT_ID確認 Managed Lustre 服務代理具備來源 bucket 的必要權限。詳情請參閱「授予服務代理權限」。
Cloud Storage 中的變更不會複製到 Managed Lustre
如果鏡像狀態為 ACTIVE,但 Cloud Storage 中新增或修改的物件未顯示在 Managed Lustre,請確認來源 bucket 有 bucket 通知設定。
列出值區通知:
gcloud storage buckets notifications list --bucket=BUCKET_NAME如果輸出內容空白,請刪除現有鏡像並建立新鏡像:
gcloud lustre instances mirrors delete MIRROR_NAME \ --instance=INSTANCE_ID \ --location=LOCATION刪除完成後,請建立新的鏡像。
命名衝突錯誤
如果將檔案新增至 Cloud Storage 後,發現 Managed Lustre 中缺少這些檔案,請在 Cloud Logging 中檢查是否有命名衝突錯誤:
- 如果 Cloud Storage 中建立的物件與 Managed Lustre 中的現有目錄同名,移轉作業會失敗並顯示
file exists錯誤,且不會覆寫現有目錄。傳輸失敗後,上層目錄會留下名稱格式為FILENAME.cloud_transfer.UUID.NUMBER.tmp的暫存檔案。 - 如果 Cloud Storage 中建立的物件包含的路徑前置字串,與 Managed Lustre 中現有的正規檔案相符,移轉作業就會失敗,並顯示
not a directory錯誤,且現有檔案不會遭到覆寫。舉例來說,如果models是 Managed Lustre 中的現有檔案,從 Cloud Storage 移轉名為models/weights.bin的物件會失敗,因為無法建立目錄models/。
如要解決這些衝突,請在 Managed Lustre 中重新命名或刪除衝突的目錄或檔案、移除所有剩餘的 .tmp 檔案,然後在 Cloud Storage 中重新上傳物件,以觸發同步處理。
ABORTED: unable to queue the operation
建立鏡像或啟動隨選移轉工作時,如果收到 ABORTED: unable to queue the operation 錯誤:
- 建立鏡像前,請確認執行個體上沒有執行中的
import-data或export-data作業。 - 請等待鏡像建立和初始同步作業完成,再嘗試對執行個體執行其他管理資料作業。
FILESYSTEM_NO_SPACE_ON_DEVICE
如果鏡像作業停止,且記錄顯示空間錯誤,表示 Managed Lustre 檔案系統可能已用盡 inode 或磁碟容量。您可以刪除不必要的檔案來釋出空間,或增加儲存空間容量來擴充檔案系統。