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

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

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

はじめに

Amazon Web Services(以降、AWS)において、ファイル転送ミドルウェアであるHULFTを冗長化する手順をご紹介します。
HULFTをMulti-AZ構成で冗長化することで、AZ障害に対応できるようになります。
そもそも「なぜクラウド環境でも冗長構成が必要なのか?」については popupこちら を参照してください。

この記事の内容

1. HAクラスター構成

HULFTでファイルを転送するには、ファイルを送る配信側ホストとファイルを受け取る集信側ホストそれぞれにHULFTをインストールします。今回は配信側ホストも集信側ホストも同じVPC内に配置し、集信側のホストを冗長化します。

HAクラスターの構成図

HAクラスターにアクセスする配信側ホストも同じVPC内に配置されるため、HAクラスター構成はAWS仮想IPリソースを用いた「VIP制御によるHAクラスター」がベースとなります。

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

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

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

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

  • RouteTables
  • Main
  • >10.0.0.0/16 → local
  • >0.0.0.0/0 → igw-1234abcd(Internet Gateway)
  • >20.0.0.200 → eni-1234abcd(ENI ID)

VPC

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

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

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

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

HAクラスターを構成する各インスタンスにWindows版HULFT8をインストールします。インストール時の設定はすべてデフォルトを選択します。インストールが完了したら、各インスタンスのHULFTのサービスの状態を確認します。サービスが停止状態であることを確認し、サービスのスタートアップの種類を「自動」から「手動」に変更します。

C:\Users\Administrator>sc query HULFT

SERVICE_NAME: HULFT
        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 start= demand
[SC] ChangeServiceConfig SUCCESS

次に各インスタンスでHULFTの「システム環境情報設定ファイル」を編集します。
ファイルパス(デフォルト):C:\HULFT Family\hulft8\bin\hulft.ini

[PATH]
HULPATH=M:\hulft8\etc ← Mドライブ配下を指定(パスは任意)

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

フェールオーバーグループが起動している現用系インスタンスで「環境設定ファイル格納フォルダ」をシステム環境情報設定ファイルで指定したフォルダにコピーします。フェールオーバーグループが停止している場合、フェールオーバーグループを起動し、Mドライブにアクセスできる状態になってからコピーを行います。
フォルダパス(デフォルト):C:\HULFT Family\hulft8\etc

C:\Users\Administrator>xcopy "c:\HULFT Family\hulft8\etc" "M:\hulft8\etc\"
C:\HULFT Family\hulft8\etc\hulenv.cnf
C:\HULFT Family\hulft8\etc\hulft_screen.config
C:\HULFT Family\hulft8\etc\scholiday.dat
C:\HULFT Family\hulft8\etc\sddreqls.dat
C:\HULFT Family\hulft8\etc\service.dat
C:\HULFT Family\hulft8\etc\userhday.dat
6 個のファイルをコピーしました

次にコピーしたHULFTの「システム動作環境設定ファイル」を編集します。
ファイルパス:M:\hulft8\etc\hulenv.cnf

以下の項目はHULFTクラスタ対応機能として関連のあるものを抜粋しています。各項目の詳細はHULFTの製品に同梱されている「クラスタ対応 マニュアル」を参照してください。

# 集信ポートNo.
# 1 から 65535 まで
sddport = 32000

# サービスポートNo.
# 1 から 65535 まで
srvport = 31001

# サービスプロセスポートNo.
# 1 から 65535 まで、または設定値なし
srvcprocport = 40000 ← 追加(値は任意)

# スケジューラポートNo.
# 1 から 65535 まで、または設定値なし
schport = 50000 ← 追加(値は任意)

# 未配信ファイルのクリア
# 0: 削除しない
# 1: 削除する
delreqcpfile = 0 ← フェールオーバーの発生後、自動再配信をする場合

# 管理情報の2重化
# 0: 2重化しない
# 1: 2重化する
adjoinadminfile = 1

# 処理状況の出力およびイベントログ
# 0: 出力しない
# 1: 出力する
alertmsgput = 1

# 処理状況格納ファイル件数
# 100 から 1000000 まで
consolelogcnt = 10000

# サービス起動同期
# 0: 非同期
# 1: 同期
startsync = 1 ← 自動起動するように指定されたプロセスが正常に起動したことを確認してからHULFTのサービスを開始

# 自ホスト名
myhostname = cluster.vpc.local ← HAクラスター用のホスト名を指定

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

CLUSTERPROによるHULFTの起動・停止制御はCLUSTERPROのサービスリソースにより実現できます。フェールオーバーグループに「サービスリソース」を追加する際、サービス名欄にて「HULFT」を選択してください。

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

「編集」を選択し、監視スクリプトを登録します。監視スクリプトのサンプルは後述します。

回復動作にて「回復対象に対してフェイルオーバ実行」を選択し、回復対象にフェールオーバーグループを指定します。これにより監視スクリプトで異常を検知した際、すぐにフェールオーバーを行うことができます。

監視は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 (
 clplogm -m "recieve port error " -l ERR
 GOTO ERROR
)
(省略)
exit 0
:ERROR
exit %RET%

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

2.3. VPCの設定

HULFTでは転送相手となるホストをIPアドレスではなく、ホスト名で管理しています。そこでVPC内でHULFT同士がホスト名で通信できるように、Amazon Route53のプライベートホストゾーンを設定します。

AWSの操作はGUI(マネジメントコンソール)で行うことができますが、今回はAWS CLIを使ってプライベートホストゾーンを作成します。AWS CLIはAWSのマネジメントコンソール同様、CLUSTERPRO Xをインストールしている環境から実行する必要はなく、任意の環境から実行可能です。以降、すでにAWS CLIの実行に必要な設定等は完了していることを前提として説明を続けます。

プライベートホストゾーンを「vpc.local」という名称で作成します。

$ aws route53 create-hosted-zone --name vpc.local --caller-reference 2014-04-01-18:47 --vpc "VPCRegion=ap-northeast-1,VPCId=vpc-abcd1234" --hosted-zone-config "PrivateZone=true"
{
    "ChangeInfo": {
        "Status": "PENDING",
        "SubmittedAt": "2017-07-18T10:11:41.257Z",
        "Id": "/change/C1RK3EIFDT9QWF"
    },
    "HostedZone": {
        "ResourceRecordSetCount": 2,
        "CallerReference": "2014-04-01-18:47",
        "Config": {
            "PrivateZone": true
        },
        "Id": "/hostedzone/ABCDEFG1234567", ← ホストゾーンID
        "Name": "vpc.local."
    },
    "Location": "https://route53.amazonaws.com/2013-04-01/hostedzone/Z24O6P7FITDSJT",
    "VPC": {
        "VPCId": "vpc-abcd1234",
        "VPCRegion": "ap-northeast-1"
    }
}

作成したホストゾーンにAレコードを追加します。まずは以下のようにJSON形式のファイルを作成します。
ファイルパス(任意):C:\recource.json

{
  "Comment": "",
  "Changes": [
    {
      "Action": "CREATE",
      "ResourceRecordSet": {
        "Name": "cluster.vpc.local.", ← HAクラスター用のホスト名(集信側)
        "Type": "A",
        "TTL": 300,
        "ResourceRecords": [
          {
            "Value": "20.0.0.200" ← HAクラスター用の仮想IPアドレス
          }
        ]
      }
    },
    {
      "Action": "CREATE",
      "ResourceRecordSet": {
        "Name": "sendsvr.vpc.local.", ← 配信側のホスト名
        "Type": "A",
        "TTL": 300,
        "ResourceRecords": [
          {
            "Value": "10.0.10.100" ← 配信側のローカル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-18T10:28:18.391Z",
        "Id": "/change/C1EB293LM4637W"
    }
}

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

$ aws route53 list-resource-record-sets --hosted-zone-id ABCDEFG1234567
{
    "ResourceRecordSets": [
        {
            "ResourceRecords": [
                {
                    "Value": "ns-1536.awsdns-00.co.uk."
                },
                {
                    "Value": "ns-0.awsdns-00.com."
                },
                {
                    "Value": "ns-1024.awsdns-00.org."
                },
                {
                    "Value": "ns-512.awsdns-00.net."
                }
            ],
            "Type": "NS",
            "Name": "vpc.local.",
            "TTL": 172800
        },
        {
            "ResourceRecords": [
                {
                    "Value": "ns-1536.awsdns-00.co.uk. awsdns-hostmaster.amazon.com. 1 7200 900 1209600 86400"
                }
            ],
            "Type": "SOA",
            "Name": "vpc.local.",
            "TTL": 900
        },
        {
            "ResourceRecords": [
                {
                    "Value": "20.0.0.200" ← クラスタ用の仮想IPアドレス
                }
            ],
            "Type": "A",
            "Name": "cluster.vpc.local.", ← クラスタ用のホスト名(集信側)
            "TTL": 300
        },
        {
            "ResourceRecords": [
                {
                    "Value": "10.0.10.100" ← 配信側のローカルIPアドレス
                }
            ],
            "Type": "A",
            "Name": "sendsvr.vpc.local.", ← 配信側のホスト名
            "TTL": 300
        }
    ]
}

2.4. HULFTの設定

HULFTでファイル転送を行うための設定をします。配信管理情報のファイルIDと集信管理情報のファイルIDは完全に一致している必要があります。

HULFTの設定イメージ

【参考】
HULFTの基本的な解説は「DMS Cube」を参照してください。
popupDMS Cube - 第1回:HULFTの基本機能

2.4.1. 配信側の設定

配信側のインスタンスにもHULFTをインストールします。インストール時に入力する項目は集信側と同じくデフォルトを選択します。インストールが完了したら、HULFTの「システム動作環境設定ファイル」を編集します。
ファイルパス(デフォルト):C:\HULFT Family\hulft8\etc\hulenv.cnf

# 自ホスト名
myhostname = sendsvr.vpc.local ← 配信側のホスト名

次にHULFT管理画面より設定を行います。最初に「詳細ホスト情報」のアイコンをクリックします。

次に、集信側のホスト名を追加します。

次に「転送グループ情報」のアイコンをクリックし、転送グループIDを登録します。ホスト名は登録しておいた集信側のホスト名を選択し、ホストを追加します。

次に「配信管理情報」のアイコンをクリックし、ファイルIDを登録します。ファイル名に転送したいファイルを指定します。転送グループIDは登録しておいたものを選択します。

  • 補足:登録モードは任意ですが今回は「置き換え」を選択します。

2.4.2. 集信側の設定

現用系インスタンス(集信側)にてHULFT管理画面を立ち上げます。「詳細ホスト情報」のアイコンをクリックし、配信側のホスト名を追加します。
配信側と同じ手順なので画面イメージは省略します。

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

3. 動作確認

配信側のHULFT管理画面より「配信管理情報」のアイコンをクリックし、登録してあるファイルIDを選択します。右クリックで表示されるメニューから「配信要求」を選択します。

配信の確認画面が表示されるので「配信要求」ボタンをクリックします。

配信要求が成功するとその旨を伝えるダイアログが表示されます。

現用系インスタンス(集信側)のMドライブにファイルが作成されていればファイルの転送は成功です。

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

さいごに

今回は同じVPC内に配信側と集信側のホストを配置し、集信側のホストを冗長化する構成をご紹介しました。同じ手順で配信側も冗長化できます。次回は配信側のホストをVPCの外に配置した場合の構成についてご紹介します。

お問い合わせ

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