Share a zonal persistent disk between multiple instances on GCP

#はじめに

AWSでMulti-Attach for Provisioned IOPS (io1) Amazon EBS Volumesが発表されました。共有DiskにRead/Writeできるので共有Disk使ったクラスタ構成するのに良さそうです。
https://aws.amazon.com/blogs/aws/new-multi-attach-for-provisioned-iops-io1-amazon-ebs-volumes/

GCPは以前から複数GCEインスタンスから共有DiksへのReadだけは出来るのを思い出したので、このタイミングで試してみたいと思います。
https://cloud.google.com/compute/docs/disks/add-persistent-disk#use_multi_instances

##Instance-aを作成します。
共有DiskにするためのAdditional disksを追加します。モードは読み取りテスト用にファイルを書き込みたいため最初はRead/Writeにします。Imageはデフォルトのdebian-9-drawfork-v20200207を使用しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78184/31d5249a-3571-1f23-e5e8-8001e0a15b22.png)

##Instance-aにSSHログインしてテスト用の読み取りファイルを作成します。
https://cloud.google.com/compute/docs/disks/add-persistent-disk
外付けDiskの状態を確認します。sdbが共有Diskとして使用しようと考えいるDiskになります。

```
$ lsblk 
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda      8:0    0   10G  0 disk 
└─sda1   8:1    0   10G  0 part /
sdb      8:16   0  500G  0 disk 
```

フォーマットします。

```
$ sudo mkfs.ext4 -m 0 -E lazy_itable_init=0,lazy_journal_init=0,discard /dev/sdb
mke2fs 1.43.4 (31-Jan-2017)
Discarding device blocks: done                            
Creating filesystem with 131072000 4k blocks and 32768000 inodes
Filesystem UUID: 4013e511-a9b9-467b-b471-a30cff9d0332
Superblock backups stored on blocks: 
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
        4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968, 
        102400000

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (262144 blocks): done
Writing superblocks and filesystem accounting information: done   
```

Mountポイントを作成します。

```
$ sudo mkdir -p /mnt/disks/shared
```

Mountします。

```
$ sudo mount -o discard,defaults /dev/sdb /mnt/disks/shared
```

確認します。

```
$ df
Filesystem     1K-blocks    Used Available Use% Mounted on
udev             1885344       0   1885344   0% /dev
tmpfs             379296    1816    377480   1% /run
/dev/sda1       10253588 2070460   7642560  22% /
tmpfs            1896476       0   1896476   0% /dev/shm
tmpfs               5120       0      5120   0% /run/lock
tmpfs            1896476       0   1896476   0% /sys/fs/cgroup
/dev/sdb       515010816   73756 514920676   1% /mnt/disks/shared
```
書き込み権限付与します。

```
$ sudo chmod a+w /mnt/disks/shared/
```

テスト用のファイルを書き込みます。

```
$ echo 'test message' > /mnt/disks/shared/test.txt
$ cat /mnt/disks/shared/test.txt 
test message
```

追加DiskのモードをRead/WriteからRead onlyに変更します。停止なしで変更できますが念の為再起動します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78184/48bca230-779a-b4fd-be04-306cd031dc25.png)

Read onlyでMountします。

```
sudo mount -o ro,noload /dev/sdb /mnt/disks/shared
```

##Instance-bを作成します。
Instance-aの共有DiskをRead-onlyで追加します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78184/22667b37-cbed-8521-ed0f-2a6fc0ae7d8d.png)

SSHでログインして確認します。

```
$ df
Filesystem     1K-blocks    Used Available Use% Mounted on
udev             1885344       0   1885344   0% /dev
tmpfs             379296    1816    377480   1% /run
/dev/sda1       10253588 2024336   7688684  21% /
tmpfs            1896476       0   1896476   0% /dev/shm
tmpfs               5120       0      5120   0% /run/lock
tmpfs            1896476       0   1896476   0% /sys/fs/cgroup
```

追加DiskがMountされていないのでRead onlyでMountします。

```
sudo mount -o ro,noload /dev/sdb /mnt/disks/shared
```

ファイルを確認します。

Instance-b

```
@instance-b:~$ cat /mnt/disks/shared/test.txt 
test message
```

Instance-a

```
instance-a:~$ cat /mnt/disks/shared/test.txt 
test message
```

##Zoneを跨いだ共有Disk構成
はできない。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/78184/33b87cd2-bdb9-ad2a-36a1-583690c7876b.png)

#投稿内容は私個人の意見であり、所属企業・部門見解を代表するものではありません。