Linux 仮想マシン(VM)インスタンスにアタッチされているディスクのアプリケーション整合性のあるスナップショットを作成できます。一般的に、ディスクのスナップショットの品質は、大量の書き込みワークロード中に作成されたスナップショットから復旧するアプリケーションの程度によって異なります。アプリケーション整合性のあるスナップショットは、すべてのアプリケーション トランザクションが完了し、保留中の書き込みがすべてディスクにフラッシュされた状態で、バックアップの時点でのアプリケーション データの状態をキャプチャします。
アプリケーション整合性のあるスナップショットを作成するには、ディスクにデータを書き込むアプリまたはオペレーティング システム プロセスを一時停止し、ディスク バッファをフラッシュして、スナップショットを作成する前にファイル システムを同期します。アプリケーションによっては、すべてのアプリケーション トランザクションが完了し、バックアップにキャプチャされるように、これらの手順とその他の手順が必要になる場合があります。
アプリケーション整合性のあるディスクのスナップショットを作成するには、次の手順を行います。
- アプリケーション整合性のためにゲスト環境を準備するには、スナップショットのキャプチャの前後に実行するカスタムのシェル スクリプトを作成します。
- 仮想マシン(VM)インスタンスでスナップショット設定を構成します。
guest-flush
オプションを有効にして、スナップショットを作成します。guest-flush
オプションにより、スナップショット前後のスクリプトが開始されます。
準備
- Linux VM を作成します。
- ゲスト環境を更新します。
-
まだ設定していない場合は、認証を設定します。認証とは、Google Cloud サービスと API にアクセスするために ID を確認するプロセスです。ローカル開発環境からコードまたはサンプルを実行するには、次のように Compute Engine に対する認証を行います。
Select the tab for how you plan to use the samples on this page:
Console
When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.
gcloud
-
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
- Set a default region and zone.
- Compute インスタンス管理者(v1)(
roles/compute.instanceAdmin.v1
) -
サービス アカウントとして実行できる VM に接続する: サービス アカウント ユーザー(v1)(
roles/iam.serviceAccountUser
) -
ゾーンディスクのスナップショットを作成する:
- プロジェクトに対する
compute.snapshots.create
- ディスクに対する
compute.disks.createSnapshot
- プロジェクトに対する
-
ディスク上のデータを使用してリージョン ディスクのスナップショットを作成する:
- プロジェクトに対する
compute.snapshots.create
- ソース VM に対する
compute.instances.useReadOnly
- ディスクに対する
compute.disks.createSnapshot
- プロジェクトに対する
-
レプリカ復元チェックポイントからリージョン ディスクのスナップショットを作成する:
- プロジェクトに対する
compute.snapshots.create
- ディスクに対する
compute.disks.createSnapshot
- プロジェクトに対する
-
スナップショット スケジュールを作成する: プロジェクトまたは組織に対する
compute.resourcePolicies.create
-
スナップショット スケジュールをディスクに適用する:
- ディスクに対する
compute.disks.addResourcePolicies
- リソース ポリシーに対する
compute.resourcePolicies.use
- ディスクに対する
-
スナップショットを削除する:
- スナップショットに対する
compute.snapshots.delete
- プロジェクトに対する
compute.snapshots.list
- スナップショットに対する
- アプリケーション整合性は、スナップショット オペレーション自体ではなく、カスタムの前後のスナップショット スクリプトの動作によって保証されます。
- スナップショット作成リクエストで
guest-flush
オプションを使用した場合、スクリプトがエラーを返した場合や、タイムアウト上限に達した場合、スナップショットは作成されません。 - ディスクにデータを書き込む VM 上で稼働しているアプリやオペレーティング システムのプロセスを一時停止します。
- ディスク バッファをフラッシュします。たとえば、MySQL では
FLUSH
ステートメントを使用します。アプリケーションで使用できるツールを使用してください。 - ファイル システムを同期します。
- SCSI 接続ディスク:
<target/lun>
ペアのカンマ区切りのリスト。 - NVME 接続ディスク:
<nvme:namespace>
ペアのカンマ区切りのリスト。 ゲスト環境構成ファイルを開くか、作成します。
edit /etc/default/instance_configs.cfg
次のセクションを構成ファイルに追加し、変更を保存してエディタを終了します。
[Snapshots] enabled = ENABLED timeout_in_seconds = TIMEOUT_SECONDS
次のように置き換えます。
ENABLED
:true
に設定すると、アプリケーション整合性のあるスナップショット機能が有効になります。デフォルト値はfalse
です。TIMEOUT_SECONDS
: スナップショット前またはスナップショット後のスクリプトがタイムアウトするまでに要する秒数。整数値は 0~300 にする必要があります。デフォルト値は60
です。
新しい構成設定を使用するには、ゲスト エージェントを再起動します。
$ sudo systemctl restart google-guest-agent.service
Google Cloud コンソールで [スナップショットの作成] ページに移動します。
[スナップショットの作成] ページに移動- スナップショットの名前を入力します。
-
スナップショットの種類を選択します。デフォルトは
STANDARD
(標準)スナップショットです。これは、長期のバックアップや障害復旧に適しています。データの保持にかかる費用対効果を高めるには、[アーカイブ スナップショット] を選択します。
- 省略可: スナップショットの説明を入力します。
- [ソースディスク] で、スナップショットを作成する既存のディスクを選択します。
[ロケーション] セクションで、スナップショットの保存場所を選択します。
スナップショット設定で定義されている事前定義またはカスタマイズされたデフォルトのロケーションが自動的に選択されます。必要に応じて、スナップショット設定をオーバーライドして、次の方法でカスタマイズされた保存場所にスナップショットを保存できます。
スナップショットを保存する保存場所の種類を選択します。
- より高いコストで高い可用性を実現するには、[マルチリージョン] を選択します。
- より低いコストでデータの物理的ロケーションをより細かく制御するには、[リージョン スナップショット] を選択します。
- [ロケーションを選択] フィールドで、使用する特定のリージョンまたはマルチリージョンを選択します。ソースディスクに最も近いリージョンまたはマルチリージョンを使用するには、[ディスクの場所に基づく] を選択します。
- [アプリケーション間で整合性のあるスナップショットを有効にする] チェックボックスをオンにします。
- [作成] をクリックしてスナップショットを作成します。
スナップショット設定で構成した事前定義またはカスタマイズされたデフォルトの場所にスナップショットを作成するには、
gcloud compute snapshots create
コマンドを使用します。gcloud compute snapshots create SNAPSHOT_NAME \ --source-disk-zone=SOURCE_ZONE \ --source-disk=SOURCE_DISK_NAME \ --snapshot-type=SNAPSHOT_TYPE \ --guest-flush
-
また、スナップショット設定をオーバーライドしてスナップショットをカスタマイズされた保存場所に作成するには、
--storage-location
フラグを含めて、スナップショットの保存先を指定します。gcloud compute snapshots create SNAPSHOT_NAME \ --source-disk-zone=SOURCE_ZONE \ --source-disk=SOURCE_DISK_NAME \ --snapshot-type=SNAPSHOT_TYPE \ --storage-location=STORAGE_LOCATION \ --guest-flush
次のように置き換えます。
- SNAPSHOT_NAME: スナップショットの名前。
- SOURCE_ZONE: ソースディスクのゾーン。
- SOURCE_DISK_NAME: スナップショットを作成するディスク ボリュームの名前。
- SNAPSHOT_TYPE: スナップショットの種類(標準またはアーカイブ)。スナップショットの種類が指定されていない場合は、
STANDARD
(標準)スナップショットが作成されます。 -
STORAGE_LOCATION: スナップショットを保存する Cloud Storage マルチリージョンまたは Cloud Storage リージョン(オプション)。保存場所は 1 つだけ指定できます。
--storage-location
パラメータは、スナップショット設定で構成した事前定義またはカスタマイズされたデフォルトの保存場所をオーバーライドする場合にのみ使用します。
-
スナップショット設定で構成した事前定義またはカスタマイズされたデフォルトの場所にスナップショットを作成するには、
snapshots.insert
メソッドにPOST
リクエストを発行します。POST https://compute.googleapis.com/compute/beta/projects/DESTINATION_PROJECT_ID/global/snapshots { "name": "SNAPSHOT_NAME", "sourceDisk": "projects/SOURCE_PROJECT_ID/zones/SOURCE_ZONE/disks/SOURCE_DISK_NAME", "snapshotType": "SNAPSHOT_TYPE", "guestFlush": true, }
-
または、スナップショット設定をオーバーライドしてカスタマイズされた保存場所にスナップショットを作成するには、
snapshots.insert
メソッドにPOST
リクエストをstorageLocations
プロパティを含めて送信します。POST https://compute.googleapis.com/compute/beta/projects/DESTINATION_PROJECT_ID/global/snapshots { "name": "SNAPSHOT_NAME", "sourceDisk": "projects/SOURCE_PROJECT_ID/zones/SOURCE_ZONE/disks/SOURCE_DISK_NAME", "snapshotType": "SNAPSHOT_TYPE", "storageLocations": [ "STORAGE_LOCATION" ], "guestFlush": true, }
- DESTINATION_PROJECT_ID: スナップショットを作成するプロジェクトの ID。
- SNAPSHOT_NAME: スナップショットの名前。
- SOURCE_PROJECT_ID: ソースディスク プロジェクトの ID。
- SOURCE_ZONE: ソースディスクのゾーン。
- SOURCE_DISK_NAME: スナップショットを作成するディスクの名前。
- SNAPSHOT_TYPE: スナップショットの種類(標準またはアーカイブ)。スナップショットの種類が指定されていない場合は、
STANDARD
(標準)スナップショットが作成されます。 -
STORAGE_LOCATION: スナップショットを保存する Cloud Storage マルチリージョンまたは Cloud Storage リージョン(オプション)。保存場所は 1 つだけ指定できます。
storageLocations
パラメータは、スナップショット設定で構成した事前定義またはカスタマイズされたデフォルトの保存場所をオーバーライドする場合にのみ使用します。 Google Cloud コンソールの [ログ エクスプローラ] ページに移動します。
次のクエリを [ログクエリ ペイン] に貼り付けます。
resource.type="gce_disk" jsonPayload.event_subtype="compute.disks.createSnapshot" OR protoPayload.methodName="ScheduledSnapshots"
クエリを実行してログを調査します。
ファイル システムのアクティビティ / IOPS をフリーズするスナップショット前後のスクリプトがインスタンスで見つからない場合、スナップショットは作成されません。スナップショット前後のスクリプトを作成するの手順を行ったことを確認します。
スクリプト エラーやタイムアウトが発生した場合、スナップショットは作成されません。一貫性のあるスナップショットの準備を確認します。設定で構成できる最大タイムアウト時間は 300 秒です。サンプル スクリプトを使用してプロセス全体を繰り返します。
guest-flush
を有効にしたディスクのスナップショットをキャプチャするには、ディスクが VM にアタッチされている必要があります。Linux VM を作成してディスクをアタッチする方法については、VM の作成をご覧ください。
REST
このページの REST API サンプルをローカル開発環境で使用するには、gcloud CLI に指定した認証情報を使用します。
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
詳細については、Google Cloud 認証ドキュメントの REST を使用して認証するをご覧ください。
必要なロールと権限
標準スナップショットの管理に必要な権限を取得するには、プロジェクトに対する次の IAM ロールを付与するよう管理者に依頼してください。
ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。
これらの事前定義ロールには、標準スナップショットの管理に必要な権限が含まれています。必要とされる正確な権限については、「必要な権限」セクションを開いてご確認ください。
必要な権限
標準スナップショットを管理するには、次の権限が必要です。
カスタムロールや他の事前定義ロールを使用して、これらの権限を取得することもできます。
制限事項
Linux でアプリケーション整合性のあるスナップショットを作成する場合、次の制限があります。
スナップショット前後のスクリプトを作成する
続行する前に、Linux VM で最新のソフトウェアを実行できるように、ゲスト環境を更新します。
アプリケーションの整合性を保つために、スナップショット前とスナップショット後のシェル スクリプトを作成して、スナップショットを取得する前と後に実行します。次のような操作には、前と後のスクリプトを使用します。
次のコードサンプルは、スナップショット前のスクリプトを示しています。先頭の
#!
文字に注意してください。#!/bin/bash sudo fsfreeze -f [example-disk-location]
次のコードサンプルは、スナップショット後のスクリプトを示しています。先頭の
#!
文字に注意してください。#!/bin/bash sudo fsfreeze -u [example-disk-location]
スクリプトは、
/etc/google/snapshots/
ディレクトリにある VM に保存する必要があります。スクリプト前のフルパスは/etc/google/snapshots/pre.sh
にし、スクリプト後のフルパスは/etc/google/snapshots/post.sh
にする必要があります。スクリプトで特定のディスクを参照する
スナップショット前後のスクリプトに渡される最初の引数は、スナップショットを作成するディスクのリストです。この引数は、さまざまなチェック用のスクリプトで使用できます。たとえば、VM に複数のディスクがアタッチされているものの、スナップショット リクエストで 1 つのディスクのみを指定している場合は、スナップショットが作成されるディスクを確認できます。
引数の形式は次のとおりです。
たとえば、SCSI 接続ブートディスクが
1/0
として表示される一方で、VM にアタッチされた追加のディスクが2/0
として表示される場合があります。ゲスト環境構成ファイルを編集する
VM 上の特定の構成ファイルを更新して、アプリケーション間で整合性のあるスナップショット設定を構成します。
guest-flush
を有効にしたスナップショットを作成するGoogle Cloud コンソール、Google Cloud CLI、または REST を使用して、
guest-flush
オプションを有効にしてスナップショットを作成します。これにより、スナップショットがキャプチャされる前と後に、スナップショット前後のスクリプトの実行が開始されます。コンソール
gcloud
スナップショットは、スナップショット設定で定義された保存場所ポリシー内に作成することも、別のお好きな保存場所を使用して作成することもできます。詳細については、スナップショットの保存場所を選択するをご覧ください。
REST
スナップショットは、スナップショット設定で定義された保存場所ポリシー内に作成することも、別のお好きな保存場所を使用して作成することもできます。詳細については、スナップショットの保存場所を選択するをご覧ください。
次のように置き換えます。
guest-flush
を有効にしたスナップショット スケジュールを作成するスケジュールされたスナップショットを使用すると、ゾーンとリージョンの Persistent Disk と Google Cloud Hyperdisk を定期的に自動でバックアップできます。アプリケーション整合性スナップショットのバックアップをスケジュールする場合は、スナップショット スケジュールを作成する際に
--guest-flush
オプションを使用します。これにより、スケジュールされたスナップショットの前後にスクリプトが実行されるようになります。たとえば、ゲスト環境構成ファイルを構成し、カスタム スクリプトを作成した後、次のコマンドは、アプリケーション整合性のあるスナップショットを 1 時間ごとに作成します。
gcloud compute resource-policies create snapshot-schedule SCHEDULE_NAME \ --description "MY HOURLY SNAPSHOT SCHEDULE" \ --start-time 22:00 \ --hourly-schedule 4 \ --guest-flush \ --max-retention-days SNAPSHOT_RETENTION_AGE
詳細については、ディスクのスナップショット スケジュールについてをご覧ください。
トラブルシューティング
ログを確認して構成をチェックし、スナップショットのスケジュールと作成プロセスのトラブルシューティングを行います。
ログを確認する
構成をチェックする
次のステップ
特に記載のない限り、このページのコンテンツはクリエイティブ・コモンズの表示 4.0 ライセンスにより使用許諾されます。コードサンプルは Apache 2.0 ライセンスにより使用許諾されます。詳しくは、Google Developers サイトのポリシーをご覧ください。Java は Oracle および関連会社の登録商標です。
最終更新日 2024-12-23 UTC。
-