同期レプリケーション ディスクの作成と管理


リージョン Persistent DiskHyperdisk Balanced High Availability は、Compute Engine に高可用性(HA)サービスを実装できるストレージ オプションです。リージョン Persistent Disk と Hyperdisk Balanced の高可用性は、同じリージョン内の 2 つのゾーン間でデータを同期的にレプリケートし、1 つのゾーンの障害に対してディスクデータの HA を確保します。 同期レプリケートされたディスクは、ブートディスクまたはブートディスク以外のディスクです。

このドキュメントでは、レプリケートされたディスクに対して次のタスクを行う方法について説明します。

始める前に

  • ディスク ストレージ オプションの種類の違いを確認します。
  • ディスクの同期レプリケーションの基本を確認します。
  • レプリケートされたディスクのフェイルオーバーについて確認します。
  • まだ設定していない場合は、認証を設定します。認証とは、Google Cloud サービスと API にアクセスするために ID を確認するプロセスです。ローカル開発環境からコードまたはサンプルを実行するには、次のように Compute Engine に対する認証を行います。

    このページのサンプルをどのように使うかに応じて、タブを選択してください。

    コンソール

    Google Cloud コンソールを使用して Google Cloud サービスと API にアクセスする場合、認証を設定する必要はありません。

    gcloud

    1. Install the Google Cloud CLI, then initialize it by running the following command:

      gcloud init
    2. デフォルトのリージョンとゾーンを設定します

    Terraform

    このページの Terraform サンプルをローカル開発環境から使用するには、gcloud CLI をインストールして初期化し、自身のユーザー認証情報を使用してアプリケーションのデフォルト認証情報を設定してください。

    1. Install the Google Cloud CLI.
    2. To initialize the gcloud CLI, run the following command:

      gcloud init
    3. Create local authentication credentials for your user account:

      gcloud auth application-default login

    詳細については、 ローカル開発環境の認証の設定 をご覧ください。

    REST

    このページの REST API サンプルをローカル開発環境で使用するには、gcloud CLI に指定した認証情報を使用します。

      Install the Google Cloud CLI, then initialize it by running the following command:

      gcloud init

必要なロールと権限

同期レプリケートされたディスクの作成に必要な権限を取得するには、プロジェクトに対する次の IAM ロールを付与するよう管理者に依頼してください。

ロールの付与の詳細については、アクセス権の管理をご覧ください。

これらの事前定義ロールには、同期レプリケーションされたディスクの作成に必要な権限が含まれています。必要とされる正確な権限については、「必要な権限」セクションを開いてご確認ください。

必要な権限

同期レプリケーション ディスクを作成するには、次の権限が必要です。

  • compute.disks.create
  • compute.instances.attachDisk
  • compute.disks.use
  • ディスクのスナップショットを作成する: compute.disks.createSnapshot
  • ディスクの詳細を表示する: compute.disks.get
  • ディスクのリストを取得する: compute.disks.list
  • ディスクのサイズを変更する: compute.disks.update

カスタムロールや他の事前定義ロールを使用して、これらの権限を取得することもできます。

制限事項

  • リージョン Persistent Disk をアタッチできるのは、E2N1N2N2D のマシンタイプを使用する VM のみです。
  • Hyperdisk Balanced High Availability は、サポートされているマシンタイプにのみ接続できます。
  • リージョン Persistent Disk はイメージからは作成できません。
  • 読み取り専用モードを使用すると、最大 10 個の VM インスタンスにリージョン バランス永続ディスクをアタッチできます。
  • リージョン標準永続ディスクの最小サイズは 200 GiB です。
  • リージョン Persistent Disk またはHyperdisk Balanced High Availability ボリュームのサイズを増やすことはできますが、縮小はできません。
  • リージョン Persistent Disk と Hyperdisk Balanced High Availability ボリュームのパフォーマンス特性は、対応するゾーンディスクと異なります。詳細については、ブロック ストレージのパフォーマンスをご覧ください。
  • ゾーンディスクのクローンを作成してリージョン Persistent Disk を作成する場合、2 つのゾーンレプリカは作成時には完全には同期しません。作成後、リージョン ディスクのクローンは平均で 3 分以内に使用できるようになります。ただし、ディスクが完全にレプリケートされた状態になり、目標復旧時点(RPO)がゼロに近くなるまで、数十分かかる場合があります。詳細については、レプリケートされたディスクが完全にレプリケートされたかどうかを確認する方法をご覧ください。

レプリケートされたディスクを VM のブートディスクとして使用する方法

本番環境のワークロードをプロビジョニングする前に、事前にプロビジョニングされたステートフル ワークロードのブートディスクとして、リージョン Persistent Disk または Hyperdisk Balanced High Availability(プレビュー)ディスクをアタッチできます。レプリケートされたブートディスクは 2 つの VM に同時にアタッチできないため、レプリケートされたブートディスクはホット スタンバイ用ではありません。

スナップショットから作成できるのは、 リージョン Persistent Disk または Hyperdisk Balanced High Availability ボリュームのみで、イメージからレプリケートされたディスクを作成することはできません。

レプリケートされたディスクを VM ブートディスクとして使用するには、次のいずれかの方法を使用します。

  1. レプリケートされたブートディスクを使用して新しい VM を作成する
  2. レプリケートされたブートディスクを作成し、VM にアタッチします。
    1. ブートディスクのスナップショットからレプリケートされたディスクを作成します
    2. レプリケートされたブートディスクを VM にアタッチします

レプリケートされたブートディスクをレプリカゾーンで実行中のスタンバイ VM にフェイルオーバーする必要がある場合は、レプリケートされたブートディスクを VM にアタッチするの手順を使用します。

同期レプリケーション ディスクを作成する

リージョン Persistent Disk または Hyperdisk Balanced High Availability(プレビュー)ボリュームを作成します。ディスクは、アタッチする VM と同じリージョンに存在する必要があります。

リージョン Persistent Disk の場合、Google Cloud コンソールでディスクを作成すると、デフォルトのディスクタイプpd-balanced です。gcloud CLI または REST を使用してディスクを作成する場合、デフォルトのディスクタイプは pd-standard です。

コンソール

  1. Google Cloud コンソールで、[ディスク] ページに移動します。

    [ディスク] に移動

  2. 必要なプロジェクトを選択します。

  3. [ディスクを作成] をクリックします。

  4. [名前] でディスクの名前を指定します。

  5. [ロケーション] で [リージョン] を選択します。

  6. リージョンゾーンを選択します。VM の作成時に同じリージョンを選択する必要があります。

  7. 同じリージョン内の [レプリカゾーン] を選択します。いずれかのゾーンの VM にディスクをアタッチする必要があるため、選択したゾーンをメモしておきます。

  8. [ディスクソースのタイプ] を選択します。

  9. ディスクタイプサイズを選択します。

  10. [作成] をクリックしてディスクの作成を終了します。

gcloud

compute disks create コマンドを使用して、同期レプリケーション ディスクを作成します。

スループットや IOPS を上げるためにリージョン SSD 永続ディスクが必要な場合は、--type フラグで pd-ssd を指定します。

gcloud compute disks create DISK_NAME \
   --size=DISK_SIZE \
   --type=DISK_TYPE \
   --region=REGION \
   --replica-zones=ZONE1,ZONE2

次のように置き換えます。

  • DISK_NAME: 新しいディスクの名前
  • DISK_SIZE: 新しいディスクのサイズ(GiB)
  • DISK_TYPE:リージョン Persistent Disk の場合、これはレプリケート ディスクのタイプです。デフォルト値は pd-standard です。 Hyperdisk の場合は、値 hyperdisk-balanced-high-availability を指定します。
  • REGION: レプリケートされたディスクを配置するリージョン(例: europe-west1
  • ZONE1ZONE2: 2 つのディスク レプリカが配置されるリージョン内のゾーン(例: europe-west1-b,europe-west1-c

Terraform

リージョン Persistent Disk または Hyperdisk Balanced High Availability を作成するには、google_compute_region_disk リソースを使用します。

resource "google_compute_region_disk" "regiondisk" {
  name                      = "region-disk-name"
  snapshot                  = google_compute_snapshot.snapdisk.id
  type                      = "pd-ssd"
  region                    = "us-central1"
  physical_block_size_bytes = 4096
  size                      = 11

  replica_zones = ["us-central1-a", "us-central1-f"]
}

REST

リージョン Persistent Disk または Hyperdisk Balanced High Availability ボリュームを作成するには、compute.regionDisks.insert メソッドPOST リクエストを作成します。

空のディスクを作成するには、スナップショット ソースを指定しないでください。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/disks
{
  "name": "DISK_NAME",
  "region": "projects/PROJECT_ID/regions/REGION",
  "replicaZones": [
    "projects/PROJECT_ID/zones/ZONE1",
    "projects/PROJECT_ID/zones/ZONE2"
  ],
  "sizeGb": "DISK_SIZE",
  "type": "projects/PROJECT_ID/regions/REGION/diskTypes/DISK_TYPE"
}

次のように置き換えます。

  • PROJECT_ID: プロジェクト ID
  • REGION: レプリケートされたディスクを配置するリージョン(例: europe-west1
  • DISK_NAME: 新しいディスクの名前
  • ZONE1ZONE2: 新しいディスクのレプリカが配置されるゾーン。
  • DISK_SIZE: 新しいディスクのサイズ(GiB)
  • DISK_TYPE:リージョン Persistent Disk の場合、これは Persistent Disk のタイプです。 Hyperdisk の場合は、値 hyperdisk-balanced-high-availability を指定します。

レプリケートされたディスクを VM にアタッチする

ブートディスク以外のディスクの場合は、リージョン Persistent Disk または Hyperdisk Balanced High Availability(プレビュー)ボリュームを作成した後、VM にアタッチできます。VM は、ディスクと同じリージョンに存在する必要があります。

レプリケートされたブートディスクを VM にアタッチするには、レプリケートされたブートディスクを VM にアタッチするをご覧ください。

コンソール

  1. ディスクを VM にアタッチするには、[VM インスタンス] ページに移動します。

    [VM インスタンス] に移動

  2. [名前] 列で、VM の名前をクリックします。

  3. [編集] をクリックします。

  4. [+ 既存のディスクを接続] をクリックします。

  5. 以前に作成し、レプリケートされたディスクを選択して VM に追加します。

  6. 選択したディスクがすでに別のインスタンスに接続されているという警告が表示された場合は、[ディスクを強制接続する] ボックスを選択して、編集している VM にディスクを強制的にアタッチします。

    レプリケートされたディスクのフェイルオーバーで、レプリケートされたディスクを強制的にアタッチするユースケースを確認します。

  7. [保存] をクリックします。

  8. [VM の編集] ページで、[保存] をクリックします。

gcloud

レプリケートされたディスクを実行中または停止中の VM にアタッチするには、--disk-scope フラグを regional に設定して compute instances attach-disk コマンドを使用します。

gcloud compute instances attach-disk VM_NAME \
    --disk=DISK_NAME \
    --disk-scope=regional

次のように置き換えます。

  • VM_NAME: レプリケートされたディスクを追加する VM の名前
  • DISK_NAME: VM にアタッチする新しいディスクの名前

Terraform

リージョン Persistent Disk または Hyperdisk Balanced High Availability ボリュームを VM にアタッチするには、google_compute_attached_disk リソースを使用します。

resource "google_compute_instance" "test_node" {
  name         = "test-node"
  machine_type = "f1-micro"
  zone         = "us-west1-a"

  boot_disk {
    initialize_params {
      image = "debian-cloud/debian-11"
    }
  }
  attached_disk {
    source      = google_compute_disk.default.id
    device_name = google_compute_disk.default.name
  }

  network_interface {
    network = "default"
    access_config {
      # Ephemeral IP
    }
  }

  # Ignore changes for persistent disk attachments
  lifecycle {
    ignore_changes = [attached_disk]
  }


}

REST

レプリケートされたディスクを実行中または停止中の VM にアタッチするには、compute.instances.attachDisk メソッドPOST リクエストを作成し、作成したレプリケート ディスクの URL を指定します。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/attachDisk
{
  "source": "/projects/PROJECT_ID/regions/REGION/disks/DISK_NAME"
}

次のように置き換えます。

  • PROJECT_ID: プロジェクト ID
  • ZONE: VM のロケーション
  • VM_NAME: 新しいレプリケートされたディスクを追加する VM の名前
  • REGION: レプリケートされたディスクが配置されているリージョン
  • DISK_NAME: レプリケートされたディスクの名前

ブートディスク以外のディスクの場合は、空のレプリケートされたディスクを作成して VM にアタッチした後、ディスクをフォーマットしてマウントする必要があります。これにより、オペレーティング システムが使用可能なストレージ空間を使用できるようになります。

ゾーンディスクをレプリケートされたディスクに変更する

既存のゾーン Persistent Disk をリージョン Persistent Disk に変換するには、既存のゾーンディスクのクローンを作成して新しいディスクを作成します。詳細については、ゾーンディスクからリージョン ディスクのクローンを作成するをご覧ください。

Hyperdisk を同期レプリケートされたディスクに変換するには、ディスクタイプを変更するの説明に従って、既存のディスクのスナップショットから新しい Hyperdisk Balanced High Availability ディスクを作成します。

レプリケートされたディスクを使用して新しい VM を作成する

VM を作成する際は、必要に応じて、リージョン Persistent Disk ボリュームまたはHyperdisk Balanced High Availability(プレビュー)ボリュームを追加のディスクとして含めることができます。

リージョン Persistent Disk またはHyperdisk Balanced High Availability ボリュームを作成して VM の作成時に VM にアタッチするには、次のいずれかをご覧ください。

レプリケートされたブートディスクを使用して新しい VM を作成する

高可用性 VM インスタンスを設定する場合は、レプリケートされたブートディスクを使用してプライマリ VM を作成できます。ゾーンが停止した場合、新しい VM を作成する代わりに、セカンダリ ゾーンで VM を再起動できます。

ブートデバイスがレプリケートされたディスクである高可用性の設定では、スタンバイ インスタンスの事前作成と開始は行わないことをおすすめします。代わりに、フェイルオーバーの段階でスタンバイ インスタンスを作成するときに、forceAttach オプションを使用して既存のリージョン ディスクをアタッチします。

レプリケートされたディスクであるブートディスクを使用して VM を作成するには、次のいずれかの方法を使用します。

gcloud

gcloud compute instances create コマンドを使用して VM を作成し、--create-disk フラグを使用してレプリケートされたディスクを指定します。

gcloud compute instances create PRIMARY_INSTANCE_NAME  \
 --zone=ZONE  \
 --create-disk=^:^name=REPLICATED_DISK_NAME:scope=regional:boot=true:type=DISK_TYPE:source-snapshot=SNAPSHOT_NAME:replica-zones=ZONE,REMOTE_ZONE

disk パラメータを指定する際、文字 ^:^ はパラメータ間の区切り文字がコロン(:)であることを示します。これにより、replica-zones パラメータを指定する際にカンマ(,)を使用できます。

次のように置き換えます。

  • PRIMARY_INSTANCE_NAME: VM の名前
  • ZONE: VM を作成するゾーンの名前
  • REPLICATED_DISK_NAME: レプリケートされたディスクの名前
  • DISK_TYPE: 作成するディスクのタイプ。例: hyperdisk-balanced-high-availabilityプレビュー) 、pd-balanced
  • SNAPSHOT_NAME: ブートディスク用に作成したスナップショットの名前
  • REMOTE_ZONE: レプリケートされたディスクの代替ゾーン

REST

instances.insert メソッドPOST リクエストを作成し、boot: 'true' プロパティと replicaZones プロパティを指定します。例:

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances
{
 "name": "VM_NAME",
 "disks": [{
    "boot": true,
    "initializeParams": {
       "sourceSnapshot": "global/snapshots/BOOT_SNAPSHOT_NAME",
       "replicaZones": [
           "projects/PROJECT_ID/zones/ZONE",
           "projects/PROJECT_ID/zones/REMOTE_ZONE"
       ],
       "diskType": "projects/PROJECT_ID/zones/ZONE/diskTypes/DISK_TYPE"
    }
  }],
 "networkInterfaces": [
    {
      "network": "global/networks/default"
    }
  ]
}

次のように置き換えます。

  • PROJECT_ID: プロジェクト ID
  • ZONE: VM を作成するゾーンの名前
  • VM_NAME: VM の名前
  • BOOT_SNAPSHOT_NAME: ブートディスク スナップショットの名前
  • REMOTE_ZONE: レプリケートされたディスクのリモートゾーン
  • DISK_TYPE: 作成するディスクのタイプ。例: hyperdisk-balanced-high-availabilityプレビュー) 、pd-balanced

レプリケートされたブートディスクを VM にアタッチする

手順は次のとおりです。

  • 既存の VM のブートディスクをレプリケートされたブートディスクに置き換えます。
  • レプリケートされたブートディスクを、バックアップ ゾーンで実行されているホット スタンバイ VM にフェイルオーバーします。これを行うには、レプリケートされたディスクをブートディスクとして VM にアタッチします。

以下の手順では、レプリケートされたディスクと VM がすでに存在することを前提としています。

gcloud

  1. VM を停止します。
    gcloud compute instances stop VM_NAME  --zone=ZONE
    
  2. 現在のブートディスクを VM から切断します。
    gcloud compute instances detach-disk VM_NAME \
     --zone=ZONE --disk=CURRENT_BOOT_DEVICE_NAME
    
  3. レプリケートされたブートディスクを VM にアタッチします。
    gcloud compute instances attach-disk VM_NAME  \
     --zone=ZONE  \
     --disk=REPLICATED_DISK_NAME  \
     --disk-scope=regional --force-attach
    
  4. VM を再起動します。

    gcloud compute instances start VM_NAME
    

上記のコマンドの変数を次のように置き換えます。

  • VM_NAME: レプリケートされたブートディスクをアタッチする VM の名前
  • ZONE: VM を配置するゾーン
  • CURRENT_BOOT_DEVICE_NAME: VM で使用されているブートディスクの名前。通常、これは VM の名前と同じです。
  • REPLICATED_DISK_NAME: ブートディスクとして VM にアタッチするレプリケートされたディスクの名前

省略可: 停止または障害によって、プライマリ VM からレプリケートされたブートディスクを正常に切断できない場合は、--force-attach フラグを含めます。

REST

  1. VM を停止します。

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/stop
    
  2. 現在のブートディスクを VM から切断します。

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/detachDisk?deviceName=CURRENT_BOOT_DEVICE_NAME
    
  3. レプリケートされたブートディスクを VM にアタッチします。

    compute.instances.attachDisk メソッドに POST リクエストを作成し、レプリケートされたブートディスクへの URL を指定します。

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/attachDisk
    {
    "source": "compute/v1/projects/PROJECT_ID/regions/REGION/disks/REPLICATED_DISK_NAME",
    "boot": true
    }
  4. VM を再起動します。

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/start
    

上記のコマンドの変数を次のように置き換えます。

  • PROJECT_ID: プロジェクト ID
  • VM_NAME: レプリケートされたディスクをアタッチする VM の名前
  • ZONE: VM を配置するゾーン
  • CURRENT_BOOT_DEVICE_NAME: VM で使用されているブートディスクの名前。通常、これは VM の名前と同じです。
  • REGION: レプリケートされたディスクが配置されているリージョン
  • REPLICATED_DISK_NAME: ブートディスクとして VM にアタッチするレプリケートされたディスクの名前

省略可: 停止または障害のために、最初にアタッチした VM からレプリケートされたブートディスクを正常に切断できない場合は、リクエストの本文に "forceAttach": true を含めます。

レプリケートされたディスクの一覧と説明を取得する

構成済みのレプリケートされたディスクの一覧と、次のようなプロパティに関する情報を表示できます。次に例を示します。

  • ディスク ID
  • ディスク名
  • サイズ
  • ディスクタイプ
  • リージョン
  • ゾーンレプリカ

レプリケートされたディスクの詳細情報を表示するには、次のコマンドを使用します。

レプリケートされたディスクのサイズを変更する

同期レプリケートされたディスクを使用する VM で、追加の保存容量が必要な場合は、ディスクのサイズを変更できます。実行中の VM にアタッチしているかどうかにかかわらず、いつでもディスクをサイズ変更できます。データを固有のボリュームに分離する必要がある場合は、VM 用に複数のセカンダリ ディスクを作成します。Hyperdisk Balanced High Availability では、ディスクの IOPS とスループットの上限を増やすこともできます。

レプリケートされたディスクのサイズ変更コマンドは、レプリケートされていないディスクのサイズ変更コマンドと非常によく似ています。ただし、ディスクのロケーションにはゾーンではなくリージョンを指定する必要があります。

ディスクサイズの拡張のみを行うことができ、縮小することはできません。ディスクサイズを縮小するには、小さいサイズの新しいディスクを作成する必要があります。サイズの大きい元のディスクを削除するまで、両方のディスクに対して課金されます。

レプリケートされたディスクを変更する手順については、以下をご覧ください。

次のステップ