Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Share a persistent disk between Google Compute Engine VMs

From Google's documentation:

It is possible to attach a persistent disk to more than one instance. However, if you attach a persistent disk to multiple instances, all instances must attach the persistent disk in read-only mode. It is not possible to attach the persistent disk to multiple instances in read-write mode.

If you attach a persistent disk in read-write mode and then try to attach the disk to subsequent instances, Google Compute Engine returns an error.

So, I need to have a share persistent-disk as frontend for all my compute engine, good, how can you write on this shared disk?

My guess (I hope) is a read/write persistent-disk can be attached only with 1 compute engine but this same disk can be share in read only to others VMs, is thats right?

Lets say I have 2 Compute Engine VMs and 2 persistent disks, is this flow is possible?

  • compute1 read/write disk1 and read only disk2
  • compute2 read/write disk2 and read only disk1
like image 472
flaubert Avatar asked Nov 13 '14 14:11

flaubert


People also ask

Can persistent disk be migrated?

Migrate a zonal persistent disk to a regional persistent disk. To convert your existing zonal persistent disk to a regional persistent disk, create a new regional disk by cloning an existing zonal disk. For more information, see Creating a regional disk clone from a zonal disk.

What is Google persistent disk?

Reliable, high-performance block storage for virtual machine instances. Enterprise scale, limitless flexibility, and competitive price for performance.

What scheme is used by Google Compute Engine to create persistent disk snapshots that offer better performance and lower storage charges?

Compute Engine uses incremental snapshots so that each snapshot contains only the data that has changed since the previous snapshot. For unchanged data, snapshots reference the data in previous snapshots. Storage costs for persistent disk snapshots charge only for the total size of the snapshot.


1 Answers

Update: this is available as of 2020-06-16

As per another answer by Matthew Lenz, the functionality for creating multi-writer persistent disks is available, but it's still in alpha status (even though it's documented as being in the beta track) and requires special per-project enablement.

Note: This GitHub issue notes that the functionality is still in alpha, even though it's labelled as beta. You can submit feedback via Cloud Console to request it for your project if you'd like to get early access to this functionality, but it's not guaranteed to be enabled.


Assuming your project has the permissions to use this feature (or the feature becomes public-access), note that it comes with some caveats:

--multi-writer

Create the disk in multi-writer mode so that it can be attached with read-write access to multiple VMs. Can only be used with zonal SSD persistent disks. Disks in multi-writer mode do not support resize and snapshot operations.

You can use this via:

$ gcloud beta compute disks create DISK_NAME --multi-writer [...] 

Note the caveats:

  • zonal SSD persistent disks only
  • no disk resizing
  • no snapshots

If these trade-offs are not acceptable to you, see the original answer (below) which has a long list of recommended storage alternatives for sharing data between multiple GCE VMs.


Original answer (valid prior to 2020-06-16)

No, this is not possible, as the documentation that you cited at the time of writing said (since updated):

However, if you attach a persistent disk to multiple instances, all instances must attach the persistent disk in read-only mode.

The documentation has been re-arranged since then; the new docs are at a different URL but with the same content:

You can attach a non-root persistent disk to more than one virtual machine instance in read-only mode, which allows you to share static data between multiple instances. Sharing static data between multiple instances from one persistent disk is cheaper than replicating your data to unique disks for individual instances.

If you attach a persistent disk to multiple instances, all of those instances must attach the persistent disk in read-only mode. It is not possible to attach the persistent disk to multiple instances in read-write mode. If you need to share dynamic storage space between multiple instances, connect your instances to Cloud Storage or create a network file server.

If you have a persistent disk with data that you want to share between multiple instances, detach it from any read-write instances and attach it to one or more instances in read-only mode.

which means you cannot have one instance have write access while another has read-only access.

If you want to share data between them, you need to use something other than Persistent Disk. Below are some possible solutions.

You can use any of the following hosted/managed services:

  • Google Cloud Filestore — perhaps closest to what you're looking for, as it provides an NFSv3 file system
    • You can also use Elastifile on GCP as a fully-managed service; note that GCP acquired Elastifile in July 2019
  • Google Cloud Datastore
  • Google Cloud Storage, which you can use via the GCS API (JSON or XML) or you can mount it using gcsfuse as a block device
  • Google Cloud Bigtable
  • Google Cloud SQL

Alternatively, you can run your own:

  • self-managed or third-party managed file servers solutions, including NetApp and Panzura
  • self-managed Elastifile storage deployment (for fully-managed, see previous section for the link)
  • database (whether SQL or NoSQL)
  • distributed filesystem such as Ceph, GlusterFS, OrangeFS, ZFS, etc.
  • file server such as NFS or SAMBA
  • single VM as a data storage node, and use sshfs to create a FUSE mount from other VMs that want to access that data
like image 62
Misha Brukman Avatar answered Oct 14 '22 09:10

Misha Brukman