PowerVSのGlobal Replication Service（GRS）を試してみた

:::note warn
CLIのコマンド体系に変更があったため、当ページの内容を[新しい記事に書きました](https://qiita.com/y_tama/items/08bf40d62719203e9264)。

:::


# はじめに
Power Virtual Serverの一部のDC間で、Global Replication Service（GRS）が利用可能になっています。
https://cloud.ibm.com/docs/power-iaas?topic=power-iaas-getting-started-GRS
[Redbook](https://www.redbooks.ibm.com/redbooks/pdfs/sg248512.pdf)のAppendix Aも参考になります。

GRSは、ストレージボリュームを、ストレージの機能で別のデータセンターに非同期レプリケーションする機能です。

現在、GRSの機能はCLI/APIを介して操作できます。
GRSを構成できるデータセンターのペアはサービス側で決められており、今回は、WDC06とDAL12のペアを使います。
WDC06を1次サイト(本番サイト)、DAL12を2次サイト(DRサイト)として設定を進めます。

# 1次サイト側手順
Docs
https://cloud.ibm.com/docs/power-iaas?topic=power-iaas-getting-started-GRS&locale=en#configure-primary-site

`ibmcloud pi service-target`コマンドで、1次サイト（WDC06）に切り替えて作業します。

① 1次サイトのボリュームを作成
`--replication-enabled`オプションを付けてボリュームを作成します。

```:Cloud Shell（1次サイト側）
$ ibmcloud pi volume-create tmgw-vol-grs --type tier1 --size 10 --replication-enabled
Creating volume tmgw-vol-grs-2 under account XXX as user XXXXXXXXXX...
                      
ID                    8bd3fad5-7901-405f-b181-88c5e61f0332
Name                  tmgw-vol-grs
Profile               tier1
Status                creating
Size                  10
Created               2023-11-16T06:56:35.000Z
Updated               0001-01-01T00:00:00.000Z
Shareable             false
Bootable              false
Storage Pool          Tier1-Flash-1
Replication Enabled   true
Auxiliary             -
PVMInstanceIDs        -
WWN                   -
$ 
```

② １次サイト側でAIXサーバーをいつも通りGUIから作成し、①で作成したボリュームをデータ用VGとして使用します。
レプリケーションされた事を確認するためのファイルをテスト用に作っておきます。

```:AIX（1次サイト側）
# lspv
hdisk0          00fa00d6b56a99bb                    rootvg          active      
hdisk1          00c91120d777dfdf                    datavg          active      
# lsvg -l datavg
datavg:
LV NAME             TYPE       LPs     PPs     PVs  LV STATE      MOUNT POINT
datalv              jfs2       246     246     1    open/syncd    /data
loglv00             jfs2log    1       1       1    open/syncd    N/A 
# ls /data
1G.dummy    lost+found  test.txt
# 

```

③　1次サイトのボリュームを指定してボリューム・グループを作成します。
なお、ここで言う「ボリューム・グループ」は、AIXのボリューム・グループとは別の、GRSとしての用語です。

```:Cloud Shell（1次サイト側）
$ ic pi vgc --volume-group-name vg-tmgw-01 --member-volume-ids 8bd3fad5-7901-405f-b181-88c5e61f0332
Creating volume group vg-tmgw-01 under account XXX as user XXXXXXXXXX...
Volume group vg-tmgw-01 created.
Name         ID                                     Status      Status Details
vg-tmgw-01   42e368d1-3c45-43d4-bbea-2308261fb763   available   -
$
```

# 2次サイト側手順
Docs
https://cloud.ibm.com/docs/power-iaas?topic=power-iaas-getting-started-GRS&locale=en#configure-secondary-site

`ibmcloud pi service-target`コマンドで、２次サイト（DAL12）に切り替えて作業します。


①補助ボリューム（auxiliary volume）を作成

①-1.
1次サイトのPowerVSワークスペースのCRNを確認します。
```:Cloud Shell（1次サイト側）
$ ic pi sl|grep -i wdc06
Listing services under account XXX as user XXXXXXXXXX...
crn:v1:bluemix:public:power-iaas:wdc06:a/039dbe6794084c7cb514a276dd2345da:e9812314-e026-48d8-8917-313dd26fb954::      Power Systems Virtual Server-WDC06
$ 
```

①-2.
1次サイトのボリュームのプロパティをjson形式で確認し、`auxVolumeName`の項目を確認します。
```:Cloud Shell（1次サイト側）
$ ic pi vol 8bd3fad5-7901-405f-b181-88c5e61f0332 --json
{
    "auxVolumeName": "aux_volume-tmgw-vol-grs-8bd3fad5-790128730651",
    "auxiliary": false,
    "bootable": false,
    "consistencyGroupName": "rccg-42e3-fb763",

（後略）

}
$ 
```

上記2つのパラメータを指定してオンボーディングのためのコマンドを実行します。
（"オンボーディング"は独特の用語かもしれませんが、2次サイトのワークスペースに、1次サイトのボリュームを元に2次サイト用ボリュームを作成する作業という理解で良いと思います。）

```:Cloud Shell（2次サイト側）
$ ibmcloud pi volume-onboarding-create --source-crn crn:v1:bluemix:public:power-iaas:wdc06:a/039dbe6794084c7cb514a276dd2345da:e9812314-e026-48d8-8917-313dd26fb954:: --auxiliary-volume aux_volume-tmgw-vol-grs-8bd3fad5-790128730651
Creating volume onboarding under account XXX as user XXXXXXXXXX...
              
ID            c0699c9d-5bd0-4401-b7bb-25b4c6b6c391
Description   -
$ 
```

オンボーディング処理の一覧
```:Cloud Shell（2次サイト側）
$ ibmcloud pi volume-onboardings
Listing volume onboarding operations under account XXX as user XXXXXXXXXX...
ID                                     Status     Description                 Volumes
c0699c9d-5bd0-4401-b7bb-25b4c6b6c391   SUCCESS    onboard_aux_vols_LCJRDNN8   aux_volume-tmgw-vol-grs-8bd3fad5-790128730651
$
```

オンボーディング処理の詳細
```:Cloud Shell（2次サイト側）
$ ibmcloud pi volume-onboarding c0699c9d-5bd0-4401-b7bb-25b4c6b6c391
Getting volume onboarding c0699c9d-5bd0-4401-b7bb-25b4c6b6c391 details under account XXX as user XXXXXXXXXX...
                    
ID                  c0699c9d-5bd0-4401-b7bb-25b4c6b6c391
Status              SUCCESS
Description         onboard_aux_vols_LCJRDNN8
Volumes:            aux_volume-tmgw-vol-grs-8bd3fad5-790128730651
Creation Time       2023-11-16T09:04:21.000Z
Progress            100
Onboarded Volumes   aux_volume-tmgw-vol-grs-8bd3fad5-790128730651
Failures            -
$ 
```

オンボーディングの結果、2次サイト（DAL12）に補助ボリューム（auxiliary volume）が作成されました。Auxiliaryの項目が`true`になっていることが分かります。

```:Cloud Shell（2次サイト側）
$ ibmcloud pi volumes
Listing volumes under account XXX as user XXXXXXXXXX...
ID                                     Name                                            Address
79a9d716-d9bb-4062-8cb3-243994dd9c8f   aux_volume-tmgw-vol-grs-8bd3fad5-790128730651   /pcloud/v1/cloud-instances/8d08e1b20a9f41349d226d276c079dbe/volumes/79a9d716-d9bb-4062-8cb3-243994dd9c8f
$
$ ibmcloud pi volume 79a9d716-d9bb-4062-8cb3-243994dd9c8f
Getting volume 79a9d716-d9bb-4062-8cb3-243994dd9c8f under account XXX as user XXXXXXXXXX...
                      
ID                    79a9d716-d9bb-4062-8cb3-243994dd9c8f
Name                  aux_volume-tmgw-vol-grs-8bd3fad5-790128730651
Profile               tier1
Status                in-use
Size                  10
Created               2023-11-16T09:06:22.000Z
Updated               2023-11-16T12:16:26.000Z
Shareable             false
Bootable              false
Storage Pool          Tier1-Flash-3
Replication Enabled   true
Auxiliary             true
PVMInstanceIDs        aa450365-cf50-432a-a901-30aa0ebc2b16
WWN                   60050768108182530000000000003A33
$ 
```

② 2次サイト側でAIXサーバーをいつも通りGUIから作成し、①で作成した補助ボリュームをデータ用VGとして使用します。

レプリケーション関係が確立している間は、レプリカ先のファイルシステムはマウントできません。
```:AIX（2次サイト側）
# mount /data
Replaying log for /dev/datalv.
mount: /dev/datalv on /data: Unformatted or incompatible media
The superblock on /dev/datalv is dirty.  Run a full fsck to fix.
# 
```

レプリケーションの進捗状況は下記コマンドのProgressの値で確認できます。
```
$ ibmcloud pi volume-group-remote-copy-relationships 2c3ba209-314c-4256-8bb4-5fd580bc069f
Getting remote copy relationships for volume group 2c3ba209-314c-4256-8bb4-5fd580bc069f under account XXX as user XXXXXXXXXX...
Name      Auxiliary Volume Name                           Consistency Group Name   Master Volume Name                  Remote Copy ID   State                Copy Type   Cycling Mode   Freeze Time                Primary Role   Progress
rcrel97   aux_volume-tmgw-vol-grs-8bd3fad5-790128730651   rccg-42e3-fb763          volume-tmgw-vol-grs-8bd3fad5-7901   136              consistent_copying   global      multi          2023-11-22T03:13:55.000Z   master         89
$ ibmcloud pi volume-group-remote-copy-relationships 2c3ba209-314c-4256-8bb4-5fd580bc069f
Getting remote copy relationships for volume group 2c3ba209-314c-4256-8bb4-5fd580bc069f under account XXX as user XXXXXXXXXX...
Name      Auxiliary Volume Name                           Consistency Group Name   Master Volume Name                  Remote Copy ID   State                Copy Type   Cycling Mode   Freeze Time                Primary Role   Progress
rcrel97   aux_volume-tmgw-vol-grs-8bd3fad5-790128730651   rccg-42e3-fb763          volume-tmgw-vol-grs-8bd3fad5-7901   136              consistent_copying   global      multi          2023-11-22T03:13:55.000Z   master         89
$ ibmcloud pi volume-group-remote-copy-relationships 2c3ba209-314c-4256-8bb4-5fd580bc069f
Getting remote copy relationships for volume group 2c3ba209-314c-4256-8bb4-5fd580bc069f under account XXX as user XXXXXXXXXX...
Name      Auxiliary Volume Name                           Consistency Group Name   Master Volume Name                  Remote Copy ID   State                Copy Type   Cycling Mode   Freeze Time                Primary Role   Progress
rcrel97   aux_volume-tmgw-vol-grs-8bd3fad5-790128730651   rccg-42e3-fb763          volume-tmgw-vol-grs-8bd3fad5-7901   136              consistent_copying   global      multi          2023-11-22T03:22:06.000Z   master         99
$ ibmcloud pi volume-group-remote-copy-relationships 2c3ba209-314c-4256-8bb4-5fd580bc069f
Getting remote copy relationships for volume group 2c3ba209-314c-4256-8bb4-5fd580bc069f under account XXX as user XXXXXXXXXX...
Name      Auxiliary Volume Name                           Consistency Group Name   Master Volume Name                  Remote Copy ID   State                Copy Type   Cycling Mode   Freeze Time                Primary Role   Progress
rcrel97   aux_volume-tmgw-vol-grs-8bd3fad5-790128730651   rccg-42e3-fb763          volume-tmgw-vol-grs-8bd3fad5-7901   136              consistent_copying   global      multi          2023-11-22T03:22:06.000Z   master         99
$ ibmcloud pi volume-group-remote-copy-relationships 2c3ba209-314c-4256-8bb4-5fd580bc069f
Getting remote copy relationships for volume group 2c3ba209-314c-4256-8bb4-5fd580bc069f under account XXX as user XXXXXXXXXX...
Name      Auxiliary Volume Name                           Consistency Group Name   Master Volume Name                  Remote Copy ID   State                Copy Type   Cycling Mode   Freeze Time                Primary Role   Progress
rcrel97   aux_volume-tmgw-vol-grs-8bd3fad5-790128730651   rccg-42e3-fb763          volume-tmgw-vol-grs-8bd3fad5-7901   136              consistent_copying   global      multi          2023-11-22T03:30:38.000Z   master         99
$ ibmcloud pi volume-group-remote-copy-relationships 2c3ba209-314c-4256-8bb4-5fd580bc069f
Getting remote copy relationships for volume group 2c3ba209-314c-4256-8bb4-5fd580bc069f under account XXX as user XXXXXXXXXX...
Name      Auxiliary Volume Name                           Consistency Group Name   Master Volume Name                  Remote Copy ID   State                Copy Type   Cycling Mode   Freeze Time                Primary Role   Progress
rcrel97   aux_volume-tmgw-vol-grs-8bd3fad5-790128730651   rccg-42e3-fb763          volume-tmgw-vol-grs-8bd3fad5-7901   136              consistent_copying   global      multi          2023-11-22T03:39:09.000Z   master         100
$ 
```

# フェイルオーバー

1次サイト（WDC06）が被災したと想定し、2次サイト（DAL12）のボリュームにアクセスできるようにするため、`--allow-read-access`オプションを付けて`volume-group-stop`コマンドを実行します。
1次サイトは被災して操作できないことを想定し、2次サイトの環境で操作します。

```:Cloud Shell（2次サイト側）
$ ibmcloud pi volume-group-stop 2c3ba209-314c-4256-8bb4-5fd580bc069f --allow-read-access
Performing stop action on volume group 2c3ba209-314c-4256-8bb4-5fd580bc069f under account XXX as user XXXXXXXXXX...
OK
Stop request on volume group 2c3ba209-314c-4256-8bb4-5fd580bc069f has been accepted.
$
```

`Replication Status`がdisabledになりました。

```:Cloud Shell（2次サイト側）
$ ibmcloud pi volume-group 2c3ba209-314c-4256-8bb4-5fd580bc069f
Getting volume group 2c3ba209-314c-4256-8bb4-5fd580bc069f under account XXX as user XXXXXXXXXX...
                         
ID                       2c3ba209-314c-4256-8bb4-5fd580bc069f
Name                     rccg-42e3-fb763
Consistency Group Name   rccg-42e3-fb763
Replication Status       disabled
Status                   available
Status Description       -
$
```

2次サイトでボリュームをマウントでき、1次サイトで作成したファイルを2次サイトでも確認できます。

```:AIX（2次サイト側）
# mount /data
Replaying log for /dev/datalv.
# ls /data
1G.dummy    lost+found  test.txt
# 
```

# フェイルバック
1次サイトが復旧した想定で操作します。1次サイト（WDC06）では/dataはマウントしていない状態とします。
`volume-group-start`コマンドに`--source auxiliary`オプションを付けて、2次サイト -> 1次サイト　の向きでレプリケーションを行い、フェイルオーバー中に2次サイトで行った変更を1次サイトに反映します。

```:Cloud Shell（2次サイト側）
$ ibmcloud pi volume-group-start 2c3ba209-314c-4256-8bb4-5fd580bc069f --source auxiliary
Performing start action on volume group 2c3ba209-314c-4256-8bb4-5fd580bc069f under account XXX as user XXXXXXXXXX...
OK
Start request on volume group 2c3ba209-314c-4256-8bb4-5fd580bc069f has been accepted.
$ 
```

逆方向のレプリカが完了したら、再びvolume groupを停止します。このタイミングで、2次サイト（DAL12）の/dataはアンマウントしておきます。

```:Cloud Shell（2次サイト側）
$ ibmcloud pi volume-group-stop 2c3ba209-314c-4256-8bb4-5fd580bc069f --allow-read-access
Performing stop action on volume group 2c3ba209-314c-4256-8bb4-5fd580bc069f under account XXX as user XXXXXXXXXX...
OK
Stop request on volume group 2c3ba209-314c-4256-8bb4-5fd580bc069f has been accepted.
$ 
```

今度は`--source auxiliary`オプションを付けずに`volume-group-start`を実行して本来の、1次サイト -> 2次サイトの向きのレプリケーション関係にし、通常状態に戻します。

```:Cloud Shell（2次サイト側）
$ ibmcloud pi volume-group-start 2c3ba209-314c-4256-8bb4-5fd580bc069f 
Performing start action on volume group 2c3ba209-314c-4256-8bb4-5fd580bc069f under account XXX as user XXXXXXXXXX...
OK
Start request on volume group 2c3ba209-314c-4256-8bb4-5fd580bc069f has been accepted.
$ 
```

以上