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

AWSにおけるHULFTのHAクラスター構築 ~HULFT-HUBでファイル転送を中継~ (Linux)

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

はじめに

Amazon Web Services(以降、AWS)において、ファイル転送ミドルウェアであるHULFTを統合管理するHULFT-HUBを冗長化する手順をご紹介します。HULFT-HUBをMulti-AZ構成で冗長化することで、AZ障害に対応できるようになります。

この記事の内容

1. HAクラスター構成

HULFTでファイルを転送するには、ファイルを送る配信側ホストとファイルを受け取る集信側ホストそれぞれにHULFTをインストールします。今回は配信側ホストをオンプレミス側(VPC外)に配置し、集信側ホストをVPC内に配置します。また、データ転送の中継役としてHULFT-HUBをVPC内に配置します。
今回はHULFT-HUBを冗長化する手順をご紹介します。HULFTの集信側ホストを冗長化する手順はpopup2017/9/15記事を参照ください。

HAクラスターの構成図

HAクラスターにアクセスする配信側ホストがインターネット経由でVPC内のHULFT-HUBにアクセスするため、AWS Elastic IPリソースを使用します。また、集信側ホストからのHULFT-HUBへのアクセスはVPC内で完結するため、AWS仮想IPリソースを使用します。そのためクラスター構成は「EIP制御によるHAクラスター」と「VIP制御によるHAクラスター」の混合構成(EIP制御およびVIP制御によるHAクラスター)となります。

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

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

HULFTを冗長化する際のベースとなる「EIP制御およびVIP制御によるHAクラスター」を作成します。VPC及びCLUSTERPROの構成は以下の通りです。CLUSTERPROのフェールオーバーグループには「AWS Elastic IPリソース」と「AWS仮想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
  • Subnet-3a:10.0.111.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 Elastic IPリソース
  • >IPアドレス:<Elastic IPアドレス>
  • AWS仮想IPリソース
  • >IPアドレス:20.0.0.200
  • ミラーディスクリソース
  • >データパーティション:/dev/xvdf2
  • >クラスターパーティション:/dev/xvdf1
  • >クラスターパーティション:/mnt/md

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

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

2.2.1. HULFT-HUBのインストール

HAクラスターを構成する各インスタンスにHULFT-HUBをインストールします。HULFT-HUBの製品に同梱されている「HULFT-HUB Server導入マニュアル」のクラスタ環境にインストールする場合の設定例を参考にインストールを行ってください。
今回は以下のような構成でインストールを行います。紐付けるホスト名はインターネット経由でアクセス可能なもの(前回と同様「cluster.clusterpro.net」)を指定します。

  • HULFT-HUB Server 実行モジュール格納ディレクトリ(HULHUBEXE):
    /usr/local/hulfthub/bin
  • HULFT-HUB Server 環境設定ファイル格納ディレクトリ(HULHUBETC):
    /mnt/md/hulfthub/etc
  • 自ホスト名:cluster.clusterpro.net

2.2.2. HULFT-HUBのHAクラスターへの組み込み

HULFT-HUBの起動・停止制御はCLUSTERPROのexecリソースを使用します。execリソースで設定する以下のスクリプト(開始スクリプト、停止スクリプト)は参考です。

開始スクリプト

#! /bin/sh
HULHUBEXE=/usr/local/hulfthub/bin
export HULHUBEXE
PATH=$HULHUBEXE:$PATH
export PATH
HULHUBETC=/mnt/md/hulfthub/etc
export HULHUBETC

hubcluster -start

停止スクリプト

#! /bin/sh
HULHUBEXE=/usr/local/hulfthub/bin
export HULHUBEXE
PATH=$HULHUBEXE:$PATH
export PATH
HULHUBETC=/mnt/md/hulfthub/etc
export HULHUBETC

hubcluster -stop

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

監視はHULFT-HUBの生存確認コマンド(hubcluster -status)で行います。以下の監視用スクリプトは参考です。

#! /bin/sh
HULHUBEXE=/usr/local/hulfthub/bin
export HULHUBEXE
PATH=$HULHUBEXE:$PATH
export PATH
HULHUBETC=/mnt/md/hulfthub/etc
export HULHUBETC

hubcluster -status -msg
exit $?

今回の例では、HULFT-HUBを「起動同期モード」で起動させ、生存確認コマンドで監視します。詳しくはHULFT-HUBの製品に同梱されている「HULFT-HUB Server クラスタ対応 マニュアル」を参照してください。

HULFT-HUBのクラスターへの組み込みが完了したら、各インスタンスでフェイルオーバーグループが正常に起動できることを確認します。

2.3. VPCの設定

配信側ホスト、HULFT-HUB、集信側ホストはそれぞれホスト名でアクセスするため、今回の構成では3つのホストゾーン(パブリックなホストゾーンが1つ、プライベートなホストゾーンが2つ)が必要となります。

2.3.1 パブリックなホストゾーンの設定(clusterpro.net)

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

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

{
  "Comment": "",
  "Changes": [
    {
      "Action": "CREATE",
      "ResourceRecordSet": {
        "Name": "cluster.clusterpro.net.", ← HAクラスター用のホスト名(HULFT-HUB)
        "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": "cluster.clusterpro.net.", ← HAクラスター用のホスト名(HULFT-HUB)
            "TTL": 300
        }
    ]
}

2.3.2 プライベートなホストゾーンの設定(vpc.local)

集信側ホストにホスト名でアクセスできるようにAmazon Route53のプライベートホストゾーンを設定します。
プライベートホストゾーンを「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/HIJKLMN1234567", ← ホストゾーン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": "hulft.vpc.local.", ← 集信側のホスト名
        "Type": "A",
        "TTL": 300,
        "ResourceRecords": [
          {
            "Value": "10.0.111.100" ← 集信側のローカルIPアドレス
          }
        ]
      }
    }
  ]
}

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

$ aws route53 change-resource-record-sets --hosted-zone-id HIJKLMN1234567 --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 HIJKLMN1234567
{
    "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": "10.0.111.100" ← 集信側のローカルIPアドレス
                }
            ],
            "Type": "A",
            "Name": "hulft.vpc.local.", ← 集信側のホスト名
            "TTL": 300
        }
    ]
}

2.3.3 プライベートなホストゾーンの設定(clusterpro.net)

集信側ホストがHULFT-HUBにホスト名でアクセスできるように Amazon Route53のプライベートホストゾーンを設定します。
プライベートホストゾーンを「clusterpro.net」という名称で作成します。

$ aws route53 create-hosted-zone --name clusterpro.net --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/OPQRSYZ1234567", ← ホストゾーン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.clusterpro.net.", ← HAクラスター用のホスト名(HULFT-HUB)
        "Type": "A",
        "TTL": 300,
        "ResourceRecords": [
          {
            "Value": "20.0.0.200" ← HAクラスター用の仮想IPアドレス
          }
        ]
      }
    }
  ]
}

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

$ aws route53 change-resource-record-sets --hosted-zone-id OPQRSYZ1234567 --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 OPQRSYZ1234567
{
    "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" ← HAクラスター用の仮想IPアドレス
                }
            ],
            "Type": "A",
            "Name": "cluster.clusterpro.net.", ← HAクラスター用のホスト名(HULFT-HUB)
            "TTL": 300
        }
    ]
}

2.4. HULFT-HUBの設定

HULFT-HUBの設定は「HULFT-HUB Manager」で行います。HULFT-HUB Managerのセットアップの手順は割愛します。詳しくは「HULFT-HUB Manager 導入マニュアル」を参照してください。

HULFT-HUB Managerにて「ホスト情報登録」を行います。

CLUSTERPROのWebManagerにてHULFT-HUBを起動し、現用系のHULFT-HUBにログインできることを確認します。
HULFT-HUB Managerの管理画面が表示できたら、クライアント(配信側ホストと集信側ホスト)を登録します。
VPC内のHULFT-HUBからオンプレの配信側ホストへは「hulft.somedomain.com」というホスト名でアクセスできるものとし、以下のように登録します。

集信側ホストへは「hulft.vpc.local」というホスト名でアクセスできるため、以下のように登録します。

クライアントの登録が完了すると構成図に1つのサーバー(真ん中のアイコン)と2つのクライアント(左右のアイコン)が表示されます。

構成図のサーバーのアイコンを選択し、[システム管理]メニューの[転送情報]をクリックします。転送情報画面が表示されたら、配信管理情報を新規作成します。

次に集信側クライアントを追加します。

2つのクライアントの登録が完了すると転送マップに2つのアイコンが表示されます。

集信管理情報の設定を行ったら、経路を設定します。[経路設定メニュー]の[HUB経由]を選択し、[自動配置]をクリックすると、中継サーバーのアイコンが追加されます。

転送情報の作成が完了したら、配信要求を行いファイルが転送できることを確認します。

3. 動作確認

配信側ホストのファイルがHULFT-HUBを経由して、集信側ホストに転送できていることが確認できたら、フェールオーバーグループを移動します。フェールオーバーグループの移動が完了したら、配信側ホストのファイルを再度転送してみましょう。HULFT-HUBを経由して集信側ホストのファイルが転送できていれば成功です。

さいごに

今回はVPC内でHULFT-HUBを冗長化する構成をご紹介しました。
次回は配信側ホストにIoTデバイスを使用する構成についてご紹介します。

お問い合わせ

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