PowerHA SystemMirror for i でPowerVS のGRSを構成してみた

## 0. はじめに
PowerVS(Power Virtual Server)でGRS(Global Replication Service)が提供されるようになりましたが、今回はIBM iのPowerHA SystemMirror for i (以降PowerHA)の機能を使ってIBM i上でのGRSを使ったIASPの複製による災害対策環境を構成してみました。
PowerHAとGRSを組み合わせて利用することにより、PowerVS上のIBM iでIASPのボリュームレベルの非同期の複製を行うことができます。
今回の検証環境は以下のとおりです。
![検証環境](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/539469/60d28661-d702-2f34-20a1-0dfbfc5b4e0c.png)
プライマリーサイトはSYD05、バックアップサイトがSYD04という想定です。

参考資料
[Configuring PowerHA with Global Replication Services (7.5)](https://helpsystemswiki.atlassian.net/wiki/spaces/IWT/pages/2985656345/Configuring+PowerHA+with+Global+Replication+Services+7.5)

## 1. 前提条件
PowerHAを利用するので、インスタンスを作成するときには必ずソフトウェア・ライセンスとしてIBM i PowerHAをチェックすることを忘れないでください。
GRSの複製の構成を行う前に、IBM iでのクラスターの構成を行う必要があります。クラスターの構成については、以下の記事が参考になると思います。

[PowerVSでPowerHA SystemMirror for i 地理的ミラーリングを構成してみました](https://qiita.com/yoichi_nakamura/items/6f96923b83f281bfc55e) 

[PowerHA SystemMirror for i マルチターゲット地理的ミラーリングを構成してみた](https://qiita.com/amogi23/items/eae498bd5d6ed5ae899c) 

また、PowerVSの認証でiam.cloud.ibm.comへの接続が必要になりますので、IBM iインスタンスからIBM Cloudのパブリック・ネットワークのDNSである9.9.9.9への疎通ができることをあらかじめ確認しておいてください。私はなぜかpingが通らず、IBM i側での経路情報の調整で少し手間取りました。

この資料ではクラスターの作成およびノードの追加とデバイス・ドメインへの追加がすでにできていることとします。そしてGRSに関わる部分から説明していきたいと思います。

## 2. PowerHAの構成
### クラスター資源グループの構成
ここからPowerHAの構成を行っていきます。この時点でのクラスター構成をWRKCLUコマンドで確認すると以下のようになっています。
![WRKCLU](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/539469/9feb8c4c-dcd3-a403-8deb-85e4e3bebffc.png)

![WRKCLU](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/539469/233875f7-8ddd-c046-26e3-a9873f34cfc2.png)

またクラスター資源グループを構成するにあたって事前にIASPを作成しておきます。
![CFGDEVASP](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/539469/674b4060-2285-a63c-3719-25ceadba4dd1.png)
この構成にクラスター資源グループを追加していきます。WRKCLU オプション9またはCRTCRGコマンドを使用します。
```
CRTCRG CRG(IBMI75CRG) CRGTYPE(*DEV) 
        RCYDMN((IBMI751 *PRIMARY *LAST SYD05 *NONE) (IBMI752 *BACKUP *LAST SYD04 *NONE)) 
        CFGOBJ((IASP01 *DEVD *ONLINE)) 
        FLVMSGQ(QSYS/QSYSOPR) FLVWAITTIM(*NOMAX)   
```
### 自動フェイルオーバーの非活動化
省略時の設定では自動フェイルオーバーが設定されているので、QCST_CRG_CANCEL_FAILOVER　ポリシーを設定することで自動フェイルオーバーを非活動化します。
```
ADDHAPCY PCY(QCST_CRG_CANCEL_FAILOVER) PCYDMN(IBMI75CRG) QUAL('SCOPE(*CRG)') VALUE('EVENT(*ALL)')
```
PCYDMNには対象のクラスター資源グループ名を指定します。

## 3. GRSの管理のためのPowerHA管理の構成
### ストレージ資格情報の作成
PowerHAはPowerVS内の資源のコントロールと管理のためにPowerVS APIを使用するので、このための構成を行います。
 #### デジタル証明書の作成
PowerHAはIBM CloudとのコミュニケーションのためにTLSを使用します。そのためデジタル証明書を利用します。  
・*SYSTEM証明書の作成
最初にIBM iサイドでシステム証明書ストアを作成します。
ブラウザーより、http://mysystem:2001/dcm へアクセスします。  
証明書ストアの作成から*SYSTEMを選択し、パスワードを指定し、作成します。
![証明ストア](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/539469/026734e8-96a4-7c8c-f2cd-e33c2a244d28.png)
*SYSTEM証明書ストアは、クラスターに参加するすべてのノード上で作成してください。  
・IBM Cloud証明書の取り込み  
デジタル証明書マネージャーによく知られているCAを登録します。  
引き続きIBM i Navigator for iのデジタル証明書マネージャーのインターフェースを使用します。  
証明書ストアのオープンを選択して、*SYSTEMを選択します。パスワードを指定して証明書ストアをオープンします。 
証明書の取り込みを選択します。
![証明書の取り込み1](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/539469/4bd62518-010d-ba8e-e125-afe5f7be9ede.png)

証明書の選択の画面ですべての証明書を選択して、取り込みを選択します。
![証明書の取り込み2](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/539469/e235f14d-82d2-e25f-7252-7683d17fc9e1.png)
これをすべてのノードで実行します。

#### APIキーの作成
   APIキーでは最低以下のアクセスレベルを持つように作成してください。 


・power-iaas.cloud-instance.read  
・power-iaas.cloud-instance.modify

PowerHAでは、IBMクラウドユーザーに付けられたAPIキーではなく、サービスIDを使用することを推奨しています。これにより、操作がユーザーとしてではなく、サービスIDとして監査されることになります。
さらに、PowerHAのアクセスは、特定の個人を表すIDに結び付けられることがなくなります。
サービスIDの作成は以下の手順で行います。

- IBM Cloudコンソールにアクセスして管理→アクセス(IAM)→サービスIDを選択します
- もしサービスIDがない場合は、サービスIDを作成します
![Create Service ID](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/539469/2a82e72e-4320-d841-923a-86b1aebd082d.png)
- サービスIDを作成したらAPIキータブを選択して、APIキーを作成します
![Create API Key](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/539469/303f5715-0c9d-6783-330d-3c8ba2ce3170.png)
- APIキーを作成したらコピーもしくはダウンロードして保管しておきます
![Download API Key](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/539469/913e6035-185b-3018-3dbb-7c734a40a2f8.png)

### プライマリーPowerVSワークスペースを認識するためのHA構成記述の作成
HA構成記述は、PowerVSワークスペースを表すために使用されます。ワークスペースの識別と制御に必要な情報だけでなく、認証情報（APIキー）も含まれています。
HA構成記述は、ADDHACFGDコマンドかWRKCLUコマンドのオプション11で作成します。
```
ADDHACFGD NAME(GRSSYD05) TYPE(*STGCTL) SUBTYPE(*PVS) PVSHOST((作成したapikey)) 
```
![ADDHACFGD_1](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/539469/bd4c2576-4b86-fa21-4762-62f9844c8a0b.png)

同様にセカンダリーPowerVSワークスペースのためのHA構成記述を作成します。
```
 ADDHACFGD NAME(GRSSYD04) TYPE(*STGCTL) SUBTYPE(*PVS) PVSHOST((作成したapikey)) 
 ```
作成後、WRKCLUコマンドのオプション11で確認すると以下のような画面になります。
![WRKCLU Option11](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/539469/547ab0af-b66a-77a4-340d-5e1df891dba4.png)

 GRSSYD05の詳細をみると以下のような情報を確認することができます。
 ![Option5](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/539469/fa8278fc-08d8-7327-a0db-b744981344ec.png)

## 4. GRSに対応したボリュームの作成
まずはソース側のPowerVSのインスタンスへGRSボリュームの追加を行います。
![IBM Cloud Console Add Volume](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/539469/0faa4f35-81e2-ad1a-3c3f-50c495e70e24.png)

ボリュームの名前、層、数、サイズ、ストレージ・プールの選択を行う部分は通常のボリュームの構成と同じですが、追加でGRSの設定を行います。
"Volume Replication with GRS"にチェックを入れて構成します。

![IBM Cloud Console GRS](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/539469/16e661aa-1312-fbb8-35e8-1316b6e1e3cc.png)

![IBM Cloud Console GRS](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/539469/0fc88764-51a8-99e4-c0fc-5b89156e951f.png)

## 5. GRSの環境の作成
プライマリー・サイトのワークスペースのCRNを確認
![IBM Cloud Console CRN](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/539469/891d572a-64f1-a5a5-74a4-7607cf12cf10.png)
```ワークスペースcrn.
crn:v1:bluemix:public:power-iaas:syd05:a/7cd6294fd15e40ab8df9d0bc516b8d85:bc3b21c2-e3aa-4bc3-8ba8-c2ec62181621::
```
プライマリー・サイトの補助ボリューム情報の取得
ワークスペースのストレージ・ボリュームから情報を取得します。
![IBM Cloud Console Volume](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/539469/058fdd89-9625-b15c-3036-b3f6e7b6312a.png)

次に行う補助ボリュームのオンボード処理のためにAuxiliary volume nameを控えておきます。
```ボリュームID.
aux_volume-IBM751_IASP01_1-d66d1236-c08276244873
```
オンボーディング処理を実行するには、onboard auxiliary volume APIを使用し、オンボーディングしたいプライマリ・ボリュームの CRN と auxVolumeName 値を指定します。
ここからはCLIを使用して操作します。
IBM Cloud CLIの導入は[こちら](https://cloud.ibm.com/docs/cli?topic=cli-getting-started)を参照してください。

IBM CloudへCLIでアクセスします。
```
% ibmcloud login --apikey @apikey.json -u xxx@yyy.com
API エンドポイント: https://cloud.ibm.com
リージョン: au-syd
認証中です...
OK

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


API エンドポイント:   https://cloud.ibm.com
Region:               au-syd
ユーザー:             xxx@yyy.com
アカウント:           xxx (7cd6294fd15e40ab8df9d0bc516b8d85) <-> 2435446
リソース・グループ:   リソース・グループがターゲットになっていません。'ibmcloud target -g RESOURCE_GROUP' を使用してください
```
セカンダリー・サイトのCRNを使用してプライマリー・サイトへ接続します。先ほどプライマリー・サイトのCRN情報を取得した時と同様にCRN情報を取得し、接続します。
```
% ibmcloud pi ws target crn:v1:bluemix:public:power-iaas:syd04:a/7cd6294fd15e40ab8df9d0bc516b8d85:5610c509-bbd0-4291-ba92-e0027f8611f0::
サービス crn:v1:bluemix:public:power-iaas:syd04:a/7cd6294fd15e40ab8df9d0bc516b8d85:5610c509-bbd0-4291-ba92-e0027f8611f0:: をターゲットにしています...
```
オンボーディング処理を行います。
```
% ibmcloud pi vol on cr -a aux_volume-IBM751_IASP01_1-d66d1236-c08276244873 -s crn:v1:bluemix:public:power-iaas:syd05:a/7cd6294fd15e40ab8df9d0bc516b8d85:bc3b21c2-e3aa-4bc3-8ba8-c2ec62181621::
アカウント xxx(ユーザー xxx@yyy.com) で、ボリューム・オンボードを作成しています ...

ID     143ff408-ece9-4805-a54f-77a6e18a69dc
説明   -
```
セカンダリー・サイトで状況を確認してみます。
![IBM Cloud Console](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/539469/54cdb2c7-9bc4-6f26-8554-cdc0546f4c0b.png)
複製用のボリュームが追加されていることがわかります。
セカンダリー・サイトでのオンボード処理が完了したら、ストレージボリュームをIBM iインスタンスにマッピングします。

これでPowerVS側の準備は完了しました。

## 6. コピー記述の追加
コピー記述はPowerHAにIASPの単一コピーの定義と管理に必要な情報になります。GRSでは、IASPが複製されるため、IASPのコピーが2つ存在します。したがって、PowerHAは2つのコピー記述を必要とします。
コピー記述に必要な情報は、IASPのコピーの場所を記述します。例えば、プライマリ（ソース）コピーのコピー記述は、以下のコマンドを使用して追加できます：
```
ADDPVSCPYD ASPCPY(CPYDSYD05) ASPDEV(IASP01) CRG(IBMI75CRG) SITE(SYD05) NODE(*CRG) PVSCFGD(GRSSYD05)
```
同様にバックアップ・コピー用のコピー記述を作成します。
```
ADDPVSCPYD ASPCPY(CPYDSYD04) ASPDEV(IASP01) CRG(IBMI75CRG) SITE(SYD04) NO
DE(*CRG) PVSCFGD(GRSSYD04)
```

## 7. コピー記述へのボリュームの追加
PowerHAがレプリケーションを管理・制御するために必要な情報として、IASPを表すストレージ内のボリュームに関する識別情報があり、この場合PowerHAはPowerVSのボリューム識別子（ボリュームID）を使用します。これらのボリュームIDは、プライマリーサイトとバックアップサイトの両方でコピー記述に追加する必要があります。
### プライマリー（ソース）コピー記述へのボリュームの追加
ボリューム情報の追加のためにCHGPVSCPYDコマンドを使用します。プライマリーコピー記述に追加する場合は以下のように実行します。
```
CHGPVSCPYD ASPCPY(CPYDSYD05) ACTION(*ADDVOL)
```
実行すると追加するボリュームを選択する画面が次に表示されます。
![CHGPVSCPYD](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/539469/8decae17-3f24-c34b-48b4-60dc78243b75.png)
1を入力してF16を押してボリュームを追加します。
同様にターゲット（バックアップ）コピー記述でもターゲット・ワークスペースのボリュームを追加します。
```
CHGPVSCPYD ASPCPY(CPYDSYD04) ACTION(*ADDVOL)
```
同様にボリュームを追加します。
![CHGPVSCPYD2](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/539469/ce918ae1-588f-9c21-7989-68ed48e438ca.png)

## 8. PVSセッションの開始
PowerHAのセッションは、レプリケーションの管理と制御に使用されます。この例では、以下のコマンドを使用してセッションを開始します。
```
STRPVSSSN SSN(GRS_SSN) TYPE(*GLOBALMIR) CRG(IBMI75CRG)
```
### PVSセッションの表示
PowerHAによって管理されているGRSは以下のようにPVSセッションの表示コマンドによって表示・管理することができます。
```
DSPPVSSSN SSN(GRS_SSN)
```
この画面では、IASPの活動状況、レプリケーションの進捗に加えてどちらがプライマリーとして活動しているかなどの情報を得ることができます。
![DSPPVSSSN](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/539469/8a72abac-0f5e-4c39-9504-dc98df787e5c.png)

現在はノードIBMI751がソース、ノードIBMI752がターゲットになっていることがわかります。またコピーの状況も100%になっており、同期が取られていることがわかります。

### ソース、ターゲットの切り替え
それではPowerHAの機能を使ってソースとターゲットを切り替えてみましょう。切り替えにはCHGCRGPRIコマンドかWRKCLU→9.クラスター資源グループの処理→Option3 1次の変更で切り替えることができます。
```
CHGCRGPRI CRG(IBMI75CRG) 
```
切り替え実行中の画面です。経過時間がカウントアップされるのがいいですね。画面中のユーザーHAADMINはPowerHA管理用に作成したユーザーです。システム提供のものではありません。
![CHGCRGPRI](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/539469/1b7205fd-cbe0-f8e0-7bf8-be9b8caee59a.png)
コマンドが完了すると完了したことを示すメッセージが表示されます。
```
> CHGCRGPRI CRG(IBMI75CRG)                                                
  クラスターIBMI75CLU内でクラスター資源グループIBMI75CRGの1次ノードが変更されました。               
```
切り替わったノードIBMI752でDSPPVSSSNコマンドを実行してみます。
```
DSPPVSSSN SSN(GRS_SSN)
```
![DSPPVSSSN](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/539469/01d509ed-346a-c654-e62b-3f1b2f11c795.png)

ソースノードがIBMI752、ターゲットノードがIBMI751に変わっていることがわかります。

## 9. まとめ
この記事では PowerVSで提供されるGRS (Global Replication Service)とPowerHAを利用して、PowerVS上でのIBM iの災害対策環境を構築する手順を解説しました。PowerHAなのでIASP化が必要になりますが、比較的容易に構成できました。IASPを構成するストレージ全体の複製を作成することができますので、どのオブジェクト/ライブラリーを複製するかなどの考慮が必要なく、運用も比較的簡単なソリューションだと思います。PowerVS上のIBM iの災害対策の選択肢の1つとして検討してみてはいかがでしょうか？