サイト内の現在位置を表示しています。

AWSにおけるHULFTのHAクラスター構築 ~HULFT IoTでファイル転送~ (Windows)

CLUSTERPRO オフィシャルブログ ~クラブロ~

はじめに

Amazon Web Services(以降、AWS)において、ファイル転送ミドルウェアであるHULFT IoTを冗長化する手順をご紹介します。
今回は、配信側ホストのIoTゲートウェイとそのIoTゲートウェイを管理するホストにHULFT IoTを使用します。
配信側ホストのHULFT IoT AgentをVPC外に配置し、集信側ホストのHULFT IoT ManagerをVPC内に配置します。

この記事の内容

1. HAクラスター構成

ファイルを送る配信側のIoTゲートウェイにはHULFT IoT Agentをインストールします。ファイルを受け取る集信側ホストにはHULFT、HULFT IoT Manager、PostgreSQLをインストールします。今回は集信側ホストをVPC内に配置し、集信側のホストを冗長化します。配信側のIoTゲートウェイはインターネットを経由したファイル転送を行うものとします。
また、今回はHULFT IoTのVersion 1.3.0を使用します。

HAクラスターにアクセスする配信側のIoTゲートウェイがインターネット経由でVPC内の集信側ホストにアクセスするため、HAクラスター構成はAWS Elastic IPリソースを用いた「EIP 制御による HAクラスター」がベースとなります。

2. HAクラスター構築手順

2.1. EIP制御によるHAクラスターの作成

HULFTを冗長化する際のベースとなる「EIP 制御による HAクラスター」を作成します。VPC及びCLUSTERPROの構成は以下の通りです。CLUSTERPROのフェールオーバーグループには「AWS Elastic IPリソース」と「ミラーディスクリソース」のみを登録します。

  • VPC
  • CIDR:10.0.0.0/16
  • Subnets
  • Subnet-1c:10.0.20.0/24
  • Subnet-2a:10.0.110.0/24
  • Subnet-2c:10.0.120.0/24

VPC

  • CLUSTERPRO
  • フェールオーバーグループ(failover)
  • AWS Elastic IPリソース
  • >IPアドレス:<Elastic IPアドレス>
  • ミラーディスクリソース
  • >データパーティション:Mドライブ
  • >クラスターパーティション:Rドライブ

フェールオーバーグループにAWS Elastic IPリソースとミラーディスクリソースを登録したら、各インスタンスでフェールオーバーグループが正常に起動できることを確認します。

2.2. HULFTのインストールとHAクラスターへの組み込み

2.2.1. HULFTのインストールと設定

HAクラスターを構成する各インスタンスにWindows版HULFT IoTをインストールします。インストール時の設定はすべてデフォルトを選択します。
HULFT IoTをインストールすると、HULFT IoT Manager、HULFT(HULFT IoT Manager)、PostgreSQL(HULFT IoT Manager)がインストールされます。

各インスタンスでサービスのスタートアップの種類を「自動」から「手動」に変更します。

HULFT IoT Managerのサービスが停止状態であることを確認し、手動起動に変更します。

C:\Users\Administrator>sc query "HULFT IoT Manager"
SERVICE_NAME: HULFT IoT Manager
        TYPE               : 10  WIN32_OWN_PROCESS
        STATE              : 1  STOPPED ← 停止状態
        WIN32_EXIT_CODE    : 0  (0x0)
        SERVICE_EXIT_CODE  : 0  (0x0)
        CHECKPOINT         : 0x0
        WAIT_HINT          : 0x0

C:\Users\Administrator>sc config "HULFT IoT Manager" start= demand
[SC] ChangeServiceConfig SUCCESS 

HULFT(HULFT IoT Manager)のサービスが停止状態であることを確認し、手動起動に変更します。

C:\Users\Administrator>sc query "HULFT(HULFT IoT Manager)"
SERVICE_NAME: HULFT(HULFT IoT Manager)
        TYPE               : 110  WIN32_OWN_PROCESS  (interactive)
        STATE              : 1  STOPPED ← 停止状態
        WIN32_EXIT_CODE    : 0  (0x0)
        SERVICE_EXIT_CODE  : 0  (0x0)
        CHECKPOINT         : 0x0
        WAIT_HINT          : 0x0

C:\Users\Administrator>sc config "HULFT(HULFT IoT Manager)" start= demand
[SC] ChangeServiceConfig SUCCESS 

PostgreSQL(HULFT IoT Manager)のサービスが停止状態であることを確認し、手動起動に変更します。

C:\Users\Administrator>sc query "PostgreSQL(HULFT IoT Manager)"
SERVICE_NAME: PostgreSQL(HULFT IoT Manager)
        TYPE               : 10  WIN32_OWN_PROCESS
        STATE              : 1  STOPPED ← 停止状態
        WIN32_EXIT_CODE    : 0  (0x0)
        SERVICE_EXIT_CODE  : 0  (0x0)
        CHECKPOINT         : 0x0
        WAIT_HINT          : 0x0

C:\Users\Administrator>sc config "PostgreSQL(HULFT IoT Manager)" start= demand
[SC] ChangeServiceConfig SUCCESS 

2.2.2. HAクラスター向けの設定変更

HULFT(HULFT IoT Manager)、PostgreSQL(HULFT IoT Manager)のデータをミラーディスク配下に変更します。

各インスタンスでHULFT(HULFT IoT Manager)の設定ファイルを修正します。
ファイルパス(デフォルト):C:\HULFT Family\hulftiot-manager\hulft\bin\hulft.ini

 [PATH]
   HULPATH=M:\hulftiot-manager\hulft\etc

HULFT(HULFT IoT Manager)のデータを設定ファイルで指定したフォルダにコピーします。
フェールオーバーグループが起動している現用系インスタンスで実行します。フェールオーバーグループが停止している場合、フェールオーバーグループを起動し、ミラーディスク(Mドライブ)にアクセスできる状態になってからコピーを行います。
フォルダパス(デフォルト):C:\HULFT Family\hulftiot-manager\hulft\etc

C:\Users\Administrator>xcopy /E "C:\HULFT Family\hulftiot-manager\hulft\etc" "M:\hulftiot-manager\hulft\etc\" 

次に、PostgreSQL(HULFT IoT Manager)サービスのプロパティから「実行ファイルのパス」を取得します。

[実行パス]
"C:\HULFT Family\hulftiot-manager\manager\postgresql\bin\pg_ctl.exe" runservice -N "PostgreSQL(HULFT IoT Manager)" -D "C:\HULFT Family\hulftiot-manager\manager\postgresql\data" -w

以下のコマンドを実行します。
取得した「実行ファイルのパス」をもとにPostgreSQL(HULFT IoT Manager)のデータ参照先をミラーディスク(Mドライブ)配下に変更します。

C:\Users\Administrator>sc config "PostgreSQL(HULFT IoT Manager)" binPath= "\"C:\HULFT Family\hulftiot-manager\manager\postgresql\bin\pg_ctl.exe\" runservice -N \"PostgreSQL(HULFT IoT Manager)\" -D \"M:\hulftiot-manager\manager\postgresql\data\" -w"
[SC] ChangeServiceConfig SUCCESS

PostgreSQL(HULFT IoT Manager)のデータを上記で指定したフォルダにコピーします。
フェールオーバーグループが起動している現用系インスタンスで実行します。フェールオーバーグループが停止している場合、フェールオーバーグループを起動し、ミラーディスク(Mドライブ)にアクセスできる状態になってからコピーを行います。
フォルダパス(デフォルト):C:\HULFT Family\hulftiot-manager\manager\postgresql\data

C:\Users\Administrator>xcopy /E "C:\HULFT Family\hulftiot-manager\manager\postgresql\data" "M:\hulftiot-manager\manager\postgresql\data\" 

次に、コピーしたHULFTの「システム環境情報設定ファイル」を編集します。
ファイルパス:M:\hulftiot-manager\hulft\etc\hulenv.cnf

# 自ホスト名
myhostname = manager.clusterpro.net ← HAクラスター用のホスト名(集信側)

2.2.3. HAクラスターへの組み込み

CLUSTERPROによるHULFT、PostgreSQL、HULFT IoTの起動・停止制御はCLUSTERPROのサービスリソースにより実現できます。フェールオーバーグループに「サービスリソース」を追加する際、サービス名欄にて「HULFT(HULFT IoT Manager)」「PostgreSQL(HULFT IoT Manager)」「HULFT IoT Manager」を選択してください。
なお「HULFT IoT Manager」は、以下のようにPostgreSQLに依存するように設定してください。

次に、監視リソースを登録します。
サービス監視リソースとは別に、PostgreSQL監視リソース、プロセス監視リソース、カスタム監視リソースを追加します。
監視リソースの回復動作は「最終動作を実行」を選択し、最終動作は「クラスタサービス停止とOS再起動」を選択します。
まず、各サービス監視リソースの回復動作を変更します。

次に、PostgreSQL監視リソースを登録します。事前に、PostgreSQL監視に使用するため環境変数に以下のPATHを追加します。

 C:\HULFT Family\hulftiot-manager\manager\postgresql\bin

モニタリソースのタイプは「PostgreSQL監視」を選択します。監視タイミングは「活性時」を選択し、対象リソースにはPostgreSQL(HULFT IoT Manager)の制御を行うサービスリソースを指定します。

次に、Javaプロセスを監視するリソースを登録します。モニタリソースのタイプは「プロセス監視」を選択します。監視タイミングは「活性時」を選択し、対象リソースにはHULFT(HULFT IoT Manager)の制御を行うサービスリソースを指定します。
監視対象のプロセス名に、Javaのプロセスを指定します。
監視対象のプロセス名:-jar "C:\HULFT Family\hulftiot-manager\manager\hulft-iot-manager.jar"

次に、HULFT(HULFT IoT Manager)を監視するリソースを登録します。モニタリソースのタイプは「カスタム監視」を選択します。監視タイミングは「活性時」を選択し、対象リソースにはHULFT(HULFT IoT Manager)の制御を行うサービスリソースを指定します。
「編集」を選択し、監視スクリプトを登録します。

監視スクリプトのサンプルは以下の通りです。監視はHULFTの「リモート生存監視コマンド(utlalivecheck)」で行います。

@echo off
SET ALIVE_CHECK="C:\HULFT Family\hulft8\bin\utlalivecheck"
REM 監視対象ポート
SET RCVPORT="40000"
SET OBSPORT="31000"
 (省略)
REM リモート生存監視コマンドによる生存確認
%ALIVE_CHECK% -p %RCVPORT%
SET RET=%ERRORLEVEL%
IF %RET% NEQ 0 (
 clplogcmd -m "recieve port error " -l ERR
 GOTO ERROR
)
%ALIVE_CHECK% -p %OBSPORT%
SET RET=%ERRORLEVEL%
IF %RET% NEQ 0 (
 clplogcmd -m "recieve port error " -l ERR
 GOTO ERROR
)

(省略)
exit 0
:ERROR
exit %RET%

リソースの追加が完了したら、設定の反映を行いフェールオーバーグループを起動します。

2.3. VPCの設定

HULFTでは転送相手となるホストをIPアドレスではなく、ホスト名で管理しています。そこで配信側のIoTゲートウェイがインターネット経由で集信側ホストとIoTゲートウェイを管理するマネージャーにホスト名でアクセスできるように、Amazon Route53のホストゾーンを設定します。Amazon Route53にて予めパブリックなドメインの取得は完了していることを前提として説明を続けます。
また、今回もAWSの操作はAWS CLIを使います。AWS CLIはAWSのマネジメントコンソール同様、CLUSTERPRO Xをインストールしている環境から実行する必要はなく、任意の環境から実行可能です。以降、すでにAWS CLIの実行に必要な設定等は完了していることを前提として説明を続けます。

取得したドメイン「clusterpro.net」のホストゾーンに対してAレコードを追加します。まずは以下のようにJSON形式のファイルを作成します。
※ファイルパス(任意):C:\resource.json

{
  "Comment": "",
  "Changes": [
    {
      "Action": "CREATE",
      "ResourceRecordSet": {
        "Name": "manager.clusterpro.net.", ← HAクラスター用のホスト名(集信側)
        "Type": "A",
        "TTL": 300,
        "ResourceRecords": [
          {
            "Value": "XXX.XXX.XXX.XXX" ← HAクラスター用のElastic IPアドレス
          }
        ]
      }
    }
  ]
}

作成したファイルを元に以下のコマンドを実行することで、Aレコードが追加できます。

$ aws route53 change-resource-record-sets --hosted-zone-id ABCDEFG1234567 --change-batch file://C:\recource.json
{
    "ChangeInfo": {
        "Status": "PENDING",
        "Comment": "",
        "SubmittedAt": "2017-07-25T05:30:41.416Z",
        "Id": "/change/C2JW6E9W0FF10T"
    }
}

以下のコマンドを実行することで、Aレコードが追加されたことを確認します。

$ aws route53 list-resource-record-sets --hosted-zone-id ABCDEFG1234567
{
    "ResourceRecordSets": [
        {
            "ResourceRecords": [
                {
                    "Value": "ns-633.awsdns-15.net."
                },
                {
                    "Value": "ns-507.awsdns-63.com."
                },
                {
                    "Value": "ns-1718.awsdns-22.co.uk."
                },
                {
                    "Value": "ns-1165.awsdns-17.org."
                }
            ],
            "Type": "NS",
            "Name": "clusterpro.net.",
            "TTL": 172800
        },
        {
            "ResourceRecords": [
                {
                    "Value": "XXX.XXX.XXX.XXX" ← HAクラスター用のElastic IPアドレス
                }
            ],
            "Type": "A",
            "Name": "manager.clusterpro.net.", ← HAクラスター用のホスト名(集信側)
            "TTL": 300
        }
    ]
}

2.4. HULFT IoT Agentのインストールと設定

2.4.1. HULFT IoT Agentのインストール

HULFT IoT Managerのアクティベーションキーを取得します。

HULFT IoT Agentをインストールします。インストール時にRoute53に登録した、HULFTの仮想ホスト名(manager.clusterpro.net)を指定します。

C:\Users\Administrator > Desktop\HULFT IoT Agent\HULFT_IoT_Agent_Windows_x86_64_V130\iot_agent\huliotsetup.exe --key <アクティベーションキー> --server manager.clusterpro.net

HULFT IoT Agentを起動し、HULFT IoT ManagerでAgentを認識していることを確認します。

2.4.2. 配信側の設定

HULFT IoT Managerの操作画面より、ユニットとプロファイルの登録を行います。
ユニットの登録画面にて、ユニット名と集信側ホスト名を登録します。集信側ホスト名にはAmazon Route53に登録したクラスター用ホスト名を指定します。

HULFT IoT ユニット作成

次にプロファイルの登録画面にて、登録したユニットを選択し、プロファイル名を指定します。

HULFT IoT ユニット作成

「転送設定」にてファイルIDを指定します。

集信側ホストの登録

2.4.3. 集信側の設定

現用系インスタンス(集信側)にてHULFT管理画面を立ち上げます。「詳細ホスト情報」のアイコンをクリックし、配信側の「エージェントID」を追加します。

次に「集信管理情報」のアイコンをクリックし、配信側で設定したものと同じファイルIDを登録します。ファイル名には受信したファイルを格納するパスを指定しますが、集信側はHAクラスター構成なのでMドライブ配下をファイルの格納先として指定します。

3. 動作確認

配信側のIoTゲートウェイにて、監視対象となっているファイルが正しく更新されていれば、監視のタイミングでファイルが転送されます。現用系インスタンス(集信側)のMドライブにファイルが作成されていればファイルの転送は成功です。

配信側のIoTゲートウェイからのファイル転送が確認できたら、フェールオーバーグループを移動します。フェールオーバーグループの移動が完了したら、配信側より再度ファイルを転送してみましょう。Mドライブ配下に新しいファイルが作成できていれば成功です。

さいごに

今回はHULFT IoTを冗長化する構成をご紹介しました。
これまで4回にわたりHULFTのHAクラスター構築手順をご紹介しましたがいかがでしたでしょうか。
今後もHULFTのHAクラスター構築についてアップデートがあれば、適宜ご紹介したいと思います。

お問い合わせ

本記事に関するお問い合わせは、popupお問い合わせ窓口までお問い合わせください。
  • 本記事で紹介しているスクリプトの内容についてのお問い合わせ、および、お客様環境に合わせたカスタマイズにつきましてはCLUSTERPRO導入支援サービスにて承っておりますので、上記窓口の"ご購入前のお問い合わせ"フォームまでお問い合わせください。