PowerVSのGRS (Global Replication Service)を東京-大阪間で試してみた

# はじめに
Power Virtual ServerのGRS(Global Replication Service)が、日本国内の東京-大阪間でもリリースされたので、試してみました。
GRSは、ストレージボリュームをストレージの機能で別のデータセンターに非同期レプリケーションする機能です。

参考にしたのはこちらの記事で、東京-大阪間でこの通りに実施してみました。
https://qiita.com/y_tama/items/08bf40d62719203e9264


# 1. 環境
ここでは、次の環境を使用します。その他のGRSを利用できる環境は、参考のマニュアルを参照ください。
* TOK04 (プライマリ・サイト)
* OSA21 (セカンダリ・サイト)  
  
(参考)グローバル複製サービスの管理：  
https://cloud.ibm.com/docs/power-iaas?topic=power-iaas-getting-started-GRS


# 2. プライマリ・サイトの設定作業
## 2-1. プライマリ・サイトでインスタンスを作成
今回は事前にGUIで、次のようなインスタンス(GRS_AIX_pri)を作成しました。
![image-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1261059/31d2bfae-afeb-0a51-436d-a5f67212e763.png)


## 2-2. CLIで ibmcloud に login後、プライマリ・サイトに接続
IBM cloud にログイン
```
% ibmcloud login --apikey @/XXXXX/apikey.txt -u XXXXX@XXXXX
API エンドポイント: https://cloud.ibm.com
リージョン: jp-tok
認証中です...
OK

ターゲットのアカウント XXXXX


API エンドポイント:   https://cloud.ibm.com
Region:               jp-tok
ユーザー:             XXXXX@XXXXX
アカウント:           XXXXX
リソース・グループ:   リソース・グループがターゲットになっていません。'ibmcloud target -g RESOURCE_GROUP' を使用してください

```
プライマリ・サイト(TOK04)のCRN情報を確認して、プライマリ・サイトに接続
```
% ibmcloud pi ws ls | grep TOK
ユーザーXXXXX@XXXXXのアカウントXXXXXのワークスペースをリストしています...
crn:v1:bluemix:public:power-iaas:tok04:a/7cd6294fd15e40ab8df9d0bc516b8d85:ea698bbb-ac5a-4bdf-99f6-374f3c928de2::      ea698bbb-ac5a-4bdf-99f6-374f3c928de2   (省略)

% ibmcloud pi ws target crn:v1:bluemix:public:power-iaas:tok04:a/7cd6294fd15e40ab8df9d0bc516b8d85:ea698bbb-ac5a-4bdf-99f6-374f3c928de2::
サービス crn:v1:bluemix:public:power-iaas:tok04:a/7cd6294fd15e40ab8df9d0bc516b8d85:ea698bbb-ac5a-4bdf-99f6-374f3c928de2:: をターゲットにしています...
```

## 2-3. Replica Enabled volumeの作成
接続しているワークスペースが正しいこと(作成したインスタンスが見えていること)を確認
```:Primary Site
% ibmcloud pi ins ls | grep GRS_AIX
ユーザー XXXXX@XXXXX のアカウント XXXXXでインスタンスをリストしています...
(インスタンスid)   GRS_AIX_pri       /pcloud/v1/cloud-instances/072cbe9f6be64b599a3fbbcc25158c71/pvm-instances/(インスタンスid)
```

Replica Enabled Volme(-r)を作成
```:Primary Site
% ibmcloud pi vol cr GRS_AIX_vol1 -r -s 10 -t tier1
ユーザー XXXXX@XXXXX のアカウント XXXXX でボリューム GRS_AIX_vol1 を作成しています...

ID                   6a909e3b-3019-47cf-9439-2bddef293dfc
名前                 GRS_AIX_vol1
プロファイル         tier1
状況                 creating
サイズ               10
作成日時             2024-07-08T05:41:34.000Z
更新済み             1970-01-01T00:00:00.000Z
共有可能             false
ブート可能           false
ストレージ・プール   General-Flash-9
入出力スロットル率   -
複製対応             -
補助                 -
PVMInstanceID        -
WWN                  -
```
上記コマンドのoutputでは、複製対応が "-" になっていますが、作成されたvolumeのidを指定して今一度確認してみると、複製対応が"true"になっていました。
```:Primary Site
% ibmcloud pi vol get 6a909e3b-3019-47cf-9439-2bddef293dfc
ユーザーXXXXX@XXXXXのアカウントXXXXXのボリューム 6a909e3b-3019-47cf-9439-2bddef293dfcを取得しています...

ID                   6a909e3b-3019-47cf-9439-2bddef293dfc
名前                 GRS_AIX_vol1
プロファイル         tier1
状況                 available
サイズ               10
作成日時             2024-07-08T05:41:34.000Z
更新済み             2024-07-08T05:41:38.000Z
共有可能             false
ブート可能           false
ストレージ・プール   General-Flash-9
入出力スロットル率   100 iops
複製対応             true
補助                 false
PVMInstanceID        -
WWN                  600507681381028B7000000000000520
```

## 2-4. 作成したVolumeをインスタンスに認識させる
インスタンスに、volumeをattachします。
```:Primary Site
 % ibmcloud pi instance vol attach GRS_AIX_pri -v 6a909e3b-3019-47cf-9439-2bddef293dfc
ユーザー XXXXX@XXXXX のアカウント XXXXX でボリュームをインスタンス GRS_AIX_pri に追加しています...
OK
ボリュームをインスタンス GRS_AIX_pri に追加する要求が受け入れらました。
```

## 2-5. プライマリ・サイトのインスタンスにログインし、Replica EnabledのVolumeの認識とVG/FSの作成
まずはrootvgしか見えていません。
```:Primary Site
# hostname
grs_aix_pri

# lspv
hdisk0          00fa00d66c59c9d7                    rootvg          active
```

cfgmgrコマンドでReplica EnabledのVolumeを認識させます。
```:Primary Site
# cfgmgr
# lspv
hdisk0          00fa00d66c59c9d7                    rootvg          active
hdisk1          none                                None
```

hdisk1でdatavgを作成、5GBのファイルシステムの作成をします。  
Replication Testのために、ファイルを作成しておきます。
```:Primary Site
# mkvg -y'datavg' '-f' -k'y' hdisk1
0516-1254 mkvg: Changing the PVID in the ODM.
datavg

# crfs -v jfs2 -g datavg -m /data -a size=5G -A yes
File system created successfully.
5222036 kilobytes total disk space.
New File System size is 10485760

# mount /data

# df -g
Filesystem    GB blocks      Free %Used    Iused %Iused Mounted on
/dev/hd4           0.09      0.04   53%     2807    21% /
/dev/hd2           2.34      0.22   91%    44715    47% /usr
/dev/hd9var        0.19      0.15   18%      908     3% /var
/dev/hd3           0.25      0.25    1%       34     1% /tmp
/dev/hd1           0.03      0.03    2%        7     1% /home
/dev/hd11admin      0.12      0.12    1%        5     1% /admin
/proc                 -         -    -        -      - /proc
/dev/hd10opt       0.84      0.07   92%    11479    38% /opt
/dev/livedump      0.25      0.25    1%        4     1% /var/adm/ras/livedump
/dev/repo00        8.09      0.06  100%     2221    14% /usr/sys/inst.images
/ahafs                -         -    -       35     1% /aha
/dev/fslv00        5.00      4.98    1%        4     1% /data

# cd /data

# echo "Hello GRS!" > test1.txt

# cat test1.txt
Hello GRS!
#
```

## 2-6. プライマリ・サイトのVolumeを指定して、GRSのVGを作成
GRSのVGを作成します。紛らわしいですが、ここで作成するのはAIXのVGではなく、PowerVSのGRSサービスを使用するために必要なVGです。オンプレ的にいうと、Replicationのためにストレージ装置側で実施する設定になります。  
Replica EnabledのVolume idを確認し、GRSのVGを作成します。
```:Primary Site
% ibmcloud pi vol ls | grep GRS_AIX_vol1
ユーザー XXXXX@XXXXXのアカウント XXXXX でボリュームをリストしています...
6a909e3b-3019-47cf-9439-2bddef293dfc   GRS_AIX_vol1                             /pcloud/v1/cloud-instances/ea698bbb-ac5a-4bdf-99f6-374f3c928de2/volumes/6a909e3b-3019-47cf-9439-2bddef293dfc

% ibmcloud pi vg cr -v GRS_AIX_vg -m 6a909e3b-3019-47cf-9439-2bddef293dfc
アカウント XXXXX (ユーザー XXXXX@XXXXX) で、ボリューム・グループ GRS_AIX_vg を作成しています ...
名前         ID                                     状況        状況の詳細
GRS_AIX_vg   9d02a036-e0ca-486d-821b-da09853f1d5b   available   -
```

## 2-7. 作成したGRS VGを確認
```:Primary Site
 % ibmcloud pi vg ls| grep GRS_AIX_vg
アカウント XXXXX (ユーザー XXXXX@XXXXX) で、ボリューム・グループをリストしています ...
9d02a036-e0ca-486d-821b-da09853f1d5b   GRS_AIX_vg   rccg-9d02-f1d5b    enabled    available   -

% ibmcloud pi vg get GRS_AIX_vg
アカウントXXXXX (ユーザーXXXXX@XXXXX)で、ボリューム・グループGRS_AIX_vgを取得しています...

ID                 9d02a036-e0ca-486d-821b-da09853f1d5b
名前               GRS_AIX_vg
整合性グループ名   rccg-9d02-f1d5b
複製状況           enabled
状況               available
状況の説明         -
```

## 2-8. 補助ボリュームの情報を取得
次のステップで、セカンダリ・サイト側で実施するオンボード処理時に必要となる、以下の情報を取得します。  
これら2つの情報を使って、セカンダリ・サイト側からオンボード処理を行うことになります。オンボード処理とは、セカンダリ・サイトのワークスペースに、プライマリ・サイトのボリュームを元に、セカンダリ・サイト用ボリュームを作成する作業、というイメージです。
* プライマリ・サイトのPowerVSワークスペースのCRN
* プライマリ・サイトのボリュームに付与された補助ボリュームの情報  
    
  

プライマリ・サイトのPowerVSワークスペースのCRN情報の取得
```:Primary Site
 % ibmcloud pi ws ls | grep TOK
ユーザーXXXXX@XXXXXのアカウントXXXXXのワークスペースをリストしています...
crn:v1:bluemix:public:power-iaas:tok04:a/7cd6294fd15e40ab8df9d0bc516b8d85:ea698bbb-ac5a-4bdf-99f6-374f3c928de2::      ea698bbb-ac5a-4bdf-99f6-374f3c928de2   (省略)
```
補助ボリュームの情報を取得  
JSON形式でVOLの情報を取得すると、"auxVolumeName"に補助ボリュームの情報が記載されています。  

```:Primary Site
% ibmcloud pi vol get GRS_AIX_vol1 --json
{
    "auxVolumeName": "aux_volume-GRS_AIX_vol1-6a909e3b-301932871297",
    "auxiliary": false,
    "bootable": false,
    "consistencyGroupName": "rccg-9d02-f1d5b",
    "creationDate": "2024-07-08T05:41:34.000Z",
    "diskType": "tier1",
    "groupID": "9d02a036-e0ca-486d-821b-da09853f1d5b",
    "ioThrottleRate": "100 iops",
    "lastUpdateDate": "2024-07-08T05:52:49.000Z",
    "masterVolumeName": "volume-GRS_AIX_vol1-6a909e3b-3019",
    "mirroringState": "consistent_copying",
    "name": "GRS_AIX_vol1",
    "primaryRole": "master",
    "pvmInstanceIDs": [
        "79c74ab5-05f8-47fc-8bbf-5b662a9b0a80"
    ],
    "replicationEnabled": true,
    "replicationStatus": "enabled",
    "replicationType": "global",
    "shareable": false,
    "size": 10,
    "state": "in-use",
    "volumeID": "6a909e3b-3019-47cf-9439-2bddef293dfc",
    "volumePool": "General-Flash-9",
    "volumeType": "Tier1-General-Flash-9-GRS",
    "wwn": "600507681381028B7000000000000520"
}
```
  
    

# 3. セカンダリ・サイトの設定作業
## 3-1. セカンダリ・サイト(OSA21)に切り替え

接続先をセカンダリ・サイトであるOSA21に切り替えます。
```
% ibmcloud pi ws ls | grep OSA
ユーザーXXXXX@XXXXXのアカウントXXXXXのワークスペースをリストしています...
7cd6294fd15e40ab8df9d0bc516b8d85:915e2943-adaa-4bf4-aecd-48cc2c35368a::      915e2943-adaa-4bf4-aecd-48cc2c35368a   (省略)


 % ibmcloud pi ws target crn:v1:bluemix:public:power-iaas:osa21:a/7cd6294fd15e40ab8df9d0bc516b8d85:915e2943-adaa-4bf4-aecd-48cc2c35368a::
サービス crn:v1:bluemix:public:power-iaas:osa21:a/7cd6294fd15e40ab8df9d0bc516b8d85:915e2943-adaa-4bf4-aecd-48cc2c35368a:: をターゲットにしています...

```

## 3-2. オンボーディング処理
オンボーディング処理を行います。
```:Secondary Site
% ibmcloud pi vol on cr -a aux_volume-GRS_AIX_vol1-6a909e3b-301932871297 -s crn:v1:bluemix:public:power-iaas:tok04:a/7cd6294fd15e40ab8df9d0bc516b8d85:ea698bbb-ac5a-4bdf-99f6-374f3c928de2::
アカウントXXXXX(ユーザー XXXXX@XXXXX) で、ボリューム・オンボードを作成しています ...

ID     58e8b222-1454-4419-b63a-a51d30652bd4
説明   -
```
オンボーディング処理状況の確認すると、SUCCESSになっていました。
```:Secondary Site
 % ibmcloud pi vol on ls | grep GRS_AIX_vol1
アカウント XXXXX (ユーザー XXXXX@XXXXX) で、ボリューム・オンボード操作をリストしています ...
58e8b222-1454-4419-b63a-a51d30652bd4   SUCCESS   onboard_aux_vols_QSI0K59K   aux_volume-GRS_AIX_vol1-6a909e3b-301932871297
```
詳細を確認してみると、セカンダリ・サイトに補助ボリュームが作成され、複製対応が"true"、補助が"true"になっています。
```:Secondary Site
% ibmcloud pi vol get aux_volume-GRS_AIX_vol1-6a909e3b-301932871297
ユーザーXXXXX@XXXXXのアカウントXXXXXのボリューム aux_volume-GRS_AIX_vol1-6a909e3b-301932871297を取得しています...

ID                   cf97fbb1-d96b-44fa-8101-09f3b98b4715
名前                 aux_volume-GRS_AIX_vol1-6a909e3b-301932871297
プロファイル         tier1
状況                 available
サイズ               10
作成日時             2024-07-08T06:10:21.000Z
更新済み             2024-07-08T06:10:22.000Z
共有可能             false
ブート可能           false
ストレージ・プール   General-Flash-7
入出力スロットル率   100 iops
複製対応             true
補助                 true
PVMInstanceID        -
WWN                  600507681381028B000000000000042C
```


## 3-3. 複製状況を確認
VGを指定して、rcr(Remote Copy Relationship)の状況を確認します。
フリーズ時間が"2024-07-08T06:09:30.000Z"となっており、これが最新で同期された時刻を表すようです。

```:Secondary Site
 % ibmcloud pi vg rcr rccg-9d02-f1d5b
ユーザーXXXXX3@XXXXXのアカウントXXXXXのボリューム・グループrccg-9d02-f1d5bのリモート・コピー情報を取得しています...
名前     補助ボリューム名                                整合性グループ名   マスター・ボリューム名              リモート・コピー ID   状態                 コピー・タイプ   サイクル・モード   フリーズ時間               1 次役割   進行状況
rcrel1   aux_volume-GRS_AIX_vol1-6a909e3b-301932871297   rccg-9d02-f1d5b    volume-GRS_AIX_vol1-6a909e3b-3019   68                    consistent_copying   global           multi              2024-07-08T06:09:30.000Z   master     99
```

しばらくしてもう一度確認すると、フリーズ時間が更新されていたので、再度同期のサイクルが回ったようです。
```:Secondary Site
 % ibmcloud pi vg rcr rccg-9d02-f1d5b
ユーザーXXXXX@XXXXXのアカウントXXXXXのボリューム・グループrccg-9d02-f1d5bのリモート・コピー情報を取得しています...
名前     補助ボリューム名                                整合性グループ名   マスター・ボリューム名              リモート・コピー ID   状態                 コピー・タイプ   サイクル・モード   フリーズ時間               1 次役割   進行状況
rcrel1   aux_volume-GRS_AIX_vol1-6a909e3b-301932871297   rccg-9d02-f1d5b    volume-GRS_AIX_vol1-6a909e3b-3019   68                    consistent_copying   global           multi              2024-07-08T06:17:51.000Z   master     99
```

## 3-4. セカンダリ・サイトのインスタンス (GRS_AIX_sec)を作成
GUIで次のようなインスタンスを作成しました。  
![image-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1261059/46f2b457-3b46-966c-2deb-62547456137c.png)



# 4. 被災時切り替えシミュレーション

## 4-1. プライマリ・サイトが被災したと仮定し、セカンダリ・サイトへ切り替え
セカンダリ・サイト（OSA21）のボリュームにアクセスできるようにするため、-a (--allow-read-accessと同じ) オプションを付けて、volume-group-stopコマンドを実行します。
```:Secondary Site
% ibmcloud pi vg act -a -o stop rccg-9d02-f1d5b
アカウント XXXXX (ユーザー XXXXX@XXXXX) で、ボリューム・グループ rccg-9d02-f1d5b に対して停止アクションを実行しています ...
OK
ボリューム・グループrccg-9d02-f1d5bに対する停止要求が受け入れられました。
```
複製状況が、"disabled" になりました。
```:Secondary Site
% ibmcloud pi vg get rccg-9d02-f1d5b
アカウントXXXXX (ユーザーXXXXX@XXXXX)で、ボリューム・グループrccg-9d02-f1d5bを取得しています...

ID                 0b975d57-30d0-489b-b637-4ff2124ad08d
名前               rccg-9d02-f1d5b
整合性グループ名   rccg-9d02-f1d5b
複製状況           disabled
状況               available
状況の説明         -
```

## 4-2. セカンダリ・サイトでVolumeを認識させ、ファイルシステムの内容を確認

セカンダリ・サイトのインスタンスにVolumeをattachします。
```:Secondary Site
% ibmcloud pi ins vol attach GRS_AIX_sec -v aux_volume-GRS_AIX_vol1-6a909e3b-301932871297
ユーザー XXXXX@XXXXX のアカウント XXXXX でボリュームをインスタンス GRS_AIX_sec に追加しています...
OK
ボリュームをインスタンス GRS_AIX_sec に追加する要求が受け入れらました。
```

セカンダリ・サイトのインスタンスにログインし、Volumeを認識させて中身を確認したところ、プライマリ・サイトで作成したファイルを確認できました。
```:Secondary Site
# hostname
grs-aix-sec

# lspv
hdisk0          00fa00d66c59c9d7                    rootvg          active

# cfgmgr

# lspv
hdisk0          00fa00d66c59c9d7                    rootvg          active
hdisk1          00ca78c090e31da6                    None

# importvg -y datavg hdisk1
datavg

# lsvg -l datavg
datavg:
LV NAME             TYPE       LPs     PPs     PVs  LV STATE      MOUNT POINT
fslv00              jfs2       640     640     1    closed/syncd  /data

# mount /data
Replaying log for /dev/fslv00.

# cd /data

# ls
lost+found  test1.txt

# cat test1.txt
Hello GRS!
```

# 5. プライマリ・サイトへの切り戻しシミュレーション
## 5-1. 被災環境のクリーンナップ
プライマリ・サイトは破壊されている想定なので、シミュレーションのためにここでは以下を実施しておきます。
```:Primary Site
# hostname
grs-aix-pri

# umount -f /data
forced unmount of /data
forced unmount of /data

# varyoffvg datavg

# exportvg datavg

# lspv
hdisk0          00fa00d66c59c9d7                    rootvg          active
hdisk1          00ca78c090e31da6                    None
```
## 5-2. セカンダリ・サイトから、プライマリ・サイトへの転送
セカンダリ・サイトから、プライマリ・サイトへ、--source auxiliaryオプションを付けて、転送を開始します。

```:Secondary Site
 % ibmcloud pi vg act rccg-9d02-f1d5b -o start --source auxiliary
アカウント XXXXX (ユーザー XXXXX@XXXXX) で、ボリューム・グループ rccg-9d02-f1d5b に対して開始アクションを実行しています ...
OK
ボリューム・グループrccg-9d02-f1d5bに対する開始要求が受け入れられました。
```
セカンダリ・サイトのインスタンスで、テスト用に新規ファイルを作成しておきます。
```:Secondary Site
# hostname
grs-aix-sec

# echo "Welcome back GRS!" > test2.txt

# ls
lost+found  test1.txt   test2.txt

# cat test2.txt
Welcome back GRS!
```
## 5-3. Replication状態の確認
Replication状態を確認します。
逆転送になっているので1次役割が、"aux"と表記されています。
```:Secondary Site
 % ibmcloud pi vg rcr rccg-9d02-f1d5b
ユーザーXXXXX@XXXXXのアカウントXXXXXのボリューム・グループrccg-9d02-f1d5bのリモート・コピー情報を取得しています...
名前     補助ボリューム名                                整合性グループ名   マスター・ボリューム名              リモート・コピー ID   状態                 コピー・タイプ   サイクル・モード   フリーズ時間               1 次役割   進行状況
rcrel1   aux_volume-GRS_AIX_vol1-6a909e3b-301932871297   rccg-9d02-f1d5b    volume-GRS_AIX_vol1-6a909e3b-3019   68                    consistent_copying   global           multi              2024-07-08T07:44:03.000Z   aux        99
```
しばらくしてもう一度確認すると、フリーズ時間が更新されたので、セカンダリ・サイトの更新はプライマリ・サイトへも同期されたと思われます。
```:Secondary Site
% ibmcloud pi vg rcr rccg-9d02-f1d5b
ユーザーXXXXX@XXXXXのアカウントXXXXXのボリューム・グループrccg-9d02-f1d5bのリモート・コピー情報を取得しています...
名前     補助ボリューム名                                整合性グループ名   マスター・ボリューム名              リモート・コピー ID   状態                 コピー・タイプ   サイクル・モード   フリーズ時間               1 次役割   進行状況
rcrel1   aux_volume-GRS_AIX_vol1-6a909e3b-301932871297   rccg-9d02-f1d5b    volume-GRS_AIX_vol1-6a909e3b-3019   68                    consistent_copying   global           multi              2024-07-08T07:52:24.000Z   aux        100
```
## 5-4. GRS VGの停止
切り戻しのため、逆方向の転送を停止(GRSのVGを停止)します。
```:Secondary Site
% ibmcloud pi vg act rccg-9d02-f1d5b -a -o stop
アカウント XXXXX (ユーザー XXXXX@XXXXX) で、ボリューム・グループ rccg-9d02-f1d5b に対して停止アクションを実行しています ...
OK
ボリューム・グループrccg-9d02-f1d5bに対する停止要求が受け入れられました。
```

セカンダリ・サイトの/dataはアンマウントしておきます。
```:Secondary Site
# hostname
grs-aix-sec

# umount -f /data
forced unmount of /data
forced unmount of /data
```
## 5-5. セカンダリ・サイトで作成したファイルの確認
テスト用にセカンダリ・サイト側で作成したファイルが、プライマリ・サイトで見れることを確認してみました。
```:Primary Site
# hostname
grs-aix-pri

# lspv
hdisk0          00fa00d66c59c9d7                    rootvg          active
hdisk1          00ca78c090e31da6                    None

# importvg -y datavg hdisk1
datavg

# mount /data
Replaying log for /dev/fslv00.

# cd /data

# ls
lost+found  test1.txt   test2.txt

# cat test2.txt
Welcome back GRS!
```
## 5-6. 平常時転送への戻し
最後に、--source auxiliaryオプションを付けずに、volume-group-startを実行します。これで、平常時のプライマリ・サイトからセカンダリ・サイトへの転送となり、復旧が完了です。
```:Secondary Site
% ibmcloud pi vg act rccg-9d02-f1d5b -o start
アカウント XXXXX (ユーザー XXXXX@XXXXX) で、ボリューム・グループ rccg-9d02-f1d5b に対して開始アクションを実行しています ...
OK
ボリューム・グループrccg-9d02-f1d5bに対する開始要求が受け入れられました。
```