Japan
サイト内の現在位置を表示しています。
AzureでセカンダリIPを利用したHAクラスターの構築を試してみました(Windows)
CLUSTERPRO オフィシャルブログ ~クラブロ~はじめに
HAクラスターの接続先切り替えにセカンダリIPを使用することで、同じHAクラスター内からサーバーアプリケーションへの接続の切り替えが可能となります。
これにより、HAクラスターを構成するVirtual Machines(以降、VM)上に、サーバーアプリケーションとクライアントアプリケーションが同居する構成も可能になりますので、より少ないVMでクライアント/サーバー型のシステムを構築できるようになります。
この記事の内容
1. セカンダリIPとは
Azure VMには、必ず1つ以上のNICが割り当てられています。そして、NICには、1つ以上のIP構成が割り当てられています。
IP構成には、プライマリIP構成とセカンダリIP構成があります。
NICには、必ず1つのプライマリIP構成が割り当てられており、さらに追加でセカンダリIP構成を割り当てることで、VMに複数のIPアドレスを割り当てることが可能です。
今回は、接続先切り替えにセカンダリIPを利用したHAクラスターを構築します。
従来のAzureプローブポートリソースによるIP切り替えでは、HAクラスターを構築するVMは、仮想IPアドレスで自身のVMにアクセスすることができないため、同じHAクラスター内からサーバーアプリケーションへの接続の切り替えができませんでした。
セカンダリIPを接続先切り替えに利用することで、VMが自身のセカンダリIPに対してアクセスすることができます。
これにより、HAクラスターを構築するVM上に、クライアントとアプリケーションが同居する構成も可能になりますので、より少ないVMでクライアント/サーバー型のシステムを構築できるようになります。
なお、セカンダリIPの切り替えには、数分の時間を要します。
業務のフェールオーバー時間が伸びることになるため、所要時間についてシステムとして許容可能か、事前にご検討ください。
事前の検証には、CLUSTERPROの試用版をご活用いただけます。
2. HAクラスター構成
構成は以下の通りです。
また、NICへのセカンダリIPの追加/削除に合わせて、フローティングIPリソースを使用して、OS上でIPアドレスの付与/解放を行います。
セカンダリIPの付け替えは、以下のサイトを参考にしました。
3. HAクラスター構築手順
3.1 Azure環境の設定
3.1.1 リソースグループ、仮想ネットワークの作成
今回作成したリソースグループと仮想ネットワークの設定は以下の通りです。
リソース グループの設定 | |
---|---|
名前 | TestGroup1 |
リソース グループの場所 | 東日本 |
仮想ネットワークの設定 | |
名前 | Vnet1 |
地域 | 東日本 |
アドレス空間 | 10.5.0.0/24 |
サブネット名 | Vnet1-1 |
サブネットアドレス範囲 | 10.5.0.0/24 |
3.1.2 仮想マシンの作成
IPアドレスは初期設定では動的割り当てとなっているため、静的割り当てに変更します。
VMの設定 | ||
---|---|---|
ホスト名 | サーバー1:server01 | サーバー2:server02 |
地域 | 東日本 | 東日本 |
NICの設定 | ||
ホスト名(server01) | ホスト名(server02) | |
NIC - 名前 | server01606 | server02263 |
NIC - IP構成 | ipconfig1(プライマリ):10.5.0.101 | ipconfig1(プライマリ):10.5.0.102 |
3.1.3 マネージドIDの設定
Azure CLIを実行する際の認証に、システム割り当てマネージドID(以降、マネージドID)を使用します。
マネージドIDを使用することで、コード内に資格情報を格納せずに、Azureリソースをクラウドサービスに対して認証させることができます。
今回は、Azure カスタム ロールを作成し、セカンダリIP構成でVMに付与する必要がある権限を個別に追加します。マネージドIDに作成したAzure カスタム ロールを割り当てることで、HAクラスターを構築するVMに、ネットワークやNICに対する操作権限を追加します。
マネージドIDの設定手順は次の通りです。
- (1) HAクラスターを構築する各VMでシステム割り当てマネージドIDを有効化
- (2) Azure カスタム ロールを作成し、必要なアクセス許可を追加
- (3) マネージドIDに作成したAzure カスタム ロールを割り当て
以下に、各手順の詳細を記載します。
- (1) HAクラスターを構築する各VMのシステム割り当てマネージドIDを有効にします。
各VMに対して、下記操作を実行します。
- 1.Azureポータルから、HAクラスターを構築するVM(server01、または、server02)を選択します。
- 2.左側のパネルの[ID]をクリックします。
- 3.[システム割り当て済み]の[状態]を「オン」に設定して保存します。
- (2) Azure カスタム ロールを作成し、必要なアクセス許可を追加します。
下記操作を実行します。
- 1.Azureポータルから、HAクラスターを構築するVM用に作成したリソース グループ(TestGroup1)を選択します。
- 2.左側のパネルの[アクセス制御 (IAM)]をクリックします。
- 3.[カスタムロールを作成する]から[追加]をクリックします。
- 4.次の項目を入力し、保存します。
[基本]タブから[カスタム ロール名]を入力します。
[アクセス許可]タブから[+アクセス許可の追加]をクリックして、Azure カスタム ロールに追加するアクセス許可を選択します。今回セカンダリIP構成でVMに付与が必要な権限は以下の通りです。
・"Microsoft.Network/networkInterfaces/write"
・"Microsoft.Network/networkInterfaces/delete"
・"Microsoft.Network/virtualNetworks/checkIpAddressAvailability/read"
・"Microsoft.Network/networkInterfaces/read"
・"Microsoft.Network/networkSecurityGroups/join/action"
・"Microsoft.Network/virtualNetworks/subnets/join/action" - [確認と作成]タブから[作成]をクリックします。
- (3) マネージドIDに作成したAzure カスタム ロールを割り当てます。
下記操作を実行します。
- 1.Azureポータルから、HAクラスターを構築するVM用に作成したリソース グループ(TestGroup1)を選択します。
- 2.左側のパネルの[アクセス制御 (IAM)]をクリックします。
- 3.[このリソースへのアクセス権の付与]から[ロールの割り当ての追加]をクリックします。
- 4.[ロール]タブで(2)で作成したカスタム ロールを選択します。
- 5.[メンバー]タブで[アクセスの割り当て先]に[マネージドID]を選択します。続けて[+メンバーを選択する]をクリックします。
- 6.右側に[マネージド ID の選択]パネルが表示されます。[マネージド ID]に[仮想マシン]を選択し、HAクラスターを構築するVM(server01とserver02)を選択して[選択]をクリックします。
- 7.[レビューと割り当て]タブから[レビューと割り当て]をクリックします。
3.2 HAクラスターの構築
今回はCLUSTERPRO X 5.0 for Windows(内部バージョン:13.00)に以下のリソースを追加して動作確認を行いました。CLUSTERPROの構成は以下の通りです。
CLUSTERPROのフェールオーバーグループには「フローティングIPリソース」、「ミラーディスクリソース」、「スクリプトリソース」の3つを登録します。
ミラーディスクリソースを登録します。
詳細は 『リファレンスガイド』 -「ミラーディスクリソースを理解する」を参照してください。
- CLUSTERPRO X 5.0 > Windows > リファレンスガイド
→ 第 3 章 グループリソースの詳細
→ 3.8 ミラーディスクリソースを理解する
スクリプトリソースには以下のように、各VMのNICにセカンダリIPを追加/削除するスクリプトを登録します。
NICの設定 | ||
---|---|---|
ホスト名(server01) | ホスト名(server02) | |
NIC - 名前 | server01606 | server02263 |
NIC - IP構成 | ipconfig1(プライマリ):10.5.0.101 | ipconfig1(プライマリ):10.5.0.102 |
ipconfig2(セカンダリ):10.5.0.110(フェールオーバーグループ/スクリプトリソース活性時) | ipconfig2(セカンダリ):10.5.0.110(フェールオーバーグループ/スクリプトリソース活性時) |
※以下のスクリプトはサンプルであり、動作を保証するものではありません。
※★部分の変数の値は環境に合わせて設定してください。
起動スクリプト(start.bat)
setlocal ENABLEDELAYEDEXPANSION
set HostName1=server01 ★サーバー1のホスト名
set HostName2=server02 ★サーバー2のホスト名
set NicName1=server01606 ★サーバー1のNIC
set NicName2=server02263 ★サーバー2のNIC
set AZPath="C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2\wbin\az.cmd" ★azコマンドのパス
set ResourceGroup=TestGroup1 ★リソースグループ名
set VnetName=Vnet1 ★仮想ネットワーク名
set SecondaryIP=10.5.0.110 ★セカンダリIPアドレス
set IPConfig=ipconfig2 ★セカンダリIPアドレスを付与するIP構成
for /f "usebackq tokens=*" %%i in (`hostname`) do @set CurrentHostName=%%i
if /i %CurrentHostName%==%HostName1% (
set NicName=%NicName1%
) else if /i %CurrentHostName%==%HostName2% (
set NicName=%NicName2%
) else (
echo "Server is not found."
exit 1
)
call %AZPath% login --identity
if not %ERRORLEVEL%==0 (
echo "Failed to az login"
exit 1
)
rem Check secondary IP
for /f "usebackq tokens=2 delims= " %%i in (`%AZPath% network vnet check-ip-address -g %ResourceGroup% -n %VnetName% --ip-address %SecondaryIP% --output yaml ^| findstr available:`) do @set CheckInUse=%%i
if !CheckInUse!==true (
echo "Address not in use"
) else if !CheckInUse!==false (
echo "Address in use"
rem Get nic-name
for /f "usebackq tokens=9 delims=/" %%i in (`%AZPath% network vnet check-ip-address -g %ResourceGroup% -n %VnetName% --ip-address %SecondaryIP% --output yaml ^| findstr inUseWithResource`) do @set NicInUse=%%i
if "!NicInUse!"=="" (
echo "Failed to get nic-name"
call %AZPath% logout
exit 1
) else if !NicInUse!==%NicName% (
echo "Address already in use for %CurrentHostName%"
call %AZPath% logout
exit 0
) else (
echo "Delete secondary IP"
rem Delete secondary IP
call %AZPath% network nic ip-config delete -g %ResourceGroup% -n %IPConfig% --nic-name !NicInUse!
if not !ERRORLEVEL!==0 (
echo "Failed to delete secondary IP"
call %AZPath% logout
exit 1
)
)
) else (
echo "Failed to check secondary IP"
call %AZPath% logout
exit 1
)
rem Create secondary IP
call %AZPath% network nic ip-config create -g %ResourceGroup% -n %IPConfig% --nic-name %NicName% --private-ip-address %SecondaryIP%
if %ERRORLEVEL%==0 (
echo "Success to create secondary IP"
call %AZPath% logout
exit 0
) else (
echo "Failed to create secondary IP"
call %AZPath% logout
exit 1
)
停止スクリプト(stop.bat)
set HostName1=server01 ★サーバー1のホスト名
set HostName2=server02 ★サーバー2のホスト名
set NicName1=server01606 ★サーバー1のNIC
set NicName2=server02263 ★サーバー2のNIC
set AZPath="C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2\wbin\az.cmd" ★azコマンドのパス
set ResourceGroup=TestGroup1 ★リソースグループ名
set IPConfig=ipconfig2 ★セカンダリIPアドレスを付与するIP構成
for /f "usebackq tokens=*" %%i in (`hostname`) do @set CurrentHostName=%%i
if /i %CurrentHostName%==%HostName1% (
set NicName=%NicName1%
) else if /i %CurrentHostName%==%HostName2% (
set NicName=%NicName2%
) else (
echo "Server is not found."
exit 1
)
call %AZPath% login --identity
if not %ERRORLEVEL%==0 (
echo "Failed to az login"
exit 1
)
rem Delete secondary IP
call %AZPath% network nic ip-config delete -g %ResourceGroup% -n %IPConfig% --nic-name %NicName%
if %ERRORLEVEL%==0 (
echo "Success to delete secondary IP"
call %AZPath% logout
exit 0
) else (
echo "Failed to delete secondary IP"
call %AZPath% logout
exit 1
)
フローティングIPリソースを追加し、OS上でセカンダリIPを付与/解放します。
なお、フローティングIPリソースの依存関係は、依存するリソースに上記で追加したスクリプトリソースを設定します。
4. 動作確認
- 1.server01でフェールオーバーグループを起動します。
- 2.クライアントマシンから、セカンダリIP(10.5.0.110)にアクセスし、server01に接続できることを確認します。
- 3.server01から、セカンダリIP(10.5.0.110)にアクセスし、server01に接続できることを確認します。
- 4.Cluster WebUIやコマンドにより、フェールオーバーグループをserver01からserver02に手動で移動します。
- 5.クライアントマシンから、セカンダリIP(10.5.0.110)にアクセスし、server02に接続できることを確認します。
- 6.server02から、セカンダリIP(10.5.0.110)にアクセスし、server02に接続できることを確認します。
セカンダリIPを使用してHAクラスターに接続できることを確認できました。
まとめ
HAクラスター対象のアプリケーションの要件などで、IPアドレスの区別が必要な場合は、本手順を参考にHAクラスターを構築ください。
本記事の構成をご検討の際は、CLUSTERPROの試用版を用いて検証した後、ご提案・構築ください。
お問い合わせ
- ※本記事で紹介しているスクリプトの内容についてのお問い合わせ、および、お客様環境に合わせたカスタマイズにつきましてはCLUSTERPRO導入支援サービスにて承っておりますので、上記窓口の"ご購入前のお問い合わせ"フォームまでお問い合わせください。