Japan
サイト内の現在位置を表示しています。
AzureでセカンダリIPを利用したHAクラスターの構築を試してみました(Linux)
CLUSTERPRO オフィシャルブログ ~クラブロ~
※本記事のWindows版の記事を[こちら]で公開しました。
はじめに
HAクラスターの接続先切り替えにセカンダリIPを使用することで、同じHAクラスター内からサーバーアプリケーションへの接続の切り替えが可能となります。
これにより、HAクラスターを構築するVirtual Machines(以下、VM)上に、サーバーアプリケーションとクライアントアプリケーションが同居する構成も可能になりますので、より少ないインスタンスでクライアント・サーバー型のシステムを構築できるようになります。
今回は、セカンダリIPを接続先の切り替えに利用したHAクラスターを構築します。
この記事の内容
1. セカンダリIPとは
Azure VMでは、1つのネットワーク インターフェイス(以下、NIC)に、複数のプライベートIPアドレス(プライマリIPアドレスとセカンダリ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クラスター内からサーバーアプリケーションへの接続の切り替えができませんでした。
Azure CLIを用いてセカンダリIPを接続先切り替えに利用することで、VMが自身のセカンダリIPに対してアクセスすることができます。
これにより、同じHAクラスター内からサーバーアプリケーションへの接続の切り替えができるようになります。
なお、セカンダリIPの切り替えには、数分の時間を要します。
業務のフェールオーバー時間が伸びることになるため、所要時間についてシステムとして許容可能か、事前にご検討ください。
事前の検証には、CLUSTERPROの試用版をご活用いただけます。
2. HAクラスター構成
構成は以下の通りです。
また、NICへのセカンダリIPの追加/削除に合わせて、フローティングIPリソースを使用して、OS上でIPアドレスの付与/解放を行います。
セカンダリIPの付け替えは、以下のサイトを参考にしました。
3. HAクラスター構築手順
今回の構成は以下の通りです。
- リソース グループの設定
- ■名前
- ・TestGroup1
- ■リソース グループの場所
- ・東日本
- 仮想ネットワークの設定
- ■名前
- ・Vnet1
- ■アドレス空間
- ・10.5.0.0/24
- ■サブネット名
- ・Vnet1-1
- ■サブネットアドレス範囲
- ・10.5.0.0/24
- サーバーの設定
- ■ホスト名
- ・サーバー1 (現用系サーバー):server01
- ・サーバー2 (待機系サーバー):server02
- NICの設定
- -ホスト名 (server01)
- ■NIC (server01535) - IP構成
- ・ipconfig1 (プライマリ):10.5.0.101
- ・ipconfig2 (セカンダリ):10.5.0.110
- -ホスト名 (server02)
- ■NIC (server02800) - IP構成
- ・ipconfig1 (プライマリ):10.5.0.102
- ・ipconfig2 (セカンダリ):10.5.0.110
- CLUSTERPRO
- -フェールオーバーグループ (failover)
- ■フローティングIPリソース
- ・IPアドレス:10.5.0.110
- ■ミラーディスクリソース
- ・クラスタパーティション:/dev/sdc1
- ・データパーティション:/dev/sdc2
- ■execリソース
今回は、接続先切り替えにセカンダリIPを使用するため、ロードバランサーやAzureDNSに関する設定は不要です。
3-1.マネージドIDの設定
システム割り当てマネージドIDを使用することで、コード内に資格情報を格納せずに、Azureリソースをクラウドサービスに対して認証させることができます。
今回は、HAクラスターを構築するVMに、リソースグループ(HAクラスターを構築するVMが存在するリソースグループ)の所有者権限を追加することで、VMやNICに対する操作権限を追加します。
マネージドIDの設定手順は以下の通りです。
HAクラスターを構築する各VMのシステム割り当てマネージドIDを有効にします。
各VMに対して、下記操作を実行してください。
- 1.Azureポータルから、HAクラスターを構築するVM(Server01、または、Server02)を選択します。
- 2.左側のパネルの[ID]に移動します。
- 3.[システム割り当て済み]の[状態]をオンに設定して保存します。
- 1.Azureポータルから、HAクラスターを構築するVM用に作成したリソース グループ(TestGroup1)を選択します。
- 2.左側のパネルの [アクセス制御 (IAM)] に移動します。
- 3.Windows VM用の新しいロールの割り当てについて [ロール割り当ての追加] を実行します。
- 4.次の値を入力し、保存します。
[役割]:所有者
[アクセスの割り当て先]:仮想マシン
[選択]:HAクラスターを構築するVM(Server01、Server02)
3-2. HAクラスターの構築
構築ガイドの手順「5.3 CLUSTERPROの設定」に、以下の手順を追加します。
execリソースを追加し、以下の各VMのNICにセカンダリIPを追加/削除するスクリプトを登録します。
なお、execリソースの依存関係は、依存するリソースなし(深度0)に設定します。
※以下のスクリプトはサンプルであり、動作を保証するものではありません。
※★部分の変数の値は環境に合わせて設定してください。
HostName2="server02" ★サーバー2のホスト名
NicName1="server01535" ★サーバー1のNIC
NicName2="server02800" ★サーバー2のNIC
AZPath="/root/bin/az" ★azコマンドのパス
ResourceGroup="TestGroup1" ★リソースグループ名
VnetName="Vnet1" ★仮想ネットワーク名
SecondaryIP="10.5.0.110" ★セカンダリIPアドレス
IPConfig="ipconfig2" ★セカンダリIPアドレスを付与するIP構成
CurrentHostName=`hostname`
if [ "${CurrentHostName}" = "${HostName1}" ]
then
NicName="${NicName1}"
elif [ "${CurrentHostName}" = "${HostName2}" ]
then
NicName="${NicName2}"
else
exit 1
fi
"${AZPath}" login --identity
if [ "$?" != "0" ]
then
echo "Failed to az login"
exit 1
fi
#Check the usage status of secondary IP
CheckInUse=`"${AZPath}" network vnet check-ip-address -g "${ResourceGroup}" -n "${VnetName}" --ip-address "${SecondaryIP}" --output yaml | awk -F'[: ]' '$1=="available" {print $3}'`
if [ "${CheckInUse}" = "true" ]
then
echo "Address not in use"
elif [ "${CheckInUse}" = "false" ]
then
# Get nic-name
NicInUse=`"${AZPath}" network vnet check-ip-address -g "${ResourceGroup}" -n "${VnetName}" --ip-address "${SecondaryIP}" --output yaml | awk -F'[:]' '$1=="inUseWithResource" {print $2}' | awk -F'[/]' '{print $NF}'`
if [ "$?" != "0" ]
then
echo "Failed to get nic-name"
"${AZPath}" logout
exit 1
fi
if [ "${NicInUse}" = "${NicName}" ]
then
echo "Address already in use for ${CurrentHostName}"
"${AZPath}" logout
exit 0
else
# Delete secondary IP
"${AZPath}" network nic ip-config delete -g "${ResourceGroup}" -n "${IPConfig}" --nic-name "${NicInUse}"
if [ "$?" != "0" ]
then
echo "Failed to delete secondary IP"
"${AZPath}" logout
exit 1
fi
fi
else
echo "Failed to check secondary IP"
"${AZPath}" logout
exit 1
fi
# Create secondary IP
"${AZPath}" network nic ip-config create -g "${ResourceGroup}" -n "${IPConfig}" --nic-name "${NicName}" --private-ip-address "${SecondaryIP}"
if [ "$?" != "0" ]
then
echo "Failed to create secondary IP"
"${AZPath}" logout
exit 1
else
echo "Success to create secondary IP"
"${AZPath}" logout
exit 0
fi
HostName2="server02" ★サーバー2のホスト名
NicName1="server01535" ★サーバー1のNIC
NicName2="server02800" ★サーバー2のNIC
AZPath="/root/bin/az" ★azコマンドのパス
ResourceGroup="TestGroup1" ★リソースグループ名
IPConfig="ipconfig2" ★セカンダリIPアドレスを付与するIP構成
CurrentHostName=`hostname`
if [ "${CurrentHostName}" = "${HostName1}" ]
then
NicName="${NicName1}"
elif [ "${CurrentHostName}" = "${HostName2}" ]
then
NicName="${NicName2}"
else
exit 1
fi
"${AZPath}" login --identity
if [ "$?" != "0" ]
then
echo "Failed to az login"
exit 1
fi
"${AZPath}" network nic ip-config delete --name "${IPConfig}" --nic-name "${NicName}" --resource-group "${ResourceGroup}"
if [ "$?" != "0" ]
then
echo "Failed to delete secondary IP"
"${AZPath}" logout
exit 1
else
echo "Success to delete secondary IP"
"${AZPath}" logout
exit 0
fi
フローティングIPリソースを追加し、OS上でセカンダリIPを付与/解放します。
なお、フローティングIPリソースの依存関係は、依存するリソースに上記で追加したexecリソースを設定します。
4. 動作確認
- 1.現用系サーバーでフェールオーバーグループを起動します。
- 2.クライアントマシンから、セカンダリIP(10.5.0.110)にアクセスし、現用系サーバーに接続できることを確認します。
- 3.現用系サーバーから、セカンダリIP(10.5.0.110)にアクセスし、現用系サーバーに接続できることを確認します。
- 4.Cluster WebUIから、フェールオーバーグループを現用系サーバーから待機系サーバーに、手動で移動します。
- 5.クライアントマシンから、セカンダリIP(10.5.0.110)にアクセスし、待機系サーバーに接続できることを確認します。
- 6.待機系サーバーから、セカンダリIP(10.5.0.110)にアクセスし、待機系サーバーに接続できることを確認します。
セカンダリIPを使用してHAクラスターに接続できることを確認できました。
まとめ
HAクラスター対象のアプリケーションの要件などで、IPアドレスの区別が必要な場合は、本手順を参考にHAクラスターを構築ください。
本記事の構成をご検討の際は、CLUSTERPROの試用版を用いて検証した後、ご提案・構築ください。
お問い合わせ
- ※本記事で紹介しているスクリプトの内容についてのお問い合わせ、および、お客様環境に合わせたカスタマイズにつきましてはCLUSTERPRO導入支援サービスにて承っておりますので、上記窓口の"ご購入前のお問い合わせ"フォームまでお問い合わせください。