Cloud Storage からミラーリングする

Cloud Storage ミラーは、Cloud Storage バケットから 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 でデータを移動する 2 つのメカニズムをサポートしています。

機能 Cloud Storage ミラー オンデマンド データ転送
方向 Cloud Storage から Managed Lustre Cloud Storage から Managed Lustre

Managed Lustre から Cloud Storage
きっかけ イベント ドリブン。オブジェクトの作成、更新、削除時に自動的に同期 手動
階層名前空間 非対応 転送速度を向上させるためにサポートされ、推奨されています
Rapid Storage バケット 非対応 非対応

オンデマンド転送については、Cloud Storage との間でデータを転送するをご覧ください。

Cloud Storage ミラーの仕組み

Cloud Storage ミラーは、Cloud Storage ソースとターゲットの Managed Lustre ディレクトリ間でイベント ドリブン転送を実行します。Cloud Storage ソースは、バケットまたはバケット内の特定のオブジェクト接頭辞にできます。ミラーリングは、ミラーの作成時の初期同期と、その後の変更の継続的なレプリケーションの 2 つのフェーズで実行されます。

初期同期

Cloud Storage ミラーを作成すると、サービスは初期同期を実行して、既存のすべてのオブジェクトをソース Cloud Storage パスからターゲットの Managed Lustre ディレクトリにコピーします。

継続的なイベント ドリブン レプリケーション

最初の同期の後、ミラーサービスはバケット通知をリッスンし、変更を複製します。

ほとんどのオブジェクトは数分で複製できます。オブジェクトが作成または変更されると、ファイル全体がコピーされます。

  • 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 でミラーリングされたファイルに加えられた変更は、ソースバケットにコピーされません。ソース オブジェクトが後で更新されると、Managed Lustre ファイルはソース オブジェクトの内容で上書きされ、ローカルの変更は破棄されます。

  • Managed Lustre でミラーリングされたファイルを削除しても、Cloud Storage の対応するオブジェクトは削除されません。

転送速度

バケットとインスタンスが同じ Google Cloud リージョンにある Cloud Storage ミラーには、次の転送速度が適用されます。

  • 最初の同期では、32 MB を超えるファイルの場合は最大 100 Gbps、小さなファイルの場合は 1 秒あたり最大 10,000 オブジェクトの速度で既存のデータがコピーされます。

  • 継続的なレプリケーションでは、進行中の変更が自動的に同期されます。転送パフォーマンスはファイルサイズによって異なります。

    • 10 MB 以上の大きなファイルは、最大 3.5 Gbps のピーク スループットで転送されます。
    • 4 KB 以下の小さなファイルは、1 秒あたり最大 4,900 個のオブジェクトを転送します。

Cloud Storage へのデータの書き込みがミラーのコピーよりも速い場合、イベントはバックログにキューに入れられ、Managed Lustre に変更が表示されるまでの時間が長くなります。変更率が低下すると、ミラーは自動的に追いつきます。

転送速度は次の要因によって制限されます。

  • インスタンスの最大スループット。これは、インスタンス容量にパフォーマンス ティアを掛けた値です。

  • Cloud Storage の下り(外向き)帯域幅。リージョンごと、プロジェクトごとに 200 Gbps(25 GBps)に制限されています。下り(外向き)帯域幅を増やすには、割り当ての増加をリクエストします。

  • リージョン間の転送のネットワーク レイテンシ。最適なパフォーマンスを得るには、転送元バケットとインスタンスを同じリージョンに配置します。

料金

Cloud Storage ミラーには、標準の Cloud Storage 料金が発生します。この料金は、ソースバケットを含むプロジェクトに請求されます。

  • 初期同期では、ソースバケットに対してクラス A のリスト オペレーションとクラス B の読み取りオペレーションが実行されます。継続的なレプリケーションでは、クラス B の読み取りオペレーションが実行されます。これにより、Cloud Storage のオペレーション料金が発生します。
  • Managed Lustre インスタンスとは異なるリージョンのソースバケットからデータをミラーリングすると、リージョン間のデータ転送料金が発生します。

始める前に

Cloud Storage ミラーを作成するには、次のものが必要です。

  • ACTIVE 状態の Managed Lustre インスタンス。
  • ミラーソースとして使用する既存の Cloud Storage バケット。階層名前空間が有効になっているバケット、Rapid Storage バケット、リクエスト元による支払いが有効になっているバケットはサポートされていません。

必要な権限、ロール、リソース

Cloud Storage ミラーを作成して管理するには、次の IAM 権限、ロール、リソースが必要です。

ユーザー権限

ミラーを作成して管理するには、ユーザー アカウントまたはサービス アカウントに Managed Lustre 管理者ロール(roles/lustre.admin)が必要です。

カスタムロールを使用する場合、ロールには次の権限が必要です。

  • lustre.mirrors.create: ミラーを作成します。
  • lustre.mirrors.get: ミラーを記述します。
  • ミラーを一覧表示する場合は lustre.mirrors.list。
  • lustre.mirrors.update: ミラーを更新します。
  • lustre.mirrors.delete: ミラーを削除します。

Cloud Storage サービス エージェントの初期化

バケット通知イベントをパブリッシュできるように、Cloud Storage サービス エージェントがプロジェクトに存在する必要があります。

gcloud storage service-agent --project=PROJECT_ID

PROJECT_ID は、実際の Google Cloud プロジェクト ID に置き換えます。

Managed Lustre サービス エージェントの権限

Google が管理する Managed Lustre サービス エージェントには、ソース Cloud Storage バケットへのアクセス権が必要です。サービス エージェント ID を確認または初期化する手順については、Managed Lustre サービス エージェントをご覧ください。

サービス エージェントには、ソースの Cloud Storage バケットに対する次の権限が必要です。

  • storage.buckets.get
  • storage.buckets.update
  • storage.objects.get
  • storage.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

ソースバケットの 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 バケットの名前。
  • PROJECT_NUMBER: Google Cloud プロジェクトの番号。

Cloud Storage ミラーを作成する

Managed Lustre インスタンスごとに 1 つの 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 バケットと、オプションのオブジェクト接頭辞です。オブジェクト接頭辞を指定する場合、パスの末尾はスラッシュ(gs://<var>BUCKET_NAME</var>/<var>PREFIX</var>/)にする必要があります。
  • --lustre-path は、Managed Lustre ファイル システムのターゲット ディレクトリです。/ で始まる絶対パス(/data や /data/subdir など)にする必要があります。デフォルトはルート ディレクトリ / です。指定したディレクトリが存在しない場合は作成されます。

次のオプション パラメータを使用できます。

  • --deleted-files-retained または --no-deleted-files-retained: Cloud Storage で削除されたファイルが Managed Lustre に保持されるかどうかを制御します。デフォルトは --no-deleted-files-retained です。
  • --description=DESCRIPTION_TEXT: ミラーの説明(省略可)。

REST

POST リクエストを instances.mirrors.create メソッドに送信します。

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 には、ソース Cloud Storage バケットとオプションのオブジェクト接頭辞を含む uri フィールドが含まれています。オブジェクト接頭辞を指定する場合、パスの末尾はスラッシュ(gs://<var>BUCKET_NAME</var>/<var>PREFIX</var>/)にする必要があります。
  • lustrePath は、Managed Lustre ファイル システムのターゲット ディレクトリです。/ で始まる絶対パス(/data や /data/subdir など)にする必要があります。デフォルトはルート ディレクトリ / です。指定したディレクトリが存在しない場合は作成されます。
  • direction はミラーの方向を指定します。FROM_CLOUD_STORAGE を指定します。

リクエスト本文では、次のオプション フィールドもサポートされています。

  • deletedFilesRetained: 対応するファイルが Cloud Storage から削除された後も Managed Lustre にファイルを保持するには、true に設定します。デフォルトは false です。
  • description: ミラーの説明(省略可)。

ファイル属性

Cloud Storage バケットから Managed Lustre インスタンスにファイルがコピーされると、Managed Lustre インスタンスのファイル属性は次の 2 つの方法のいずれかで設定されます。

  • Cloud Storage オブジェクトにデータのエクスポートで説明されているカスタム メタデータがある場合、次のようになります。
    • ファイルの UID、GID、モード、mtime は、オブジェクトのカスタム メタデータに基づいて設定されます。
    • ファイルの atime が mtime と同じ値に設定されている。
  • Cloud Storage オブジェクトにカスタム メタデータがない場合:
    • ファイルの UID と GID が 0(root)に設定されている。
    • ファイルのモードが rwxr-xr-x(755)に設定されている。
    • ファイルの atime と mtime は、Cloud Storage オブジェクトの作成時間に設定されます。

どちらの場合も、次のようになります。

  • ファイルの ctime は、ファイルがインスタンスに書き込まれた時刻に設定されます。
  • ディレクトリの atime、ctime、mtime は、インスタンスにディレクトリが作成された時刻に設定されます。

Cloud Storage ミラーを管理する

Cloud Storage ミラーの一覧表示、記述、更新、削除は、Google Cloud CLI ツールまたは REST API を使用して行えます。既存のミラーのソースパスまたはターゲットパスを変更するには、既存のミラーを削除して新しいミラーを作成する必要があります。

ミラーを一覧表示する

インスタンスに構成されているミラーを表示するには:

gcloud

gcloud lustre instances mirrors list \
  --instance=INSTANCE_ID \
  --location=LOCATION

REST

GET リクエストを instances.mirrors.list メソッドに送信します。

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

GET リクエストを instances.mirrors.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 クエリ パラメータを指定して、PATCH リクエストを instances.mirrors.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

DELETE リクエストを instances.mirrors.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 という名前形式の一時ファイルが残ることがあります。これらのファイルは削除できます。

ログを表示

ミラーログには、同期に失敗した個々のファイルが記録されます。

ログは、mirror ログ名で lustre.googleapis.com/Instance リソースに対して Cloud Logging に転送されます。

ミラー オペレーションのログを表示するには:

  1. ログ エクスプローラに移動します。
  2. 次のクエリを入力します。

    resource.type="lustre.googleapis.com/Instance"
    logName="projects/PROJECT_ID/logs/lustre.googleapis.com%2Fmirror"
    resource.labels.instance_id="INSTANCE_ID"
    

トラブルシューティング

ソースバケットに対する PERMISSION_DENIED エラー

ミラーの作成が PERMISSION_DENIED エラーで失敗した場合、ファイルが同期されていない場合、または「PERMISSION_DENIED」エラーを示すログがある場合:

  1. Cloud Storage サービス エージェントが初期化されていることを確認します。

    gcloud storage service-agent --project=PROJECT_ID
    
  2. Managed Lustre サービス エージェントに、ソースバケットに対する必要な権限が付与されていることを確認します。詳細については、サービス エージェントに権限を付与するをご覧ください。

Cloud Storage での変更が Managed Lustre に複製されない

ミラーの状態が ACTIVE であるにもかかわらず、Cloud Storage の新しいオブジェクトや変更されたオブジェクトが Managed Lustre に表示されない場合は、ソースバケットにバケット通知構成が存在することを確認します。

  1. バケット通知を一覧表示します。

    gcloud storage buckets notifications list --bucket=BUCKET_NAME
    
  2. 出力が空の場合は、既存のミラーを削除して新しいミラーを作成する必要があります。

    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 の既存のファイルである場合、ディレクトリ models/ を作成できないため、Cloud Storage から models/weights.bin という名前のオブジェクトを転送できません。

これらの競合を解決するには、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 またはディスク容量が不足している可能性があります。不要なファイルを削除して空き容量を増やすか、ストレージ容量を増やしてファイル システムを拡張できます。