VM 間でディスクを共有する


複数の仮想マシン(VM)インスタンスから同じディスクにアクセスするには、ディスクを各 VM にアタッチします。読み取り専用モードまたはマルチライター モードのディスクを VM にアタッチできます。

読み取り専用モードでは、複数の VM がディスクからデータを読み取ることのみ可能です。どの VM もディスクへの書き込みはできません。VM 間で読み取り専用モードのディスクを共有することで、複数のディスクに同じデータのコピーを配置する場合よりも費用を抑えることができます。

マルチライター モードでは、複数の VM で同じディスクに読み取りと書き込みを行うことができます。これは、高可用性(HA)共有ファイル システムや、SQL Server フェイルオーバー クラスタ インフラストラクチャ(FCI)などのデータベースに役立ちます。

VM 間でゾーンディスクを共有するには、これらの VM が同じゾーンに配置されている必要があります。VM 間でリージョン ディスクを共有する場合は、これらの VM がディスクのレプリカと同じゾーン内に配置されている必要があります。

VM 間でディスクを共有する場合に追加費用は発生しません。VM はディスクを共有するために同じマシンタイプを使用する必要はありませんが、各 VM はディスク共有をサポートするマシンタイプを使用する必要があります。

このドキュメントでは、サポートされているディスクタイプとパフォーマンスに関する考慮事項など、Compute Engine でのマルチライター ディスクと読み取り専用ディスクの共有について説明します。

始める前に

  • まだ設定していない場合は、認証を設定します。認証とは、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

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

      gcloud init
    2. Set a default region and zone.
    3. REST

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

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

        gcloud init

      詳細については、Google Cloud 認証ドキュメントの REST を使用して認証するをご覧ください。

ディスク共有を有効にする

既存の Hyperdisk ボリュームまたは Persistent Disk ボリュームを複数の VM にアタッチできます。ただし Hyperdisk ボリュームの場合、最初にアクセスモードを設定してディスクをマルチライター モードまたは読み取り専用モードにする必要があります。

Hyperdisk ボリュームのアクセスモードは、VM がディスクにアクセスする方法を決定するプロパティです。

使用できるアクセスモードは次のとおりです。

  • シングルライター モード(READ_WRITE_SINGLE): デフォルトのアクセスモードです。ディスクを一度に最大 1 つの VM にアタッチできます。アタッチされた VM は、ディスクに対する読み取り / 書き込みアクセス権を持ちます。
  • 読み取り専用モード(READ_ONLY_MANY): 読み取り専用モードでの複数 VM への同時アタッチを有効にします。このモードでは、VM はディスクに書き込むことはできません。読み取り専用共有の場合に必要です。
  • マルチライター モード(READ_WRITE_MANY): 読み取り / 書き込みモードでの複数 VM への同時アタッチを有効にします。マルチライター共有の場合に必要です。

各アクセスモードのサポートは、次の表に示すように Hyperdisk のタイプに応じて異なります。Hyperdisk Throughput ボリュームまたは Hyperdisk Extreme ボリュームのアクセスモードは設定できません。

Hyperdisk タイプ サポートされるアクセスモード
Hyperdisk Balanced
Hyperdisk Balanced High Availability
プレビュー
  • シングルライター モード
  • マルチライター モード
Hyperdisk ML
  • シングルライター モード
  • 読み取り専用モード
Hyperdisk Throughput
Hyperdisk Extreme
  • シングルライター モード

VM 間で共有できるディスクの場合、アクセスモードはディスクの作成時または作成後に設定できます。アクセスモードを設定する手順については、ディスクのアクセスモードを設定するをご覧ください。

Hyperdisk と Persistent Disk の読み取り専用モード

このセクションでは、複数の VM 間で 1 つの読み取り専用モードのディスクを共有する方法について説明します。

読み取り専用モードでサポートされているディスクタイプ

読み取り専用モードで複数の VM にアタッチできるディスクタイプを以下に示します。

  • Hyperdisk ML
  • ゾーン / リージョン バランス永続ディスク
  • SSD 永続ディスク
  • 標準永続ディスク

読み取り専用モードでのパフォーマンス

読み取り専用モードのディスクを複数の VM にアタッチしても、そのディスクのパフォーマンスには影響しません。各 VM は、VM のマシンシリーズで可能な最大のディスク パフォーマンスを発揮できます。

読み取り専用モードでディスクを共有する場合の制限事項

  • Hyperdisk ML ボリュームを読み取り専用モードで共有した場合、ディスクへの書き込みアクセスを再度有効にすることはできません。
  • Hyperdisk ML ボリュームは、30 秒間隔で最大 100 個の VM にアタッチできます。
  • ディスクにアタッチできる VM の最大数は、ディスクタイプによって異なります。
    • Hyperdisk ML ボリュームの場合、VM の最大数は、次のようにプロビジョニングされたサイズによって異なります。
      • サイズが 256 GiB 未満のボリューム: 2,500 VM
      • 容量が 256 GiB 以上 1 TiB 未満のボリューム: 1,500 VM
      • 容量が 1 TiB 以上 2 TiB 未満のボリューム: 600 VM
      • 容量が 2 TiB 以上のボリューム: 30 VM
    • 読み取り専用モードのゾーン / リージョン バランス永続ディスク ボリュームは、最大 10 個の VM をサポートします。
    • SSD 永続ディスクの場合は、VM の数を 100 以下にすることをおすすめします。
    • 標準永続ディスク ボリュームの場合、推奨される VM の最大数は 10 です。

複数の VM 間で読み取り専用モードのディスクを共有する方法

Hyperdisk ML を使用していない場合は、VM に非ブートディスクをアタッチするの手順に沿って、ディスクを複数の VM にアタッチします。

読み取り専用モードの Hyperdisk ML ボリュームを複数の VM にアタッチするには、まずディスクのアクセスモードを読み取り専用モードに設定する必要があります。アクセスモードを設定したら、Hyperdisk ML ボリュームを VM にアタッチします。

Hyperdisk のマルチライター モード

マルチライター モードのディスクは、次のようなユースケースに適しています。

  • SQL Server フェイルオーバー クラスタ インフラストラクチャ(FCI)の実装
  • 複数の VM がすべて同じディスクに書き込むクラスタ ファイル システム
  • アクティブ / アクティブまたはアクティブ / パッシブモードの高可用性システム。同じディスクを複数の VM にアタッチすると、1 つの VM で障害が発生しても、他の VM は引き続きディスクにアクセスしてワークロードを実行できるため、停止を防ぐことができます。

VM 間での共有ファイル ストレージが主な目的の場合は、次のいずれかのオプションを検討してください。

マルチライター モードでサポートされている Hyperdisk とマシンタイプ

Hyperdisk Balanced ボリュームと Hyperdisk Balanced High Availability(プレビュー)ボリュームは、マルチライター モードで使用できます。マルチライター モードの 1 つのボリュームを最大 8 個の VM にアタッチできます。

Hyperdisk Balanced は、次のマシンタイプでマルチライター モードをサポートしています。

Hyperdisk Balanced High Availability は、次のマシンタイプでマルチライター モードをサポートしています。

Hyperdisk のマルチライター モードは NVMe インターフェースをサポートしています。マルチライター モードのディスクを VM にアタッチする場合は、VM のブートディスクも NVMe でアタッチする必要があります。

マルチライター モードでサポートされているファイル システム

複数の VM からディスクにアクセスするには、次のいずれかのオプションを使用します。

  • 永続予約(PR)。特に、SQL Server FCI や NetApp ONTAP などの HA システムに適しています。PR コマンドを使用して I/O フェンスを提供し、データの完全性を維持することをおすすめします。サポートされている PR コマンドの一覧については、永続予約を使用した I/O フェンスをご覧ください。
  • 複数のインスタンスが同じボリュームに書き込む操作をサポートしているクラスタ化ファイル システム。このようなファイル システムの例としては、OCFS2、VMFS、GFS2 などがあります。
  • Lustre や IBM Spectrum Scale などのスケールアウト ソフトウェア システム。
  • 同時読み取りと書き込みを調整する独自の同期メカニズム。

マルチライター モードの Hyperdisk のパフォーマンス

マルチライター モードのディスクを複数の VM にアタッチする場合、ディスクのプロビジョニングされたパフォーマンスがすべての VM で均等に共有されます。実行されていない VM やディスクをアクティブに使用していない VM などを含め、すべての VM でパフォーマンスが均等に分割されます。ただし、各 VM の最大パフォーマンスは、各 VM のマシンタイプのスループットと IOPS の上限によって制限されます。

たとえば、100,000 IOPS でプロビジョニングされた Hyperdisk Balanced ボリュームを 2 個の VM にアタッチするとします。各 VM は 50,000 IOPS を同時に取得します。

次の表に、ディスクをアタッチする VM の数に応じて、この例の各 VM が得るパフォーマンスを示します。Compute Engine では、ディスクを別の VM にアタッチするたびに、以前にアタッチされた各 VM に割り当てられているパフォーマンスが非同期で調整されます。

アタッチされた VM の数 1 2 3 4 5 6 7 8
VM あたりの
最大 IOPS
100,000 50,000 ~33,333 25,000 20,000 ~16,667 14285 12,500
VM あたりの
最大スループット
(MiBps)
1,200 600 400 300 240 200 ~172 150

マルチライター モードの Hyperdisk ボリュームを共有する際の制限事項

  • マルチライター モードで 1 つの Hyperdisk Balanced ボリュームまたは Hyperdisk Balanced High Availability ボリュームをアタッチできる VM の最大数は 8 個です。
  • マルチライター モードのディスクのクローンを作成することはできません。
  • マルチライター モードのディスクからスナップショット、マシンイメージ、ディスク イメージを作成することはできません。
  • VM の作成時または編集時に、マルチライター モードの Hyperdisk ボリュームを作成することはできません。最初にディスクを別途作成してから、VM にアタッチする必要があります。
  • すべての VM からディスクを切断しない限り、マルチライター モードのディスクのサイズを変更することはできません。
  • マルチライター モードのディスクは、すでに複数の VM にアタッチされている場合でも、次の変更を加えることができます。

    • プロビジョニングされた IOPS またはスループットを変更する
    • ディスクを追加の VM にアタッチする

    これらの変更を行うと、Compute Engine は、ディスクのプロビジョニングされたパフォーマンスを、アタッチされているすべての VM に再分配します。この処理が完了するまでには最大 6 時間ほどかかることがあります。

  • マルチライター モードのディスクからイメージを作成することはできません。

  • マルチライター モードのディスクの自動削除を有効にすることはできません。

  • マルチライター モードのディスクを VM のブートディスクとして使用することはできません。

  • マルチライター モードのディスクは、単一テナンシー VM では使用できません。

  • VM のブートディスクと同じインターフェース タイプを使用する必要があります。

  • マルチライター モードのディスクにアタッチされている VM のマシンタイプは変更できません。

  • ストレージ プールは、マルチライター モードのディスクをサポートしていません。

利用可能なリージョン

マルチライター モードは、Hyperdisk Balanced と Hyperdisk Balanced High Availability が利用可能なすべてのリージョンでサポートされています。

永続予約を使用した I/O フェンス

マルチライター モードのディスクで永続予約(PR)を使用して I/O フェンスを提供することをおすすめします。永続予約は、複数 VM 間でのディスクへのアクセスを管理します。これにより、VM がディスクの同じ部分に同時に書き込んだためにデータが破損することを防止できます。

マルチライター モードの Hyperdisk ボリュームは、NVMe(spec 1.2.1)予約をサポートしています。

サポートされている予約モード

次の予約モードがサポートされています。

  1. Write Exclusive: 予約ホルダーとライターが 1 つずつ存在します。その他のレジストラント/非レジストラントには読み取り専用権限のみが付与されます。
  2. Write Exclusive - Registrants Only: 1 つの予約ホルダーが存在します。レジストラントはディスクに対する読み取り / 書き込みアクセス権を持ちます。非レジストラントには読み取り専用権限のみが付与されます。

次の予約モードはサポートされていません。

  • Write Exclusive - All registrants
  • Exclusive Access
  • Exclusive Access - Registrant Only
  • Exclusive Access - All registrants

NVMe Get Features - Host Identifier がサポートされています。VM 番号はデフォルトのホスト ID として使用されます。

次の NVMe 予約機能はサポートされていません。

  • Set Features - Host Identifier
  • 予約通知:
    • Get Log Page
    • Reservation Notification Mask

サポートされているコマンド

NVMe 予約では、次のコマンドがサポートされています。

  • Reservation Register Action(RREGA)- Replace/Register/Unregister - IEKEY
  • Reservation Acquire Action(RACQA)- Acquire/Preempt - IEKEY
  • Reservation Release Action(RRELA)- Release/Clear - IEKEY
  • Reservation Report
  • Identity Namespace データ構造の Reservation Capabilities(RESCAP)フィールド。

NVMe 予約では、次のコマンドはサポートされていません。

  • Preempt と Abort
  • Persist Through Power Loss (PTPL) の無効化。PTPL は常に有効です。

マルチライター モードのディスクを共有する方法

マルチライター モードのディスクを複数の VM にアタッチする前に、ディスクのアクセスモードをマルチライターに設定する必要があります。ディスクのアクセスモードは、ディスクの作成時に設定できます。既存のディスクのアクセスモードも設定できますが、最初にすべての VM からディスクを切断する必要があります。

マルチライター モードの新しいディスクを作成して使用する手順は次のとおりです。

  1. ディスクを作成し、アクセスモードをマルチライターに設定します。
  2. ディスクを各 VM にアタッチします

既存のマルチライター モードのディスクを使用する手順は次のとおりです。

  1. すべての VM からディスクを切断します。
  2. ディスクのアクセスモードをマルチライターに設定します
  3. ディスクを各 VM にアタッチします

Persistent Disk ボリュームのマルチライター モード

マルチライター モードで SSD 永続ディスク ボリュームを同時に最大 2 個の N2 仮想マシン(VM)インスタンスにアタッチできるため、両方の VM でディスクの読み取りと書き込みが可能になります。

N2 VM が 2 個以上ある場合、または他のマシンシリーズを使用している場合は、次のいずれかの方法を使用できます。

新しい Persistent Disk ボリュームでマルチライター モードを有効にするには、新しい Persistent Disk ボリュームを作成し、gcloud CLI に --multi-writer フラグを指定するか、Compute Engine API に multiWriter プロパティを指定します。

マルチライター モードの Persistent Disk ボリュームは、共有ブロック ストレージ機能を備えており、分散ストレージ システムなどの高可用性サービスを構築するためのインフラストラクチャ基盤としての役割を果たします。マルチライター モードで Persistent Disk ボリュームを使用する場合は、Persistent Disk へのアクセスを複数の VM 間で調整できるスケールアウト ストレージ ソフトウェア システムを使用します。これらのストレージ システムには、Lustre と IBM Spectrum Scale などがあります。EXT4、XFS、NTFS などのほとんどの単一の VM ファイル システムは共有ブロック ストレージ用には設計されていません。詳しくは、このドキュメントのベスト プラクティスをご覧ください。フルマネージドのファイル ストレージが必要な場合は、Compute Engine VM に Filestore ファイル共有をマウントできます。

マルチライター モードの Persistent Disk ボリュームは、SCSI-3 永続予約(SCSI PR)コマンドのサブセットをサポートしています。高可用性アプリケーションは、I/O フェンスとフェイルオーバー構成でこれらのコマンドを使用できます。

次の SCSI PR コマンドがサポートされています。

  • IN {REPORT CAPABILITIES、READ FULL STATUS、READ RESERVATION、READ KEYS}
  • OUT {REGISTER、REGISTER AND IGNORE EXISTING KEY、RESERVE、PREEMPT、CLEAR、RELEASE}

手順については、マルチライター モードで SSD 永続ディスク ボリュームを VM 間で共有するをご覧ください。

マルチライター モードでサポートされている永続ディスクのタイプ

マルチライター モードの SSD 永続ディスクは、最大 2 台の N2 VM に同時にアタッチできます。

マルチライター モードのベスト プラクティス

  • SCSI PR コマンドを使用した I/O フェンスを使用すると、Persistent Disk データはクラッシュ整合状態になります。一部のファイル システムにはクラッシュ整合性がないため、SCSI PR コマンドを使用すると破損する場合があります。
  • EXT4、XFS、NTFS などの多くのファイル システムは、共有ブロック ストレージ用には設計されておらず、複数の VM インスタンスからのオペレーションを同期、実行するメカニズムはありません。
  • マルチライター モードの Persistent Disk ボリュームを使用する前に、ファイル システムについて理解し、ファイル システムを共有ブロック ストレージと併せて使用して、複数の VM から同時にアクセスできるようにする安全な方法についても把握するようにしてください。

マルチライター モードの Persistent Disk のパフォーマンス

マルチライター モードで作成された Persistent Disk ボリュームには、特定の IOPS 上限とスループット上限があります。

ゾーン SSD 永続ディスク マルチライター モード
最大持続 IOPS
読み取り IOPS/GB 30
書き込み IOPS/GB 30
読み取り IOPS/インスタンス 15,000~100,000*
書き込み IOPS/インスタンス 15,000~100,000*
最大持続スループット(MB/秒)
読み取りスループット/GB 0.48
書き込みスループット/GB 0.48
読み取りスループット/インスタンス 240~1,200*
書き込みスループット/インスタンス 240~1,200*
* 永続ディスクの IOPS とスループット パフォーマンスは、ディスクサイズ、インスタンスの vCPU 数、I/O ブロックサイズなどの要因によって決まります。
マルチライター ディスクを複数の仮想マシン インスタンスにアタッチしても、全体的なパフォーマンスや費用に影響はありません。各マシンはディスクごとのパフォーマンス上限を分け合います。

複数の VM 間で永続ディスクを共有する方法については、VM 間で永続ディスクを共有するをご覧ください。

マルチライター モードでディスクを共有する場合の制限事項

  • マルチライター モードは、SSD タイプの永続ディスク ボリュームでのみサポートされています。
  • 永続ディスク ボリュームは任意のゾーンでマルチ書き込みモードで作成できますが、VM にアタッチできるのは次のロケーションに限られます。
    • australia-southeast1
    • europe-west1
    • us-central1us-central1-a ゾーン、us-central1-c ゾーンのみ)
    • us-east1us-east1-d ゾーンのみ)
    • us-west1us-west1-b ゾーン、us-west1-c ゾーンのみ)
  • アタッチされた VM には、N2 マシンタイプが必要です。
  • ディスクの最小サイズは 10 GiB です。
  • マルチライター モードのディスクに、一度に 2 台を超える VM をアタッチすることはできません。マルチライター モードの永続ディスク ボリュームは、永続ディスクの指標をサポートしていません。
  • マルチライター モードのディスクを読み取り専用モードに変更することはできません。
  • マルチライター モードでは、ディスク イメージやスナップショットを使用して永続ディスク ボリュームを作成することはできません。
  • マルチライター モードの永続ディスク ボリュームから、スナップショットまたはイメージを作成することはできません。
  • IOPS の上限が低くなります。詳細については、ディスクのパフォーマンスをご覧ください。
  • マルチライター永続ディスク ボリュームのサイズを変更することはできません。
  • Google Cloud CLI を使用して VM を作成する場合、--create-disk フラグを使用してマルチライター永続ディスク ボリュームを作成することはできません。

SSD 永続ディスク ボリュームを VM 間で共有する(マルチライター モード)

同じゾーン内の N2 VM 間で、マルチライター モードでの SSD 永続ディスク ボリュームの共有が可能です。このモードの詳細については、Persistent Disk のマルチライター モードをご覧ください。マルチライター Persistent Disk ボリュームは、次の手順で作成してアタッチできます。

gcloud

gcloud CLI を使用して、ゾーン Persistent Disk ボリュームを作成してアタッチします。

  1. gcloud beta compute disks create コマンドを使用してゾーン Persistent Disk ボリュームを作成します。--multi-writer フラグを使用して、マルチライター モードで VM 間のディスク共有が可能であることを指定します。

    gcloud beta compute disks create DISK_NAME \
       --size DISK_SIZE \
       --type pd-ssd \
       --multi-writer
    

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

    • DISK_NAME: 新しいディスクの名前
    • DISK_SIZE: 新しいディスクのサイズ(GB 単位)。SSD 永続ディスク ボリュームの場合は 1 GB から 65,536 GB、マルチライター モードの標準永続ディスク ボリュームの場合は 200 GB から 65,536 GB のサイズを指定できます。
  2. ディスクを作成したら、N2 マシンタイプの実行中または停止している VM にアタッチします。gcloud compute instances attach-disk コマンドを実行します。

    gcloud compute instances attach-disk INSTANCE_NAME \
       --disk DISK_NAME
    

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

    • INSTANCE_NAME: 新しいゾーン Persistent Disk ボリュームを追加する N2 VM の名前
    • DISK_NAME: VM にアタッチする新しいディスクの名前
  3. gcloud compute instances attach-disk コマンドを繰り返します。ただし、INSTANCE_NAME は 2 番目の VM の名前に置き換えます。

新しいディスクを作成して VM にアタッチしたら、共有ディスク ファイル システムを使用し、ディスクをフォーマットしてマウントします。ほとんどのファイル システムでは共有ストレージを使用できません。マルチライター Persistent Disk で使用する前に、ファイル システムでこれらの機能がサポートされていることを確認してください。ディスクを単一の VM にマウントする場合に通常使用するのと同じプロセスを使用して、複数の VM にディスクをマウントすることはできません。

REST

Compute Engine API を使用して、マルチライター モードで SSD Persistent Disk ボリュームを作成し、N2 VM にアタッチします。

  1. API で、disks.insert メソッドを使用して POST リクエストを作成し、ゾーン Persistent Disk ボリュームを作成します。namesizeGbtype プロパティを含めます。新しいディスクを空のフォーマットされていない非ブートディスクとして作成する場合、このディスクにソースイメージやソース スナップショットを指定しないでください。マルチライター モードで VM 間のディスク共有が可能であることを示すには、multiWriter プロパティの値を True に設定します。

    POST https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/zones/ZONE/disks
    
    {
    "name": "DISK_NAME",
    "sizeGb": "DISK_SIZE",
    "type": "zones/ZONE/diskTypes/pd-ssd",
    "multiWriter": "True"
    }
    

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

    • PROJECT_ID: プロジェクト ID
    • ZONE: VM と新しいディスクが配置されるゾーン
    • DISK_NAME: 新しいディスクの名前
    • DISK_SIZE: 新しいディスクのサイズ(GB 単位)。SSD 永続ディスク ボリュームの場合は 1 GB から 65,536 GB、マルチライター モードの標準永続ディスク ボリュームの場合は 200 GB から 65,536 GB のサイズを指定できます。
  2. ディスクを VM にアタッチするには、compute.instances.attachDisk メソッドに対して POST リクエストを作成します。先ほど作成したゾーン Persistent Disk ボリュームの URL を指定します。

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

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

    • PROJECT_ID: プロジェクト ID
    • ZONE: VM と新しいディスクが配置されるゾーン
    • INSTANCE_NAME: 新しい Persistent Disk ボリュームを追加する VM の名前。
    • DISK_NAME: 新しいディスクの名前
  3. ディスクを 2 番目の VM にアタッチするには、前の手順の instances.attachDisk コマンドを繰り返します。INSTANCE_NAME を 2 番目の VM の名前に設定します。

新しいディスクを作成して VM にアタッチしたら、共有ディスク ファイル システムを使用し、ディスクをフォーマットしてマウントします。ほとんどのファイル システムでは共有ストレージを使用できません。マルチライター Persistent Disk で使用する前に、ファイル システムでこれらの機能がサポートされていることを確認してください。

次のステップ