Japan
サイト内の現在位置を表示しています。
Azure ロードバランサーのDSRを利用したHAクラスターの構築を試してみました(Windows)
CLUSTERPRO オフィシャルブログ ~クラブロ~はじめに
Azure ロードバランサーでは、負荷分散規則にフローティングIP(Direct Server Return)が選択可能です。
CLUSTERPROのAzure向けHAクラスタ構築ガイドでは、DSRは無効の通常のロードバランサーを使用したHAクラスターの構築手順を紹介していますが、今回は、DSRを有効化した状態でHAクラスターを構築します。
構築手順は、WindowsとLinuxで異なります。今回は、Windows環境におけるAzure ロードバランサーのDSRを有効化した状態でHAクラスターを構築するための設定方法をご紹介します。
Linux環境における構築手順はこちらより参照ください。
- ※スクリプトリソースの起動スクリプト(フロントエンドIPアドレスの追加コマンド)を更新しました。 (2021/09/17)
この記事の内容
1. DSRとは
DSR(Direct Server Return)は、ロードバランサーの機能の一つです。
クライアントからロードバランサー経由でサーバーにアクセスする際に、サーバーからクライアントへの応答も通常はロードバランサーを経由します。
DSRを使用すると、ロードバランサーを経由することなく、サーバーからクライアントへ直接応答することが可能です。
Azure ロードバランサーでは、負荷分散規則の設定で、フローティングIP(Direct Server Return)の有効化/無効化が選択できます。
2. HAクラスター構成
構成は以下の通りです。
3. HAクラスター構築手順
今回は、ロードバランサーの接続先切り替えに合わせて、CLUSTERPROのスクリプトリソースで、IPアドレスの付け替えを行います。
DSRを使用する構成は、以下のサイトを参考にしました。
構築手順は、HAクラスタ構築ガイド(Windows)を参照ください。
3.1 仮想マシンの設定
構築ガイドの「構築手順(内部ロードバランサーを使用したHAクラスタの場合)」に記載の「Microsoft Azure の設定」-「仮想マシンの設定」に、以下の手順を追加します。
デバイスマネージャーからネットワークアダプタにループバックアダプタ(Microsoft KM-TEST Loopback Adapter)を追加します。
また、DSR機能を使用するため、実際の通信に利用するインターフェース(例.ローカルエリア接続2)、ループバックアダプタのインターフェース(例.ローカルエリア接続3)に対して、以下のコマンドを実行します。
> netsh interface ipv4 set interface "ローカル エリア接続 2" weakhostreceive=enabled
> netsh interface ipv4 set interface "ローカル エリア接続 3" weakhostreceive=enabled
> netsh interface ipv4 set interface "ローカル エリア接続 3" weakhostsend=enabled
3.2 ロードバランサーの作成
構築ガイドの「構築手順(内部ロードバランサーを使用したHAクラスタの場合)」に記載の「Microsoft Azure の設定」-「ロードバランサーの設定(負荷分散規則の設定)」に以下の手順を追加します。
ロードバランサーのフローティングIP(Direct Server Return)を有効化します。
また、ポートとバックエンドポートには、同一のポート番号を設定します。今回は、IISの接続に使用するため80番ポートを指定します。
3.3 HAクラスターの構築
構築ガイドの「構築手順(内部ロードバランサーを使用したHAクラスタの場合)」に記載の「CLUSTERPROの設定」に、以下の手順を追加します。
スクリプトリソースを追加し、ループバックアダプタにフロントエンドIPアドレスを追加/削除するスクリプトを登録します。
CLUSTERPRO Xでは、スクリプトを実行する場合に、環境変数によってスクリプト実行要因を指定します。
スクリプトの記述についての詳細はCLUSTERPRO Xのリファレンスガイドを参照ください。
なお、スクリプトリソースの依存関係は、依存するリソースなし(深度0)に設定します。
- ※以下のスクリプトはサンプルであり、動作を保証するものではありません。
- ※★部分の変数の値は環境に合わせて設定してください。
- ※本スクリプトでは、SERVER1_NIC、SERVER2_NICに指定したインターフェースのIPアドレスをフロントエンドIPアドレスで上書きします。そのため、仮想マシンの接続に利用するインターフェース名を設定すると、仮想マシンへ接続ができなくなりますのでご注意ください。
rem Server01
set SERVER1_NAME=Server01 ★Server01のホスト名
set SERVER1_NIC="イーサネット接続 3" ★Server01のループバックアダプタのインターフェース名
rem Server02
set SERVER2_NAME=Server02 ★Server02のホスト名
set SERVER2_NIC="イーサネット接続 3" ★Server02のループバックアダプタのインターフェース名
rem VIP Address
set VIP=10.1.0.201 ★ロードバランサーのフロントエンドIPアドレス
set NETMASK=255.255.255.255
for /f "usebackq tokens=*" %%i in (`hostname`) do @set CURRENT_HOSTNAME=%%i
if %CURRENT_HOSTNAME%==%SERVER1_NAME% (
set NIC=%SERVER1_NIC%
) else if %CURRENT_HOSTNAME%==%SERVER2_NAME% (
set NIC=%SERVER2_NIC%
) else (
echo "SERVER is not found."
exit 1
)
rem Add IP Address
netsh interface ip add address %NIC% addr=%VIP% mask=%NETMASK% store=active
if not %ERRORLEVEL%==0 (
echo "Failure to add IP Address"
exit 1
)
rem Server01
set SERVER1_NAME=Server01 ★Server01のホスト名
set SERVER1_NIC="イーサネット接続 3" ★Server01のループバックアダプタのインターフェース名
rem Server02
set SERVER2_NAME=Server02 ★Server02のホスト名
set SERVER2_NIC="イーサネット接続 3" ★Server02のループバックアダプタのインターフェース名
rem VIP Address
set VIP=10.1.0.201 ★ロードバランサーのフロントエンドIPアドレス
for /f "usebackq tokens=*" %%i in (`hostname`) do @set CURRENT_HOSTNAME=%%i
if %CURRENT_HOSTNAME%==%SERVER1_NAME% (
set NIC=%SERVER1_NIC%
) else if %CURRENT_HOSTNAME%==%SERVER2_NAME% (
set NIC=%SERVER2_NIC%
) else (
echo "SERVER is not found."
exit 1
)
rem Delete IP Address
netsh interface ip delete address %NIC% addr=%VIP%
if not %ERRORLEVEL%==0 (
echo "Failure to delete ip address"
exit 1
)
4. 動作確認
また、DSRが使用できているか確認するため、パケットキャプチャし、通信元、通信先のIPアドレスを確認します。
Server01でフェイルオーバーグループを起動し、IISにアクセスできることを確認します。
パケットキャプチャし、クライアントのIPアドレス(10.1.0.100)とサーバーに付与したIPアドレス(10.1.0.201)で通信が行われることを確認します。
パケットキャプチャし、同様に、クライアントのIPアドレス(10.1.0.100)とサーバーに付与したIPアドレス(10.1.0.201)で通信が行われることを確認します。
まとめ
HAクラスター対象のアプリケーションの要件などで、DSRの利用が必要な場合は、本手順を参考にHAクラスターを構築ください。
最後まで読んでいただきありがとうございました。
お問い合わせ
- ※本記事で紹介しているスクリプトの内容についてのお問い合わせ、および、お客様環境に合わせたカスタマイズにつきましてはCLUSTERPRO導入支援サービスにて承っておりますので、上記窓口の"ご購入前のお問い合わせ"フォームまでお問い合わせください。