複数の仮想マシン(VM)インスタンスから同じディスクにアクセスするには、読み取り専用共有またはマルチライター共有を有効にします。
読み取り専用共有の場合、複数の VM からディスク上のデータに静的にアクセスできます。ディスクがアタッチされている VM は、ディスクからのデータの読み取りのみが可能です。ディスクへの書き込みはできません。
マルチライター モードの場合、同じディスクへの読み取り / 書き込みアクセス権が複数の VM に付与されます。
ゾーンディスクを共有するには、VM が同じゾーンに存在している必要があります。同様に、リージョン ディスクを共有する場合は、共有相手の VM がディスクのレプリカと同じゾーンに存在している必要があります。
このドキュメントでは、Compute Engine でのディスク共有の概要と、それを有効にする方法について説明します。
始める前に
- VM 間で Hyperdisk ML ボリュームを共有する場合は、Hyperdisk ML ボリュームのアクセスモードを読み取り専用に設定する必要があります。Hyperdisk ML ボリュームのアクセスモードを変更する方法については、Hyperdisk ML ボリュームのアクセスモードを変更するをご覧ください。
-
まだ設定していない場合は、認証を設定します。認証とは、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.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
If you're using a local shell, then create local authentication credentials for your user account:
gcloud auth application-default login
You don't need to do this if you're using Cloud Shell.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
If you're using a local shell, then create local authentication credentials for your user account:
gcloud auth application-default login
You don't need to do this if you're using Cloud Shell.
- Compute インスタンス管理者(v1)(
roles/compute.instanceAdmin.v1
) - サービス アカウントとして実行できる VM に接続するには: サービス アカウント ユーザー(v1)(
roles/iam.serviceAccountUser
) - ディスクを VM にアタッチする:
- VM に対する
compute.instances.attachDisk
-
VM にアタッチするディスクに対する
compute.disks.use
- VM に対する
- Hyperdisk ML
- ゾーン / リージョン バランス永続ディスク
- SSD 永続ディスク
- 標準永続ディスク
- Hyperdisk ML ボリュームを読み取り専用モードで共有した場合、ディスクへの書き込みアクセスを再度有効にすることはできません。
- Hyperdisk ML ボリュームは、30 秒間隔で最大 100 個の VM にアタッチできます。
- ディスクにアタッチできる VM の最大数は、ディスクタイプによって異なります。
- Hyperdisk ML ボリュームの場合、VM の最大数は、次のようにプロビジョニングされたサイズによって異なります。
- サイズが 256 GiB 未満のボリューム: 2,500
- 容量が 256 GiB 以上 1 TiB 未満のボリューム: 1,500
- 容量が 1 TiB 以上 2 TiB 未満のボリューム: 600
- 容量が 2 TiB 以上のボリューム: 30
- 読み取り専用モードのゾーン / リージョン バランス永続ディスク ボリュームは、最大 10 台の VM をサポートします。
- SSD 永続ディスクの場合は、VM の数を 100 以下にすることをおすすめします。
- 標準永続ディスク ボリュームの場合、推奨される VM の最大数は 10 です。
- Hyperdisk ML ボリュームの場合、VM の最大数は、次のようにプロビジョニングされたサイズによって異なります。
- 読み取り専用モード(
READ_ONLY_MANY
): ディスクにアタッチされているすべての VM に読み取り専用アクセス権を付与します。 - 読み取り / 書き込みモード(
READ_WRITE_SINGLE
): ディスクにアタッチできる VM は 1 台だけです。アタッチされた VM に読み取り / 書き込みアクセス権が付与されます。これがデフォルトのアクセスモードです。 Google Cloud コンソールで [VM インスタンス] ページに移動します。
プロジェクトの VM のリストで、ディスクをアタッチする VM の名前をクリックします。[VM インスタンスの詳細] ページが開きます。
インスタンスの詳細ページで、[編集] をクリックします。
[追加ディスク] セクションで、次のいずれかをクリックします。
- [ディスクを追加] をクリックします。
- [既存のディスクをアタッチ] で既存のディスクを選択し、読み取り専用モードで VM に接続します。
[ディスク] リストで、アタッチするディスクを選択します。ディスクがリストにない場合は、VM と同じ場所にあることを確認します。ゾーンディスクの場合は同じゾーン、リージョン ディスクの場合は同じリージョンにあることを確認します。
[ディスク アタッチメント モード] で [読み取り専用] を選択します。
ディスクのその他のオプションを指定します。
ディスクに変更を適用するには、[完了] をクリックします。
VM に変更を適用するには、[保存] をクリックします。
VM に接続して、ディスクをマウントします。
このプロセスを繰り返して、他の VM に読み取り専用モードでディスクをアタッチします。
INSTANCE_NAME
: ゾーン Persistent Disk ボリュームをアタッチする VM の名前DISK_NAME
: アタッチするディスクの名前INSTANCE_NAME
: ゾーン Persistent Disk ボリュームをアタッチする VM の名前PROJECT_ID
: プロジェクト IDZONE
: ディスクが配置されるゾーンDISK_NAME
: アタッチするディスクの名前- VM を Cloud Storage に接続する
- VM を Filestore に接続する
- Compute Engine 上にネットワーク ファイル サーバーを作成する
- IN {REPORT CAPABILITIES、READ FULL STATUS、READ RESERVATION、READ KEYS}
- OUT {REGISTER, REGISTER AND IGNORE EXISTING KEY, RESERVE, PREEMPT, CLEAR, RELEASE}
- SCSI PR コマンドを使用した I/O フェンスを使用すると、Persistent Disk データはクラッシュ整合状態になります。一部のファイル システムにはクラッシュ整合性がないため、SCSI PR コマンドを使用すると破損する場合があります。
- EXT4、XFS、NTFS などの多くのファイル システムは、共有ブロック ストレージ用には設計されておらず、複数の VM インスタンスからのオペレーションを同期、実行するメカニズムはありません。
- マルチライター モードの Persistent Disk ボリュームを使用する前に、ファイル システムについて理解し、ファイル システムを共有ブロック ストレージと併せて使用して、複数の VM から同時にアクセスできるようにする安全な方法についても把握するようにしてください。
- マルチライター モードは、SSD タイプの永続ディスク ボリュームでのみサポートされています。
- 永続ディスク ボリュームは任意のゾーンでマルチ書き込みモードで作成できますが、VM にアタッチできるのは次のロケーションに限られます。
australia-southeast1
europe-west1
us-central1
(us-central1-a
ゾーン、us-central1-c
ゾーンのみ)us-east1
(us-east1-d
ゾーンのみ)us-west1
(us-west1-b
ゾーン、us-west1-c
ゾーンのみ)
- アタッチされた VM には、N2 マシンタイプが必要です。
- ディスクの最小サイズは 10 GiB です。
- マルチライター モードのディスクに、一度に 2 台を超える VM をアタッチすることはできません。マルチライター モードの永続ディスク ボリュームは、永続ディスクの指標をサポートしていません。
- マルチライター モードのディスクを読み取り専用モードに変更することはできません。
- マルチライター モードでは、ディスク イメージやスナップショットを使用して永続ディスク ボリュームを作成することはできません。
- マルチライター モードの永続ディスク ボリュームから、スナップショットまたはイメージを作成することはできません。
- IOPS の上限が低くなります。詳細については、ディスクのパフォーマンスをご覧ください。
- マルチライター永続ディスク ボリュームのサイズを変更することはできません。
- Google Cloud CLI を使用して VM を作成する場合、
--create-disk
フラグを使用してマルチライター永続ディスク ボリュームを作成することはできません。 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 のサイズを指定できます。
ディスクを作成したら、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 にアタッチする新しいディスクの名前
gcloud compute instances attach-disk
コマンドを繰り返します。ただし、INSTANCE_NAME は 2 番目の VM の名前に置き換えます。API で、
disks.insert
メソッドを使用してPOST
リクエストを作成し、ゾーン Persistent Disk ボリュームを作成します。name
、sizeGb
、type
プロパティを含めます。新しいディスクを空のフォーマットされていない非ブートディスクとして作成する場合、このディスクにソースイメージやソース スナップショットを指定しないでください。マルチライター モードで 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
: プロジェクト IDZONE
: VM と新しいディスクが配置されるゾーンDISK_NAME
: 新しいディスクの名前DISK_SIZE
: 新しいディスクのサイズ(GB 単位)。SSD 永続ディスク ボリュームの場合は 1 GB から 65,536 GB、マルチライター モードの標準永続ディスク ボリュームの場合は 200 GB から 65,536 GB のサイズを指定できます。
ディスクを 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
: プロジェクト IDZONE
: VM と新しいディスクが配置されるゾーンINSTANCE_NAME
: 新しい Persistent Disk ボリュームを追加する VM の名前。DISK_NAME
: 新しいディスクの名前
ディスクを 2 番目の VM にアタッチするには、前の手順の
instances.attachDisk
コマンドを繰り返します。INSTANCE_NAME
を 2 番目の VM の名前に設定します。
Java
ローカル開発環境でこのページの Java サンプルを使用するには、gcloud CLI をインストールして初期化し、ユーザー認証情報を使用してアプリケーションのデフォルト認証情報を設定します。
詳細については Set up authentication for a local development environment をご覧ください。
Python
ローカル開発環境でこのページの Python サンプルを使用するには、gcloud CLI をインストールして初期化し、ユーザー認証情報を使用してアプリケーションのデフォルト認証情報を設定します。
詳細については Set up authentication for a local development environment をご覧ください。
REST
このページの REST API サンプルをローカル開発環境で使用するには、gcloud CLI に指定した認証情報を使用します。
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
詳細については、Google Cloud 認証ドキュメントの REST を使用して認証するをご覧ください。
必要なロールと権限
VM 間でディスクを共有するために必要な権限を取得するには、プロジェクトに対する次の IAM ロールを付与するよう管理者に依頼してください。
ロールの付与の詳細については、アクセス権の管理をご覧ください。
これらの事前定義ロールには、VM 間でディスクを共有するために必要な権限が含まれています。必要とされる正確な権限については、「必要な権限」セクションを開いてご確認ください。
必要な権限
VM 間でディスクを共有するには、次の権限が必要です。
カスタムロールや他の事前定義ロールを使用して、これらの権限を取得することもできます。
読み取り専用モードの概要
ディスクの静的データを複数の VM 間で共有するには、ディスクを読み取り専用モードで VM にアタッチします。複数の VM 間で単一のディスクを共有することは、複数のディスクに同じデータのコピーを配置する場合よりも費用を抑えることができます。
読み取り専用モードでサポートされているディスクタイプ
次の Persistent Disk タイプと Google Cloud Hyperdisk タイプは、読み取り専用モードで複数の VM にアタッチできます。
読み取り専用モードでのパフォーマンス
読み取り専用ディスクを複数の VM にアタッチしても、ディスクのパフォーマンスに影響はありません。各 VM は、VM のマシンシリーズで可能な最大のディスク パフォーマンスを発揮できます。
読み取り専用モードでディスクを共有する場合の制限事項
ディスクを読み取り専用モードで共有するための準備
Hyperdisk ML を使用していなければ、追加の手順は必要ありません。ディスクを共有するには、ディスクを複数の VM 間で読み取り専用モードで共有するの手順に沿って操作します。
Hyperdisk ML ボリュームを読み取り専用モードで共有するには、ディスクのアクセスモード プロパティを読み取り専用モードに設定する必要があります。アクセスモードは、ディスクがアタッチされている VM に付与されるアクセスの種類を示します。Persistent Disk ボリュームを使用する場合、アクセスモードを手動で設定する必要はありません。
Hyperdisk ボリュームで使用できるアクセスモードは次のとおりです。
VM 間で Hyperdisk ML ボリュームを共有するには、アクセスモードを
READ_ONLY_MANY
に変更します。読み取り専用モードを有効にしたら、ディスクを複数の VM 間で読み取り専用モードで共有するの手順に沿って操作します。
複数の VM 間でディスクを読み取り専用モードで共有する
このセクションでは、非ブート Hyperdisk ML ボリュームまたは Persistent Disk ボリュームを読み取り専用モードで複数の VM にアタッチする方法について説明します。
コンソール
gcloud
gcloud CLI で
compute instances attach-disk
コマンドを使用し、ro
オプションで--mode
フラグを指定します。gcloud compute instances attach-disk INSTANCE_NAME \ --disk DISK_NAME \ --mode ro
次のように置き換えます。
ディスクをアタッチした後、VM に接続してディスクをマウントします。
読み取り専用モードでディスクを追加する VM ごとに、このコマンドを繰り返します。
Java
Java
このサンプルを試す前に、Compute Engine クイックスタート: クライアント ライブラリの使用に記載されている Java の設定手順に沿って操作します。詳細については、Compute Engine Java API リファレンス ドキュメントをご覧ください。
Compute Engine に対して認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。
Python
Python
このサンプルを試す前に、Compute Engine クイックスタート: クライアント ライブラリの使用に記載されている Python の設定手順に沿って操作します。詳細については、Compute Engine Python API リファレンス ドキュメントをご覧ください。
Compute Engine に対して認証を行うには、アプリケーションのデフォルト認証情報を設定します。詳細については、ローカル開発環境の認証を設定するをご覧ください。
REST
API で、
compute.instances.attachDisk
メソッドに対してPOST
リクエストを作成します。リクエストの本文で、mode
パラメータにREAD_ONLY
を指定します。POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/INSTANCE_NAME/attachDisk { "source": "zones/ZONE/disks/DISK_NAME", "mode": "READ_ONLY" }
次のように置き換えます。
ディスクをアタッチした後、VM に接続してディスクをマウントします。
ディスクを読み取り専用モードで追加する VM ごとに、このリクエストを繰り返します。
マルチライター モードの概要
マルチライター モードでは、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 コマンドがサポートされています。
マルチライター モードでディスクを共有する手順については、マルチライター モードで SSD 永続ディスク ボリュームを VM 間で共有するをご覧ください。
マルチライター モードでサポートされているディスクタイプ
マルチライター モードの SSD 永続ディスクは、最大 2 台の N2 VM に同時にアタッチできます。
マルチライター モードのベスト プラクティス
マルチライター モードでのパフォーマンス
マルチライター モードで作成された 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 間で共有する
同じゾーン内の N2 VM 間で、マルチライター モードでの SSD Persistent Disk ボリュームの共有が可能です。このモードの詳細については、Persistent Disk のマルチライター モードをご覧ください。マルチライター Persistent Disk ボリュームは、次の手順で作成してアタッチできます。
gcloud
gcloud CLI を使用して、ゾーン Persistent Disk ボリュームを作成してアタッチします。
新しいディスクを作成して VM にアタッチしたら、共有ディスク ファイル システムを使用し、ディスクをフォーマットしてマウントします。ほとんどのファイル システムでは共有ストレージを使用できません。マルチライター Persistent Disk で使用する前に、ファイル システムでこれらの機能がサポートされていることを確認してください。ディスクを単一の VM にマウントする場合に通常使用するのと同じプロセスを使用して、複数の VM にディスクをマウントすることはできません。
REST
Compute Engine API を使用して、マルチライター モードで SSD Persistent Disk ボリュームを作成し、N2 VM にアタッチします。
新しいディスクを作成して VM にアタッチしたら、共有ディスク ファイル システムを使用し、ディスクをフォーマットしてマウントします。ほとんどのファイル システムでは共有ストレージを使用できません。マルチライター Persistent Disk で使用する前に、ファイル システムでこれらの機能がサポートされていることを確認してください。
次のステップ
特に記載のない限り、このページのコンテンツはクリエイティブ・コモンズの表示 4.0 ライセンスにより使用許諾されます。コードサンプルは Apache 2.0 ライセンスにより使用許諾されます。詳しくは、Google Developers サイトのポリシーをご覧ください。Java は Oracle および関連会社の登録商標です。
最終更新日 2024-11-19 UTC。
-