Simple Data Integrator 応用編：高可用性（High Availability）構成の構築手順と動作検証ガイド

# はじめに
近年、企業におけるシステム連携の重要性は日々高まっています。データ連携処理が一時でも停止すれば、業務の停滞や重要なデータの欠落を招き、信頼性や生産性に大きな影響を及ぼしかねません。
Simple Data Integrator（SDI）は、柔軟かつ汎用的なデータ連携を実現するツールとして、多くのシステムに導入可能です。シングルノード構成では、障害やメンテナンス時に一時的な停止リスクがありましたが、構成次第でSDIもHA構成を実現することが可能です。

# HA構成の全体像
Simple Data Integrator（SDI）の HA（高可用性）構成は、シンプルかつ実用的な冗長構成として設計することが可能です。
基本的な考え方としては、複数のノード（物理サーバまたは仮想マシン）に SDI をインストールし、共通の設定やリソースを共有できる環境を構築することが前提となります。

構成図：
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/560129/e3fa7bbb-2df8-4ed4-9975-6f0e1b2a5b5b.png)


■ 構成のポイント
1、共有ストレージの活用
　各種接続、マッピング、スケジューラーなどの設定を共有ストレージに保存することで、すべての SDI ノードが常に同じ設定を参照可能な状態を実現します。

2、アクティブ－スタンバイ方式
　1 台の SDI ノードが稼働中に、もう 1 台は待機状態（スタンバイ）となります。障害発生時にはスタンバイノードへ切り替わる構成です。

3、自動切替（フェイルオーバー）の実装
　切り替えは heartbeat による監視により自動で行われ、可用性の高いシステム運用を実現します。

# 前提条件
###  1. インフラ環境の前提

- 複数ノード（2台）のサーバまたは仮想マシンを用意
  - OSはSDIが対応するWindows

- 共有ストレージの用意
  - 対応例：SMB、NFS、Amazon FSx、OCI File Storage など
  - すべてのノードが、共有ストレージに対して 読み書き（READ/WRITE）可能であることが前提となります。
  
---
### 2. ソフトウェア環境の前提

- 同一バージョンのSDIをすべてのノードにインストールできること

- SDIの設定ディレクトリが共有ストレージに配置でき、
  各ノードから同じパスで参照可能であること

- 外部接続先（DB、APIなど）への接続できること

# 構築手順

ここでは、Simple Data Integrator（SDI）を高可用構成（HA）でセットアップするための基本手順を説明します。複数ノード構成を前提としています。

---

### ステップ 1：SDIの個別インストール

各ノードにSDIをインストールします。

- **注意：仮想マシンのコピー（クローン）を使用しないでください**
  - VMコピーによってSDIのエージェントIDが重複する可能性があります
  - 各ノードにはクリーンな環境で個別にSDIをインストールしてください

インストール手順につきまして下記の記事をご参照ください。
[Simple Data Integrator (SDI) 実践入門：SDIインストール](https://qiita.com/RiCCT/items/f2b1ce3b523064ac9d52 "Simple Data Integrator (SDI) 実践入門：SDIインストール")

### ステップ ２：環境設定の反映
各ノードで、設定ファイルの参照先を共有ストレージのパスに変更します。


#### プライマリノード SDI 設定
##### 1. メニュー **[プリファレンス] → [システム設定]** を選択し、設定画面を開きます。  
##### 2. システム設定画面にて、以下の項目を入力・保存します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/560129/e46abfbe-9d3e-4833-a5e5-021eb80166d5.png)


| No | 項目|説明|
|----|----|----|
| 1  | 設定ファイルフォルダー | 共有ストレージのパスを入力します。例：`\\fileservr\shared\sdi`|
| 2  | エージェント名 | このノードを識別するためのエージェント名を入力します。例：`AGENT01` |
| 3  | 高可用性構成| `On` に設定します。                                               |
| 4  | プライマリ or セカンダリー | このノードがプライマリであることを示すため、`プライマリ` を選択します。 |

##### ３. SimpleDataIntegratorWorker サービス再起動
3.1 「サービス管理ツール」を開きます。
3.2 SimpleDataIntegratorWorkerを右クリックして、[再起動]を選択します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/560129/864325bd-e11c-4072-81b8-29a138e87a39.png)


#### セカンダリーノード SDI 設定
##### 1. メニュー **[プリファレンス] → [システム設定]** を選択し、設定画面を開きます。  
##### 2. システム設定画面にて、以下の項目を入力・保存します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/560129/83488b13-6cb2-490b-bcf6-bc6c5e0654c3.png)

| No | 項目|説明|
|----|----|----|
| 1  | 設定ファイルフォルダー | 共有ストレージのパスを入力します。例：`\\fileservr\shared\sdi`|
| 2  | エージェント名 | このノードを識別するためのエージェント名を入力します。例：`AGENT02` |
| 3  | 高可用性構成| `On` に設定します。                                               |
| 4  | プライマリ or セカンダリー | このノードがセカンダリーであることを示すため、`セカンダリー` を選択します。 |
| 5  | フェイルオーバーポリシー | Failover Threshold　を 1　（単位：分） に設定 |

##### ３. SimpleDataIntegratorWorker サービス再起動
3.1 「サービス管理ツール」を開きます。
3.2 SimpleDataIntegratorWorkerを右クリックして、[再起動]を選択します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/560129/864325bd-e11c-4072-81b8-29a138e87a39.png)

# 動作確認

## プライマリノード正常時の動作確認

**プライマリノードのワーカーエージェントモニタリング画面**

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/560129/9f9f68d1-78d6-4a19-ac1e-ac09ff4ce061.png)

**セカンダリノードのワーカーエージェントモニタリング画面**

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/560129/72212d77-d679-4cfb-832e-6fe800781f9e.png)

プライマリノードのワーカーエージェントのステータスが `Running`、セカンダリノードのステータスが `Standby` となっていることを確認できます。

---

## フェイルオーバー動作確認

### プライマリノードのシャットダウン

**セカンダリノードのワーカーエージェントモニタリング画面**

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/560129/bfeebb34-64cd-422f-8c87-9c1894c8f9b4.png)

プライマリのワーカーエージェントは `NotActive`、設定された *Failover Threshold* の時間が経過すると、セカンダリのワーカーエージェントは `Running` の状態に切り替わります。

セカンダリノードのエージェントが昇格し、タスクを実行していることを確認できます。

---

## フェイルバック動作確認

### プライマリノードの起動

プライマリノードを起動し、ワーカーエージェントの起動が完了すると、プライマリのステータスは再び `Running`、セカンダリは `Standby` に戻っていることを確認できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/560129/e0b48927-cbfb-4ce6-b797-3e76edc10766.png)


# 注意点
1. 通常、ODI Studio を実行する OS ユーザーと、ワーカーエージェント（`SimpleDataIntegratorWorker` サービス）を実行する OS ユーザーは異なります。  
   そのため、**両方のユーザーが共有ストレージにアクセスできる権限を持っていること**を事前に確認してください。

# 補足説明
上記で説明した HA（高可用性）構成におけるホットスタンバイおよび自動フェイルオーバー機能は、Developer Edition および Enterprise Edition のみに対応しています。

Express EditionおよびStandard Edition などではこれらの機能は利用できませんので、
構成を検討する際はエディションの選定にもご注意ください。

以上です。

[Simple Data Integrator (SDI) 実践入門](https://qiita.com/RiCCT/items/3dc109ff82546459a8b0 "Simple Data Integrator (SDI) 実践入門")

# 参考資料
[SDI日本語公式サイト](https://ja.sdi.ricct.com/ "SDI日本語公式サイト")
[SDI English Official Website](https://sdi.ricct.com/ "SDI English Official Website")
[SDIシステム設定](https://ja.sdi.ricct.com/userguide/systemsetting/ "SDIシステム設定")