こんにちは。SCSKの津田です。
今回は、Azureの環境で仮想IPアドレスをどのように機能させるかについてご紹介します。
クラウド環境では、オンプレミスで当たり前に使えていた「仮想IP(VIP)」が、実はそのままでは使えないケースが多くあります。
AWSでは、第4回でご紹介したように、EC2やRoute 53といったリソースを活用することで、クライアントからの接続を実現していました。
Azureでは、AWSとは異なるアプローチで仮想IPを実現しています。
本記事では、実際に仮想IPを実装し、簡単な動作確認を行ってみました。
Azure環境では仮想IPが使えない?ではどうする?
仮想IPは、HAクラスタ構成において非常に重要な役割を果たします。
仮想IPは現在稼働しているノード(アプリケーションが実行されているノード)に常にマッピングされ、クライアントは常にこの仮想IPアドレスでアクセスできることで、障害時でもクライアントは意識することなくシステムを利用することができます。
しかし、Azure の仮想ネットワークでは LifeKeeper で設定した仮想IPがオンプレや仮想環境のようには認識されません。
そのため、通常では仮想IPを使用したネットワーク通信や保護はできません。
この問題を解決するため、Azureではロードバランサー、LifeKeeperのLB Health Check Kitを使用することで仮想IPを機能させます。
クラスタを同一リージョン内に構築する場合、内部ロードバランサー(Internal Load Balancer、ILB)でフロントエンドIPを設定し、バックエンドプールに稼働系ノードと待機系ノードのNICの IP アドレスに設定し、そのIPアドレス宛に正常性プロープを行います。
ILBのフロントエンドIPは仮想IPとして活用でき、クライアントからの仮想IP宛のネットワーク通信はILBに到達し、クラスタに負荷分散されます。負荷分散は正常性プローブで応答が返り正常な結果となるノードにのみ行われます。
この正常性プローブに対しノード側で応答するのがLB Health Check Kit (LB Health Checkリソース) の機能であり、
LifeKeeperによってLB Health Check Kitはアクティブ側のみで稼働し、正常性プローブに応答する状態となっています。
よって、クライアントからのネットワーク通信はILB経由で常にアクティブなノードに転送され、LifeKeeperによってアクティブノードに付与された仮想IPで接続要求を受信し応答を返します。
SIOSオンラインマニュアルには、仮想IPアドレスを利用したクライアントからの接続フローがイメージ図付きで解説されています!
■Windows
Azure 特有の設定について – LifeKeeper for Windows LIVE – 8.11.0
■Linux
Azure 上の LifeKeeper 特有の設定について – LifeKeeper for Linux LIVE – 9.9.1
「プローブ(probe)」とは、「探査」を意味する用語であり、Azure 正常性プローブとは、バックエンドプールの正常性を監視するためのヘルスチェックのような機能です。
正常性プローブへの応答がない仮想マシンについては適切に検出し、新しい接続の送信を停止します。
クラウド環境でロードバランサーの負荷分散対象インスタンスへのヘルスチェックプローブを待ち受けて応答する仕組みを提供します。
参考:https://docs.us.sios.com/sps/8.11.0/ja/topic/lifekeeper-for-linux-lbhc
検証した構成
今回は実際に仮想IPを実装してみました。
以下はノード・ネットワーク構成のイメージ図となります。
※「LBHC」= LB Health Checkの略
■OS:Windows Server 2022 Datacenter
■LifeKeeper:LifeKeeper for Windows 8.11.0
※Windowsでの注意点として、LifeKeeperで仮想IPを付与するNICとILBのバックエンドプールとして指定するNIC(IP)を別にする必要があります。
仮想IP実装に必要となる設定
Azureで仮想IPを機能させる場合、ロードバランサー、IPリソース、LBHCリソースの作成がポイントになります。
今回の検証にあたって作成した内容をそれぞれご紹介します。
※WindowsOSで検証を行った際の内容となります。
※環境により各設定値は変わる場合があります。
ロードバランサー作成
前提:仮想ネットワーク、仮想マシンの作成が完了していること。
- Azure Portalの ホーム> 負荷分散とコンテンツ配信 > ロードバランサー の画面から[作成する]をクリックし、
[Standard Load Balancer]を選択 。
- 以下の通り各項目を記入、選択し、[次:フロントエンドIP構成>]をクリック。
- [フロントエンドIP構成の追加]をクリックすると、画面右に「フロントエンドIP構成の追加」が表示されるため、
以下の通り各項目を記入、選択した後、[保存]⇒[次:フロントエンドIP構成>]をクリック。
- [バックエンドプールの追加]をクリック。
- [バックエンドプールの追加]で以下の通り各項目を記入、選択し、[追加]をクリック。
画面右側に「バックエンドプールへのIP構成の追加」が表示されるため、バックエンドプールに指定するIPアドレスを選択し[追加]⇒[保存]をクリック。
- [次:インバウンド規則>]をクリック。
- [負荷分散規則の追加]をクリックすると画面右側に[負荷分散規則の追加]が表示される。
[正常性プローブ]で[新規作成]をクリックし、以下の通り各項目を記入し、[保存]をクリック。
※3 クライアントからクラスターへ向けた通信を、IP リソース(VIP)宛のパケット通信とする必要があるため、[フローティングIP] は有効にする。
IPリソース作成
前提:OSの設定、LKインストール、コミュニケーションパスの作成が完了していること
- LifeKeeperのGUIで以下赤枠の[+]ボタンをクリックします。
- ウィザードに従い、以下の表のとおり設定値を入力します。
IPアドレス(作成) プライマリサーバ LKNODE01 バックアップサーバ LKNODE02 保護するアプリケーション IPアドレス IPアドレスのタイプ 仮想IPアドレス IPアドレス 10.10.5.200 ※1 サブネットマスク 255.255.255.255 ※2 IPリソースタグ名 ip-10.10.5.200 ネットワーク接続 Ethernet 2 ※3 ローカル・リカバリー いいえ IPアドレス(拡張) サブネットマスク 255.255.255.255 ※3 ネットワーク接続 Ethernet 2 ターゲット・リストアモード 有効 ターゲット・ローカルリカバリー いいえ バックアップの優先順位 10
※2 ルーティングの競合を避けるため 255.255.255.255 を設定。
※3 仮想IPを付与するNICとして、ILBのバックエンドプールに指定したNIC(IP)とは別のNICを指定。
LBHCリソース作成
前提:OSの設定、LKインストール、コミュニケーションパスの作成が完了していること
- LifeKeeperのGUIで以下赤枠の[+]ボタンをクリックします。
- ウィザードに従い、以下の表のとおり設定値を入力します。
IPアドレス(作成) プライマリサーバ LKNODE01 バックアップサーバ LKNODE02 保護するアプリケーション LB Health Check 応答デーモンポート 12345 ※1 応答デーモンメッセージ 空欄 LB Health Checkリソースタグ名 lbhc-12345 IPアドレス(拡張) LB Health Checkリソースタグ名 lbhc-12345 バックアップの優先順位 10
仮想IP機能検証
クラスタ内の各ノードでIISの導入およびIISリソース作成を行い、仮想IPの簡単な動作検証を行いました。
事前準備
- クラスタ内各ノードのIISのドキュメントルートに、サーバ名を記載したテストページ(htmlファイル)を格納します。
<LKNODE01 %SystemDrive%\inetpub\wwwroot\test_page.html>
<LKNODE02 %SystemDrive%\inetpub\wwwroot\test_page.html>
動作確認
- LKNODE01がアクティブ
クライアント端末から仮想IP宛にIISのテストページにアクセスすると、想定通りLKNODE01のテストページが表示されました。
- LKNODE02がアクティブ
クライアント端末から仮想IP宛にIISのテストページにアクセスすると、想定通りLKNODE02のテストページが表示されました。
どちらも想定通りの結果となり、仮想IPが機能していることが確認できました!
ちなみに…
lbhcリソースを削除して、IISのテストページにアクセスしてみたところ、
lbhcリソースのヘルスプローブへの応答がなくなるためか、テストページに到達できなくなりました。
注意点
ここまでご紹介した仮想IPの実装に関して、以下点にご注意ください。
- WindowsとLinuxでクライアントからの接続フロー・設計・設定が異なるため、事前のマニュアル確認を行う。
■Windows
Azure 特有の設定について – LifeKeeper for Windows LIVE – 8.11.0
■Linux
Azure 上の LifeKeeper 特有の設定について – LifeKeeper for Linux LIVE – 9.9.1 - Windowsでは、LifeKeeperで仮想IPを付与するNICとILBのバックエンドプールとして指定するNIC(IP)を別にする。
- IPリソース作成時、対象サブネット(本検証では10.10.5.0/24)に対するルーティングの競合を避けるため、
「255.255.255.255」で設定する。 - クライアントからクラスターへ向けた通信を、IP リソース(VIP)宛のパケット通信とする必要があるため、
[フローティングIP] は有効にする。 (アクティブノードからの応答も仮想 IP から送信される) - ホスト名に小文字が含まれている場合、LifeKeeper で不具合が発生する恐れがあるため、ホスト名は大文字で作成する。
⇒ 当初ホスト名に小文字を含めてLifeKepperを構築していたところ、LBHCリソースの作成でエラー(No140321)が発生。
ホスト名を全て大文字にすることで事象解消。
- OSの設定漏れに注意。
Azure固有のOS設定が必要のため、以下の対応漏れに注意する。
■Windows
OS の設定 – LifeKeeper for Windows LIVE – 8.11.0
■Linux
OSの設定 – LifeKeeper for Linux LIVE – 9.9.1
さいごに
今回はAzureにおいて、LifeKeeperとILBを活用して仮想IPを機能させる方法をご紹介しました。
本記事を通じて、Azureでも仮想IPを機能させることができ、障害時にもクライアントが意識することなくシステムを継続利用できることをご理解いただけましたら幸いです!