DataSpider Servista を AWS 上で冗長化してみた

# はじめに
DataSpider Servista（以降 DataSpider） を AWS 上で冗長化（クラスタを構築）する手順を紹介します。
クラスタソフトを利用した構築方法もありますが、今回はお手軽に AWS の機能を利用して自前で構築してみました。
クラスタソフトの動作検証レポートなどは（株）セゾン情報システムの HP より取得可能です。
https://www.hulft.com/partner/collaboration/lk_for_linux_report

また、DataSpider のクラスタ構成ガイド（※）では下記のパターンを案内しています。
- 共有ディスクに DataSpider をインストールする
- 各ノードに DataSpider をインストールし、設定情報を同期する

今回は、共有ディスクにインストールするパターンで構築を行います。

※クラスタ構成ガイドは myHULFTでダウンロードできます。


# 構成
構成図
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3488544/d1dad6de-8a15-4d7f-3ab7-279d88d7e91b.png)

今回は、EFS を使って DataSpider をインストールする共有ディスクを実装し、NLB を使って稼働系のインスタンスへのルーティングを実現しています。
リポジトリ DB の冗長化は RDS のマルチ AZ を利用しました。

※今回の実装では、コストを下げるため、NAT gateway を片方の AZ のみ作成、RDS もマルチ AZ にはしませんでした。

# やってみた
## VPC、サブネットの作成
VPC の作成から、作成するリソースで「VPC など」を指定するから以下の内容で作成

任意の名前タグを入力
アベイラビリティゾーン (AZ) の数：2
パブリックサブネットの数：2
プライベートサブネットの数：2
NAT ゲートウェイ:1 AZ 内

プレビューはこんな感じです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3488544/b0292113-bda8-831c-1524-ae8ccaf8cbcf.png)

## 各種リソース作成
### EFS 作成
EFS でファイルシステムを作成から以下の内容（全般、パフォーマンスともにデフォルト設定）で作成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3488544/63c46fcb-65a2-0415-16aa-e04cb6d88034.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3488544/f7a12b9f-835f-cc08-dc77-817a53a66758.png)

セキュリティグループはEFSように新規作成。（インバウンドルールは後ほど設定）
ファイルシステムポリシーはデフォルト設定。


### インスタンス（node1）を作成

OS：Amazon Linux 2
インスタンスタイプ：t3.small （DataSpider の最小構成がメモリ 2G のため）
キーペア：

ネットワークの設定で
　VPC：今回作成した VPC
　サブネット：今回作成したプライベートサブネットの 1a
　セキュリティグループ：今回作成したプライベートサブネット 1a 用のセキュリティグループ

ストレージを設定でEFSの接続を追加
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3488544/d927d1ed-c2d0-56d8-2689-1a33a815b163.png)

高度なオプションで
　IAM インスタンスプロフィールでフリートマネージャで接続できるようにするためのロールを追加
　※[こちら](https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/systems-manager-setting-up-ec2.html"https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/systems-manager-setting-up-ec2.html") のステップ１を参照して下さい。

### RDS 作成
データベースを作成から以下の設定で作成（それ以外はデフォルト）
　エンジンは PostgreSQL
　エンジンバージョンはリポジトリ DB に対応している 13 を指定
　テンプレートは「無料利用枠」
　マスターパスワードを入力

　接続の設定は以下の通り
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3488544/50c2bc83-85e3-dffc-6485-0c784177b533.png)

　
### DataSpider のインストール
必要なリソースがそろったので、クラスタノードの片方を作成します。

セッションマネージャでインスタンスに接続し、インストール先である EFS がマウントできているか確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3488544/cbec3bbb-fbb0-0939-c769-1f51b606f36f.png)

インストーラとライセンスファイルは myHULFT で評価版をダウンロードすることが可能です。
また、インストールの際にリポジトリ DB の設定も行うため、jdbc ドライバーもダウンロードしておきます。
（ダウンロードした各種ファイルは S3 経由でインスタンスにコピーしました。）

インストール実施
リポジトリDBの設定やライセンスファイルの指定を行い
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3488544/0571e892-9a7b-8552-3907-3ec716cc3332.png)
無事インストール完了

DataSpider の起動に fontconfig が必要なため、
`yum install fontconfig`
を実施して、インスタンスの再起動を行います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3488544/da9717b2-f1e9-f31a-23a9-35cc36a7b3ce.png)
無事 DataSpider の起動に成功！

### ロードバランサー作成
しかし、まだ DataSpider のクライアントツールで接続することができません。
DataSpider が稼働しているプライベートなサブネットにアクセスするため、NLB を作成します。

ロードバランサーの作成から Network Load Balancer を作成
ロードバランサー名を入力
スキームはインターネット向け

ネットワークマッピングは以下を指定
　VPC は今回作成した VPC
　マッピングでは各 AZ のパブリックサブネットを指定

セキュリティグループは新規作成して指定
　マイIPからのHTTP通信のインバウンドを許可
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3488544/6fadc91d-3030-9baa-73ee-94977782d479.png)

リスナーとルーティング
　プロトコル TCP　ポート 80

また、ターゲットグループを以下の通り新規作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3488544/29747ea4-d6ce-6854-2394-5bca197a6cdd.png)

今回作成したインスタンスを指定して、ターゲットに含めてターゲットグループを作成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3488544/b2c9dd44-c1d9-b3a7-8e0b-660600eb4de7.png)

新規作成したターゲットグループを指定して、NLBを作成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3488544/3edbc9fa-4816-941a-5d93-5aad33f6cd4f.png)

最後に、作成したNLBからのTCP7700 のインバウンドを許可するため、インスタンスのセキュリティグループを編集します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3488544/a3435110-5049-d108-4057-c3df14f26b08.png)

これで、NLB の DNS にアクセスすると、インスタンスに接続することができました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3488544/5ce3a128-aea6-5ba6-c5cc-c6671324993f.png)



## クラスタ構築
### DataSpider 自動起動の設定
DataSpider を起動してクライアントツールでアクセスすることができましたが、このままでは、ノードを切り替えるたびに DataSpider の起動を行わなくてはならず、手間と時間がかかってしまいます。
インスタンス起動で自動で DataSpider が起動するように設定を行います。
https://qiita.com/fk_2000/items/da60be70dcd3c2bc1319
こちらを参考にして登録。
DataSpider の起動を、マウントを待ってから実施する必要があるので以下の通り設定を修正しています。

```
# DataSpider Server

[Unit]
Description=DataSpider Server
RequiresMountsFor=/usr/local/dataspider

[Service]
ExecStart=/usr/local/dataspider/server/bin/DataSpiderServer
ExecStop=/usr/local/dataspider/server/bin/Shutdown

[Install]
WantedBy=multi-user.target
```

### インスタンス（node2）を作成
node1 が完成したので、待機系の node2 を作成していきます。
node1 のインスタンスのイメージを取得し、その AMI からインスタンスを起動します。
インスタンスタイプは node1 と同じです。
作成するさいは node1 を停止して作成します。

ネットワーク設定は以下の通り。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3488544/00973f03-5c5e-d436-b66a-019d5ac1adf9.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3488544/dc424af1-91d4-eed5-029b-ff39934e52c6.png)

注意点としては
・node1 と異なるサブネット（1c）に配置
・セキュリティグループは RDS 接続用、EFS 接続用のセキュリティグループを追加
・NLB からのアクセスを許容するセキュリティグループを新規で作成してい追加

node2 側でも DataSpider の起動成功
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3488544/2d0dc576-e685-951b-d05b-8346bcb3996f.png)

### ターゲットグループに node2 を追加
node2 をターゲットグループに追加
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3488544/458fd711-c2e0-ff0a-015b-a20e7a430311.png)
これで NLB の DNS にアクセスすると、node2 に接続することができました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3488544/bd811096-082c-658a-42f5-2e7f6d5815ea.png)
（node1 で作成していたプロジェクトも確認できました）

# 動作確認
現在 node2 が起動している状態です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3488544/578c0865-2325-27da-b6f8-49f5aca4a7ea.png)

node2 を停止して node1 を起動します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3488544/6b51deb7-76f9-609a-1328-b17775624a08.png)

ロードバランサーにアクセスすることで node1 に接続できました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3488544/31c012e4-56ea-cd6b-e8f4-ab730533f07a.png)



# おわりに
今回は AWS のサービスを使ってお手軽に、共有ディスクに DataSpider をインストールする方式のクラスター構成を実装してみました。

次のステップとしては、ターゲットグループのヘルスチェックの結果をもとに、自動でフェイルオーバーする仕組みを で実装してみたいと思います。

各ノードに DataSpider をインストールし、設定情報を同期する構成については、お手軽実装は難しいと思います。ディスク同期のためにクラスタ構成のためのクラスタソフトが必要となります。
LifeKeeper を使用した動作検証レポートも提供されていますので、そちらもご確認いただければと思います。
https://www.hulft.com/partner/collaboration/lk_for_linux_report