VMware NSX Advanced Load Balancer(以降、NSX ALBと表記)の Azure 上への展開手順ご紹介、本記事で第5回目になります。
前回記事では データプレーンである Service Engine(以降、SEと表記) の設定を定義する Service Engine Group(以降、SE Groupと表記) について掲載しました。
VMware NSX Advanced Load Balancer on Azure その4 ~Service Engine Group 設定~ - JBS Tech Blog
その他の記事は以下リンク先をご参照ください。
- VMware NSX Advanced Load Balancer on Azure その1 ~コントローラの展開~ - JBS Tech Blog
- VMware NSX Advanced Load Balancer on Azure その2 ~コントローラクラスタの構成~ - JBS Tech Blog
- VMware NSX Advanced Load Balancer on Azure その3 ~Cloud 設定~ - JBS Tech Blog
今回はサーバ負荷分散設定(Pool/VIP/Virtual Service)についてご紹介します。
サーバ負荷分散コンポーネント
NSX ALB では以下のコンポーネントを構成して、サーバ負荷分散を実装します。
Pool
クライアントからの接続が負荷分散されて到達するサーバ群を定義します。
サーバが接続を待ち受けるポート番号、負荷分散アルゴリズム、パーシステンス設定など負荷分散動作に関する設定を行います。
VIP(仮想 IP アドレス)
クライアントが接続するIPアドレスを定義します。
Azure Cloud では、プライベート VIP とパブリック VIP を設定可能です。
プライベート IP でアクセス可能な場合、プライベート VIP を設定します。
インターネットからアクセス可能にするにはパブリック VIP を設定します。
設定された VIP は SE の前段に自動展開される Azure Load Balancer(以降、Azure LBと表記)に配置されます。
Virtual Service
クライアントが接続する仮想サービスを定義します。以降、VS と表記します。
接続を待ち受けるポート番号、VIP/Pool/SE Groupの選択、VSが動作するレイヤー(L4/L7)の選択などを設定します。
以下、各コンポーネントを図示した構成図です。
通信フロー
パブリック VIP 宛の通信フローは[クライアント]→[External Azure LB 上のパブリック VIP]→[Service Engine]→[サーバ]となります。
戻りの通信は Azure LB を経由せず、SE から直接クライアントへ返されます。
プライベート VIP 宛の通信フローは[クライアント]→[Private Azure LB 上のプライベート VIP]→[Service Engine]→[サーバ]となります。
戻りの通信は Azure LB を経由せず、SE から直接クライアントへ返されます。
設定手順
本記事では HTTP トラフィックの負荷分散において、設定必須項目と重要項目のみ抜粋して説明します。*1
Pool 設定手順
コントローラ UI にログインします。[Applications]-[Pools]を選択します。[CREATE]ボタンをクリックします。 以下の項目を入力します。
- Name : 任意の名前を入力します。
[SET CLOUD & VRF]ボタンをクリックします。
- Cloud : 作成済の Azure Cloud を選択します。
- VRF Context : [global] を選択します。
[SET]ボタンをクリックします。
- Default Server Port : サーバに送信されるトラフィックの宛先ポート番号を入力します。
- Load Balance Algorithm : 負荷分散アルゴリズムを指定します。今回はサーバに対して順番に分散するように[Round Robin]を選択します。
- Select Servers By : 負荷分散先サーバの指定方法を選択します。IPアドレス/DNS名で指定する場合は[IP Address, Range or DNS Name]を選択します。下の入力欄にサーバのIPアドレスまたはDNS名を入力して[ADD]ボタンをクリックします。すべてのサーバを定義するまで操作を繰り返します。
- Health Monitor : サーバが Up 状態とみなす判断方法を指定します。デフォルトで設定済の Health Monitor を選択、またはカスタムで Health Monitor を作成して指定します。例えば、HTTP のレスポンスコードによって Up 状態を判断する場合は[ADD]ボタンをクリックして[System-HTTP]を選択します。
- Persistence Profile : パーシステンスを有効にする場合、Persistence Profile を選択します。デフォルトで設定済のプロファイルとして、クライアント IP をもとにパーシステンスを行う[System-Persistence-Client-IP]や HTTP Cookie をもとにパーシステンスを行う[System-Persistence-HTTP-Cookie]等を選択できます。カスタムで作成したプロファイルの指定も可能です。今回はパーシステンスは行わないため選択せず進めます。
- SSL Profile : トラフィックをサーバへ送信する際に SSL で暗号化を行う場合は SSL Profile を選択します。
- Fail Action : Pool 上のサーバがすべて Down してる場合にクライアントへの応答方法を定義します。デフォルトは TCP 接続をクローズする[Close Connection]です。[HTTP Redirect]を選択すると、予め用意したホストにリダイレクトできます。
[SAVE]ボタンをクリックします。
以上で Pool 設定は完了です。
VIP 設定手順
[Applications]-[VS VIP]を選択します。 [CREATE]ボタンをクリックします。
以下の項目を入力します。
- Name : 任意の名前を入力します。
[SET CLOUD & VRF]ボタンをクリックします。
- Cloud : 作成済の Azure Cloud を選択します。
- VRF Context : [global] を選択します。
[SET]ボタンをクリックします。
[VIPs]の[ADD]ボタンをクリックします。
以下の項目を選択します。
- [Private IP]にて[Auto-Allocate]を選択します。
- VIP Address Allocation Network : VIP を払い出す Azure ネットワークを選択します。
- IPv4 Subnet : VIP を払い出すサブネットを選択します。
[Public IP]の VIP を割り当てる場合は以下の項目を入力します。
- [Public IP]にて[Auto-Allocate]を選択します。
[SAVE]ボタンをクリックします。
[SAVE]ボタンをクリックします。
以上で VIP 設定は完了です。
Virtual Service 設定手順
[Applications]-[Virtual Services]-[CREATE VIRTUAL SERVICE]-[Advanced Setup]を選択します。
[Select Cloud]にて、作成済の Azure Cloud を選択して[NEXT]ボタンをクリックします。
以下の項目を入力します。
- Name : 任意の名前を入力します。
- VS VIP : 作成済の VIP を選択します。
- TCP/UDP Profile : デフォルトプロファイルの[System-TCP-Proxy]を選択します。
- Application Profile : HTTP(L7)負荷分散の場合は[System-HTTP]を選択します。L4負荷分散の場合は[System-L4-Application]を選択します。
- Service Port : クライアントの接続を待ち受けるポート番号を入力します。
- Pool : 作成済の Pool を選択します。
[NEXT]ボタンをクリックします。
[Policies]画面では指定したヘッダに一致した場合のアクション定義や Data Script の設定等を行います。今回はそのまま[NEXT]ボタンをクリックします。
[Analytics]画面では、[Log all headers]を有効にすると全てのヘッダをログに含めることができます。正常なトラフィックログ(Non-significant ログ)を取得する設定も可能です。今回は[Log all headers]を有効にして[NEXT]ボタンをクリックします。
[Advanced]画面にて、以下の項目を入力します。
- Service Engine Group : 作成済の SE Group を選択します。
[SAVE]ボタンをクリックします。
以上でVirtual Service 設定は完了です。
状態確認
Service Engine
SE が2台自動展開されました。SE Group の高可用性モードを[Active/Active] に設定している場合、最小台数である2台展開されます。展開にかかる所要時間は2台合わせて約10分でした。
Azure Portal 上では Azure 仮想マシンとして存在していました。
Azure LB
SE の前段として Azure LB も2台自動展開されてました。
フロントエンド IP にパブリック VIP が割り当てられた Azure LB とプライベート VIP が割り当てられた Azure LB がそれぞれ展開されました。
バックエンドプールには Service Engine の Data インタフェース IP アドレスが割り当てられてました。SE は Active/Active 構成のため、2台の SEがトラフィック処理できるように Azure LB にて各 SE 宛にトラフィックが振り分けられます。
Virtual Service
Health Score が緑色で正常な状態でした。
疎通確認
クライアントのWebブラウザにて、HTTP で VIP にアクセスします。ブラウザにてリロードを繰り返します。Web01とWeb02のページが交互に表示されました。
Round Robin で負荷分散されました。Virtual Service の画面でサーバごとのログカウント数が表示されています。同じカウント数で均等に分散されていました。
まとめ
- NSX ALB のサーバ負荷分散設定は、以下のコンポーネントを構成します
- Pool
- VIP
- Virtual Service
- Pool と VIP を作成後、Virtual Service 設定にて作成済の Pool、VIP、SE Groupや各種プロファイルを選択します
- 設定完了後に SE と Azure LB が自動展開されます
マルチクラウドへの負荷分散環境展開において、NSX ALB は大きな力を発揮する製品と考えております。
Azure 上へ展開する際には本記事を参考にして頂ければと思います。
*1:前回までの記事と同様の検証環境を用いています