概要
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リソースが親リソースとなるようにリソースの依存関係を設定してください。




このトピックへフィードバック