Google Cloud Managed Lustre 可以从 Cloud Storage 导入数据,也可以将数据导出到 Cloud Storage。数据转移是增量式的;它们只会复制目标中尚不存在的文件,或者自上次转移后发生更改的文件。
与标准 存储桶相比,启用了 分层命名空间的 Cloud Storage 存储桶可提供更快的 Managed Lustre 数据转移速度。
性能
Managed Lustre 和 Cloud Storage 之间的数据转移速度可达到以下水平:
- 对于超过 32 MB 的文件,最高可达 100 GBps。数据转移速度受实例的最大吞吐量(实例容量乘以 性能层级)限制。
Cloud Storage 出站流量带宽注意事项
Cloud Storage 提供的默认出站流量带宽为每区域每项目最高 200 Gbps。如果您在同一项目和区域中拥有多个 Managed Lustre 实例,则可以申请增加出站流量带宽限制。如需了解详情,请参阅 Cloud Storage 带宽配额。
所需权限
发起转移作业所需的权限
用于发起转移作业的用户或服务帐号需要以下权限:
lustre.instances.exportData,用于从 Managed Lustre 转移到 Cloud Storage。lustre.instances.importData,用于从 Cloud Storage 转移。
这两个权限都通过 roles/lustre.admin 角色授予。您可以创建自定义角色来
单独授予权限。
Managed Lustre 服务代理的权限
Managed Lustre 使用 服务代理代表您访问 Cloud Storage 存储桶。如需执行转移作业,您必须向服务代理授予对目标存储桶的访问权限。
如果您不知道项目的服务代理身份,请参阅 创建或检索服务代理身份。
授予权限
Managed Lustre 服务代理需要以下某个 Cloud Storage 角色:
- 如需将数据转移到 Cloud Storage 以及从 Cloud Storage 转移数据:Cloud Storage 存储桶上的
roles/storage.objectUser。 - 如需仅从 Cloud Storage 转移:Cloud Storage 存储桶上的
roles/storage.objectViewer。
如需授予其中一个角色,请执行以下操作:
导入和导出
运行以下 gcloud 命令:
gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \
--member=serviceAccount:SERVICE_AGENT_IDENTITY \
--role=roles/storage.objectUser
仅导入
运行以下 gcloud 命令:
gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \
--member=serviceAccount:SERVICE_AGENT_IDENTITY \
--role=roles/storage.objectViewer
替换以下内容:
- BUCKET_NAME:Cloud Storage 存储桶的名称。
- SERVICE_AGENT_IDENTITY:Managed Lustre 服务
代理身份 (
service-<var>PROJECT_NUMBER</var>@gcp-sa-lustre.iam.gserviceaccount.com)。
将数据导入到 Managed Lustre
您可以从 Cloud Storage 存储桶导入数据。该存储桶可以位于同一项目或不同项目中。该存储桶可以位于与您的 Managed Lustre 实例不同的可用区或区域
,但跨区域转移作业
的速度可能比同一区域内的转移作业慢。
gcloud
gcloud lustre instances import-data INSTANCE_ID \
--location=LOCATION \
--gcs-path-uri=gs://BUCKET_NAME/ \
--lustre-path=PS_PATH
其中:
- INSTANCE_ID 是您的 Managed Lustre 实例名称。
--location是您的 Managed Lustre 实例所在的可用区。例如,us-central1-a。--gcs-path-uri使用gs://<bucket_name>/<optional_path_inside_bucket>/格式指定 Cloud Storage 存储桶的 URI, 或存储桶内的路径。如果指定了存储桶内的路径,则该路径必须以正斜杠 (/) 结尾。--lustre-path指定 Managed Lustre 文件系统的根目录路径。必须以/开头。默认值为/。如果指定了非默认值,则该目录必须已存在于文件系统中。
下面介绍的是可选参数。
--request-id可让您为此请求分配唯一 ID。如果您使用相同的请求 ID 重试此请求,则服务器会忽略该请求(如果该请求已完成)。必须是有效的 UUID,且不能全部由零组成。--async会立即返回响应,而无需等待操作完成。
如需了解详情,请参阅 Cloud SDK 文档。
REST
POST https://lustre.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/instances/INSTANCE_ID:importData
Authorization: Bearer [YOUR_ACCESS_TOKEN]
{
"gcsPath" : {
"uri" : "gs://BUCKET_NAME/"
},
"lustrePath" : {
"path" : "/PATH"
}
}
其中:
- PROJECT_ID 是您的 Google Cloud 项目名称。
- LOCATION 是您的 Managed Lustre
实例所在的可用区。例如,
us-central1-a。 - INSTANCE_ID 是您的 Managed Lustre 实例名称。
gcsPath包含一个uri键,其值使用 格式gs://<bucket_name>/<optional_path_inside_bucket>/指定 Cloud Storage 存储桶的 URI 或存储桶内的路径。如果指定了存储桶内的路径,则该路径必须以正斜杠 (/) 结尾。lustrePath包含一个path键,其值指定 Managed Lustre 文件系统的根目录路径。必须以/开头。默认值为/。如果指定了非默认值,则该目录必须已存在于文件系统中。
如需使用您自己的服务帐号而不是 Google 代管式服务代理,该请求支持 JSON 对象中的 serviceAccount 字段:
"serviceAccount" : "projects/PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT_ID"
一个 curl 命令示例如下所示:
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
https://lustre.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/instances/INSTANCE_ID:importData \
-d '{"gcsPath": {"uri":"gs://BUCKET_NAME/"}, "lustrePath": {"path":"/"}}'
文件属性
当您将数据从 Cloud Storage 存储桶导入到 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将设置为在实例上创建目录的时间。
导出数据
您可以将数据从 Managed Lustre 实例导出到同一项目或不同项目中的 Cloud Storage 存储桶。该存储桶可以位于与您的 Managed Lustre 实例不同的可用区或区域,但跨区域转移作业的速度可能比同一区域内的转移作业慢。
gcloud
gcloud lustre instances export-data \
INSTANCE_ID \
--location=LOCATION \
--gcs-path-uri="gs://BUCKET_NAME/" \
--lustre-path="/"
其中:
- INSTANCE_ID 是您的 Managed Lustre 实例名称。
--location是您的 Managed Lustre 实例所在的可用区。例如,us-central1-a。--gcs-path-uri使用gs://<bucket_name>/<optional_path_inside_bucket>/格式指定 Cloud Storage 存储桶的 URI 或存储桶内的路径。如果指定了存储桶内的路径,则该路径必须以正斜杠 (/) 结尾。--lustre-path指定 Managed Lustre 文件系统的根目录路径。必须以/开头。默认值为/。
下面介绍的是可选参数。
--request-id可让您为此请求分配唯一 ID。如果您使用相同的请求 ID 重试此请求,则服务器会忽略该请求(如果该请求已完成)。必须是有效的 UUID,且不能全部由零组成。--async会立即返回响应,而无需等待操作完成。
REST
POST https://lustre.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/instances/INSTANCE_ID:exportData
Authorization: Bearer [YOUR_ACCESS_TOKEN]
{
"lustrePath" : {
"path" : "/"
},
"gcsPath" : {
"uri" : "gs://BUCKET_NAME/"
}
}
其中:
- PROJECT_ID 是您的 Google Cloud 项目名称。
- INSTANCE_ID 是您的 Managed Lustre 实例名称。
- LOCATION 是您的 Managed Lustre
实例所在的可用区。例如,
us-central1-a。 lustrePath包含一个path键,其值指定 Managed Lustre 文件系统的根目录路径。必须以/开头。 默认值为/。gcsPath包含一个uri键,其值使用 格式gs://<bucket_name>/<optional_path_inside_bucket>/指定 Cloud Storage 存储桶的 URI 或存储桶内的路径。如果指定了存储桶内的路径,则该路径必须以正斜杠 (/) 结尾。
如需使用您自己的服务帐号而不是 Google 代管式服务代理,该请求支持 JSON 对象中的 serviceAccount 字段:
"serviceAccount" : "projects/PROJECT_ID/serviceAccounts/SERVICE_ACCOUNT_ID"
一个 curl 命令示例如下所示:
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json"
https://lustre.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/instances/INSTANCE_ID:exportData \
-d '{"lustrePath": {"path":"/"}, "gcsPath": {"uri":"gs://BUCKET_NAME/"}}'
文件属性
当您将数据从 Managed Lustre 实例导出到 Cloud Storage 存储桶时,以下文件属性将作为 自定义元数据保留在 Cloud Storage 中:
- 文件的 UID 存储在
goog-reserved-posix-uid键中。 - 文件的 GID 存储在
goog-reserved-posix-gid键中。 - 文件的数字模式存储在
goog-reserved-posix-mode键中。 - 文件的
mtime存储在goog-reserved-file-mtime键中。
这些自定义元数据键名称与 Storage Transfer Service用于 具有 POSIX 文件系统的转移作业的键名称相同。
以下文件属性不会保留:
- 符号链接不会保留。
- 硬链接将导出为单独的 Cloud Storage 对象,从而产生多个副本。
- 使用
lfs setstripe或lfs setdirstripe显式设置的 Lustre 条带化不会保留。 - 文件的
atime和ctime不会保留。 - 目录的
mtime不会保留。 - 空目录不会保留。
获取操作
如需查看导入或导出操作的状态,您需要操作 ID。当您发出导入或导出请求时,该 ID 由服务返回,并使用以下格式:
operation-1234567890123-6127783ad26ea-88913969-02748053
gcloud
gcloud lustre operations describe OPERATION_ID \
--location=LOCATION
REST
GET https://lustre.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/operations/OPERATION_ID
Authorization: Bearer [YOUR_ACCESS_TOKEN]
一个 curl 命令示例如下所示:
curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
https://lustre.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/operations/OPERATION_ID
取消操作
如需取消导入或导出操作,您需要操作 ID。当您发出导入或导出请求时,该 ID 由服务返回,并使用以下格式:
operation-1234567890123-6127783ad26ea-88913969-02748053
gcloud
gcloud lustre operations cancel OPERATION_ID \
--location=LOCATION
REST
POST https://lustre.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/operations/OPERATION_ID:cancel
Authorization: Bearer [YOUR_ACCESS_TOKEN]
一个 curl 命令示例如下所示:
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
https://lustre.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/operations/OPERATION_ID:cancel
限制
存在以下限制:
每个实例一次只能有一个转移作业处于活跃状态。如果在第一个转移作业完成之前启动第二个转移作业,系统会返回以下错误:
ERROR: (gcloud.lustre.instances.export-data) ABORTED: unable to queue the operation