概要
AWS で LifeKeeper を構成する場合は通常 Recovery Kit for EC2 もしくは Recovery Kit for Route 53 を使用します。いずれも AWS CLIを使用してAWSのサービスを制御します。しかし、以下のようなケースではこれらの KIT が使えないケースも考えられます。
- セキュリティ的に厳しいなど AWS CLI で構成変更を行いたくない。
- インターネットに接続していない環境でクライアントからDNS名のアクセスで使用したい(Route 53は現時点でVPC endpoint(PrivateLink)未対応)。
このようなケースの場合、AWS の Network Load Balancer (NLB) と LB Health Check Kit を組み合わせることで、Azure や GCP と同様なロードバランサーを用いた切り替え方法が利用できます。クライアントからのアクセスは NLBの DNS 名にアクセスし(AWS 内部で解決)、接続先の切り替えは、NLB のヘルスチェックと LB Health Check を組み合わせて使用することでプローブに成功したノードにトラフィックが転送されます。
AWSロードバランサー特有の設定
Network Load Balancer の導入
Network Load Balancer (NLB) は受信したトラフィックをターゲットグループに登録したインスタンスに転送します。AWS の NLB の IP アドレスは Availability Zone (AZ) ごとのサブネットに割り当てられます。よって、2 つの Availability Zone を選択することで冗長性を確保できます。ただし、NLB の IP アドレスは各サブネットに割り当てられるので、クライアントからのアクセスには使用できません。よって、NLB に割り当てられた IP アドレスでなく NLB の DNS 名でアクセスすることによって、どちらかの IP アドレスに変換され、片方の Availability Zone が利用できないときでも対応できるようになります。デフォルトでは NLB の IP アドレスに転送されたトラフィックは、そのサブネットにあるターゲットにしか転送できません。クロスゾーン負荷分散を有効にすることで、別のサブネットのターゲットにも転送できるようになります。
クライアントからの接続
- Client が、アプリケーション(上図では Listener)へ接続するため、NLB の DNS 名とアプリケーションのポート番号(上図では XXXX-nlb1-YYYY.elb.region.amazonaws.com と 1521)で接続を試みます。DNS 名は AWS 内部の Route 53 経由で NLB の サブネットの IP アドレスに変換され、これを用いて NLB にアクセスします(上記例では 10.0.1.151 もしくは 10.0.2.181)。
- NLB には、プロトコルとポートに対してどのターゲットグループへ転送するかが登録されています。このとき、どのノードでヘルスプローブポート(12345)が応答するかを確認します。
- Active なノードではヘルスプローブに応答します。LifeKeeperによって、LBHC はどちらかのマシンでのみアクティブになっているため、NLB の正常性プローブは必ず Active 側のみが正常であることを検知します。結果として、NLBは常にノードのアクティブ側に要求を割り当てます(上の図では、AWSNODE1 がアクティブです)。
- NLBは、クライアントからの接続要求を、アクティブ側に転送します。そして接続要求は、宛先アドレスが NLB のアドレスからノードの実アドレス(上の図では 10.0.1.10 )に書き換えられて、アクティブ側のノードに到達します。
利用のための要件
本構成を利⽤するためには、環境を準備する段階で満たすべきいくつかの要件があります。以下に AWS 環境とその上に作成するインスタンスに関する要件をまとめます。
AWS 環境の要件
サービスを提供するための基盤となる環境を AWS 上に作成します。本構成を利用するための要件は以下の通りです。
Amazon Virtual Private Cloud (VPC)
- クラスターノードを配置する VPC を AWS 内に設定する必要があります。
- クライアントを配置する VPC は、IP アドレスでアクセスできるようになっていればクラスターノードを配置する VPC と同じでも別リージョンでもかまいません。
- クラスタノードのアプリケーションには実IP宛で届くので、各アプリケーションは実IPが切り替わっても動作する必要があります。すなわち、構成ファイルがクラスタノードごとに設定でない場合は、DNS 名を各クラスタノードのローカルホスト (c:\Windows\System32\drivers\etc\hosts ) で
<実IP> lkvip
のように登録し、この DNS名(この例では lkvip) で仮想アドレス設定部分を構成できる必要があります。 - Recovery Kit for EC2 もしくは Recovery Kit for Route 53 との併用は現在サポートされませんが、他の Recovery Kit はサポートされます。
AWS ロードバランサー
- ロードバランサーには Network Load Balancer(NLB) を使用します。
- クラスターノードがそれぞれ異なる Availability Zone に配置される場合はロードバランサーの属性でクロスゾーン負荷分散を有効にする必要があります。
LifeKeeper ソフトウェアの要件
各サーバーに同じバージョンの LifeKeeper ソフトウェアとパッチをインストールする必要があります。本構成で必要な Application Recovery Kit (ARK) は以下の通りです。
- LB Health Check Kit
構築手順
概要で説明した構成図を構築するための一般的な手順を解説します。
Network Load Balancer を作成
以下の表に従って Network Load Balancer を作成します。
Network Load Balancer | |
---|---|
ロードバランサー名 | 任意 |
スキーム | 内部 |
IP アドレスタイプ | IPv4 |
ネットワークマッピング | クラスターノードが配置されている Availability Zone のサブネットを選択 |
セキュリティグループ | リスナーポートとヘルスチェックポートの両方で登録済みターゲットと通信できるようにします |
リスナー | プロトコル TCP でリスナーポートを選択します。Oracle の場合は 1521, PostgreSQL は 5432 などです。そして転送するターゲットグループを選択します |
ターゲットグループ | |
---|---|
ターゲットタイプ | インスタンス |
プロトコル:ポート | TCP、ポートは転送されるポートを指定する。Oracle の場合は 1521, PostgreSQL は 5432 などです |
IP アドレスタイプ | IPv4 |
ヘルスチェックプロトコル | TCP |
ヘルスチェックの詳細 | 上書き LBHC のポート 正常のしきい値 2 非正常のしきい値 3 タイムアウト 5秒 間隔 10秒 |
使用可能なインスタンス | 転送されるクラスターノードを選択 |
選択したインスタンスのポート | 転送されるポートを指定する。Oracle の場合は 1521, PostgreSQL は 5432 などです |
クロスゾーン負荷分散を有効にする
ロードバランサー作成後は無効になってますので、「ロードバランサー属性を編集」から有効にします。
ヘルスチェックの詳細で設定するパラメータ一の調整
上記サンプルで使用した値を設定することで、スイッチオーバー終了後、 (正常のしきい値-1) x (間隔) = (2-1) × 10 = 10 秒後にプライマリーサーバーでトラフィックの転送が始まります。もう少し速くしたい場合は、間隔を5にすることで5秒後になります。また、スイッチオーバー開始後、(非正常のしきい値) x (タイムアウト) = 3 × 5 = 15 秒後にセカンダリーサーバーでトラフィック転送が止まります。スイッチオーバーにかかる時間の範囲で収まるように調整します。
LifeKeeper の準備
「利用のための要件」を満たす環境を構築してください。それぞれのインスタンスに LifeKeeper をインストールして、node1/node2 間にコミュニケーションパスを作成してください。また必要に応じてスプリットブレイン防止のために Quorum/Witness を設定します。
IP リソース作成
Oracle リソースなど IP リソースが必要なリソースを使用する場合は、IP リソースを実IPアドレスで作成してください。ロードバランサーから実IPアドレス宛にトラフィックが転送されます。
保護するサービスのリソース作成
保護するサービスのためのリソースを作成してください。リソース作成に IP リソースが要求される場合は、上述の「 IP リソース作成 」で作成したリソースを指定してください。実 IP アドレスを使用する上で考慮すべきことを以下に示します。
Oracle リソースを使用する場合
Oracle のインストール を参考に、Oracle Home 非共有構成で使用する場合は、Oracle のインストール時の Listener 設定時に各ノードの Host を実 IP アドレスで構成してください。Oracle Home 共有構成で使用する場合はクライアントからアクセスする NLB の DNS 名は使用できませんので、例えば ローカルホスト(c:\Windows\System32\drivers\etc\hosts )に各クラスタノードで
<実IP> oravip
のように DNS 名を登録し、この DNS 名で Listener 設定することで Listener を構成することができます。
IIS リソースを使用する場合
IIS 構成の考慮事項 の「実IPを保護するIPアドレスリソースと組み合わせる」を参考に実IPアドレスを構成してください。
LB Health Check リソース作成
LB Health Check リソースを作成します。Reply daemon port は Network Load Balancer のヘルスチェックの詳細で指定したポートを指定して作成します。LB Health Check リソースが親リソースとなるようにリソースの依存関係を設定してください。
このトピックへフィードバック