Google Cloud Managed Lustre は、 Cloud Storage との間でデータをインポートおよびエクスポートできます。データ転送は増分で行われます。つまり、宛先にまだ存在しないファイル、または転送後に変更されたファイルのみがコピーされます。
階層型名前空間が有効になっている Cloud Storage バケットは、標準 バケットと比較して、Managed Lustre との間で高速な 転送速度を実現します。
パフォーマンス
Managed Lustre と Cloud Storage 間の転送は、次の速度に達する可能性があります。
- 32 MB を超えるファイルの場合、最大 100 GBps。転送速度は、インスタンスの最大スループット(インスタンス容量に パフォーマンス ティアを掛けた値)によって 制限されます。
Cloud Storage の下り(外向き)帯域幅に関する考慮事項
Cloud Storage では、プロジェクトごとにリージョンあたり最大 200 Gbps のデフォルトの下り(外向き)帯域幅が提供されます。同じプロジェクトとリージョンに複数の Managed Lustre インスタンスがある場合は、下り(外向き)帯域幅の上限の引き上げをリクエストできます。詳細については、 Cloud Storage の帯域幅の割り当てをご覧ください。
必要な権限
転送を開始するための権限
転送の開始に使用するユーザー アカウントまたはサービス アカウントには、次の権限が必要です。
- Managed Lustre から Cloud Storage に転送するには、
lustre.instances.exportData。 - Cloud Storage から転送するには、
lustre.instances.importData。
これらの権限はどちらも roles/lustre.admin ロールで付与されます。カスタムロールを作成して、
権限を個別に付与することもできます。
Managed Lustre サービス エージェントの権限
Managed Lustre は、 サービス エージェントを使用して Cloud Storage バケットにアクセスします。転送を行うには、サービス エージェントにターゲット バケットへのアクセス権を付与する必要があります。
プロジェクトのサービス エージェント ID がわからない場合は、 サービス エージェント ID を作成または取得するをご覧ください。
権限を付与する
Managed Lustre サービス エージェントには、次のいずれかの 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 サービス エージェント ID(
service-<var>PROJECT_NUMBER</var>@gcp-sa-lustre.)。
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は、Cloud Storage バケットの URI、 またはバケット内のパスを、gs://<bucket_name>/<optional_path_inside_bucket>/形式を使用して指定します。バケット内のパスを指定する場合は、スラッシュ(/)で終わる必要があります。--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キーが含まれます。このキーの値は、 Cloud Storage バケットの URI またはバケット内のパスを、gs://<bucket_name>/<optional_path_inside_bucket>/形式を使用して指定します。バケット内のパスを指定する場合は、スラッシュ(/)で終わる必要があります。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は、Cloud Storage バケットの URI またはバケット内のパスを 使用して、 形式gs://<bucket_name>/<optional_path_inside_bucket>/を指定します。バケット内のパスを指定する場合は、スラッシュ(/)で終わる必要があります。--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キーが含まれます。このキーの値は、 Cloud Storage バケットの URI またはバケット内のパスを、gs://<bucket_name>/<optional_path_inside_bucket>/形式を使用して指定します。バケット内のパスを指定する場合は、スラッシュ(/)で終わる必要があります。
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
制限事項
次の制限が適用されます。
インスタンスごとにアクティブにできる転送オペレーションは 1 つのみです。最初の転送が完了する前に 2 回目の転送を開始すると、次のエラーが返されます。
ERROR: (gcloud.lustre.instances.export-data) ABORTED: unable to queue the operation
トラブルシューティング
Cloud Storage との間でデータをインポートまたはエクスポートする際に、転送の停止、権限の問題、ファイルのスキップが発生することがあります。一般的なデータ転送の問題を診断して解決するには、次の手順を行います。
転送の停止または下り(外向き)速度の低下
インポートまたはエクスポート オペレーションが停止した場合や、予想よりも大幅に遅い場合は、次の点を確認してください。
- Cloud Storage の下り(外向き)帯域幅の上限: Cloud Storage では、プロジェクトごとにリージョンあたり最大 200 Gbps のデフォルトの下り(外向き)帯域幅の割り当てが適用されます。複数のインスタンスまたは高スループットのワークロードが同時にデータを転送している場合、この割り当てがボトルネックになる可能性があります。割り当ての引き上げをリクエストするには、 Cloud Storage の帯域幅の割り当てをご覧ください。
- インスタンスのスループット上限: 転送速度は、インスタンスの最大スループット容量(インスタンス容量にパフォーマンス ティアを掛けた値)によって制限されます。インスタンスのパフォーマンス ティアを確認して、パフォーマンスの期待値と一致していることを確認します。
転送の開始時の権限エラー
転送の開始が権限拒否エラーまたは認証エラーで失敗した場合は、次の IAM ロールを確認します。
- ユーザー アカウントとサービス アカウントの権限: 転送コマンドを開始する ID には、
lustre.instances.importData(インポートの場合)またはlustre.instances.exportData(エクスポートの場合)が必要です。これらはroles/lustre.adminロールに含まれています。 - サービス エージェントの権限: Google マネージド
Managed Lustre サービス エージェント
(
service-<PROJECT_NUMBER>@gcp-sa-lustre...)には、ターゲット Cloud Storage バケットに対するroles/storage.objectViewer(インポートの場合)またはroles/storage.objectUser(エクスポートの場合)が必要です。詳細な設定手順については、 サービス エージェントに権限を付与する をご覧ください。
ファイルのスキップまたは属性の欠落
Managed Lustre のデータ転送は増分で行われます。つまり、宛先に存在しないファイル、または前回の転送以降に変更されたファイルのみがコピーされます。
- ファイルがスキップされているように見える場合は、以前に正常に転送され、変更されていないかどうかを確認します。
- Cloud Storage にデータをエクスポートする場合、POSIX メタデータ(UID、GID、モード、mtime)はカスタム メタデータ キー(
goog-reserved-posix-uidなど)を使用して保持されます。エクスポート時に、シンボリック リンク、空のディレクトリ、明示的な PFL ストライピング レイアウトは保持されません。詳細については、 データ ファイル属性の転送 をご覧ください。
失敗した転送オペレーションの検査
転送オペレーションが失敗した場合は、オペレーション ID を使用して詳細なエラー メッセージと失敗理由を取得します。
gcloud lustre operations describe OPERATION_ID \
--location=LOCATION
オペレーションの出力の error フィールドを確認して、失敗の原因がオブジェクトの欠落、ネットワーク タイムアウト、認証のいずれであるかを確認します。
オペレーションをキューに登録できない
オペレーションを開始しようとしたときに、次のようなエラーが表示される場合:
ERROR: (gcloud.lustre.instances.import-data) ABORTED: unable to queue the operation
ERROR: (gcloud.lustre.instances.export-data) ABORTED: unable to queue the operation
ERROR: (gcloud.lustre.instances.update) ABORTED: unable to queue the operation
このエラーは、同じインスタンスで同じタイプの別のオペレーションがすでに進行中に、オペレーションを開始しようとした場合に発生します。
- インポート/エクスポート: Managed Lustre では、インスタンスごとにアクティブにできる転送オペレーションは 1 つのみです。転送オペレーションのキューイングはサポートされていません。
- インスタンスの更新: Managed Lustre では、インスタンスごとにアクティブにできる更新は 1 つのみで、追加の更新オペレーションをキューに登録できます。
この問題を解決するには、現在のオペレーションが完了してから新しいオペレーションを開始します。
FILESYSTEM_NO_SPACE_ON_DEVICE エラー
モニタリング ツールで集計された空き容量がまだ使用可能であることが示されているにもかかわらず、転送で FILESYSTEM_NO_SPACE_ON_DEVICE エラーが返される場合は、OST の不均衡、クライアント領域の付与、inode の枯渇が発生している可能性があります。
詳細と軽減策については、No space left on device エラーをご覧ください。