サイト内の現在位置を表示しています。

AzureでセカンダリIPを利用したHAクラスターの構築を試してみました(Linux)

CLUSTERPRO オフィシャルブログ ~クラブロ~

2022/08/26 更新
本記事のWindows版の記事をpopup[こちら]で公開しました。
またWindows版の公開に合わせて、「3-1.マネージドIDの設定」で1回のみ行っていたマネージドIDを使用したAzure CLIの認証処理を、毎回行うようにexecリソースの起動/停止スクリプトに移行しました。

はじめに

Microsoft Azure(以下、Azure)で、HAクラスターの接続先切り替えにセカンダリIPを使用したHAクラスターの構築を試してみました。

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のpopup試用版をご活用いただけます。

2. HAクラスター構成

「セカンダリIPを使用したHAクラスター」を構築します。
構成は以下の通りです。

Azure CLIを使用して、HAクラスターを構築するサーバーのNICにセカンダリIP(例.10.5.0.110)を追加/削除します。
また、NICへのセカンダリIPの追加/削除に合わせて、フローティングIPリソースを使用して、OS上でIPアドレスの付与/解放を行います。

セカンダリIPの付け替えは、以下のサイトを参考にしました。

3. HAクラスター構築手順

Azureに「ミラーディスク型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リソース

AzureにおけるHAクラスターの構築手順は、「HAクラスタ構築ガイド」を参照ください。
今回は、接続先切り替えにセカンダリIPを使用するため、ロードバランサーやAzureDNSに関する設定は不要です。

【参考】
  • Linux > クラウド > Microsoft Azure > HAクラスタ構築ガイド

3-1.マネージドIDの設定

今回はAzure CLIを実行する際の認証に、システム割り当てマネージドIDを使用しました。
システム割り当てマネージドIDを使用することで、コード内に資格情報を格納せずに、Azureリソースをクラウドサービスに対して認証させることができます。

今回は、HAクラスターを構築するVMに、リソースグループ(HAクラスターを構築するVMが存在するリソースグループ)の所有者権限を追加することで、VMやNICに対する操作権限を追加します。

マネージドIDの設定手順は以下の通りです。

HAクラスターを構築する各VMのシステム割り当てマネージドIDを有効にします。
各VMに対して、下記操作を実行してください。
  • 1.Azureポータルから、HAクラスターを構築するVM(Server01、または、Server02)を選択します。
  • 2.左側のパネルの[ID]に移動します。
  • 3.[システム割り当て済み]の[状態]をオンに設定して保存します。
VMにリソースグループに対する所有者の役割を追加します。
  • 1.Azureポータルから、HAクラスターを構築するVM用に作成したリソース グループ(TestGroup1)を選択します。
  • 2.左側のパネルの [アクセス制御 (IAM)] に移動します。
  • 3.Windows VM用の新しいロールの割り当てについて [ロール割り当ての追加] を実行します。
  • 4.次の値を入力し、保存します。
    [役割]:所有者
    [アクセスの割り当て先]:仮想マシン
    [選択]:HAクラスターを構築するVM(Server01、Server02)

3-2. HAクラスターの構築

セカンダリIPを追加/削除するexecリソースを登録します。
構築ガイドの手順「5.3 CLUSTERPROの設定」に、以下の手順を追加します。

execリソースを追加し、以下の各VMのNICにセカンダリIPを追加/削除するスクリプトを登録します。
なお、execリソースの依存関係は、依存するリソースなし(深度0)に設定します。

※以下のスクリプトはサンプルであり、動作を保証するものではありません。
※★部分の変数の値は環境に合わせて設定してください。

起動スクリプト(start.sh)

HostName1="server01"        ★サーバー1のホスト名
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

停止スクリプト(stop.sh)

HostName1="server01"        ★サーバー1のホスト名
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リソースを登録します。

フローティングIPリソースを追加し、OS上でセカンダリIPを付与/解放します。
なお、フローティングIPリソースの依存関係は、依存するリソースに上記で追加したexecリソースを設定します。

4. 動作確認

フェールオーバーの前後で、サーバーに付与したセカンダリIPに接続できることを確認します。

  • 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クラスターに接続できることを確認できました。

まとめ

今回はセカンダリIPを利用したHAクラスターの構築手順を紹介させていただきました。
HAクラスター対象のアプリケーションの要件などで、IPアドレスの区別が必要な場合は、本手順を参考にHAクラスターを構築ください。

本記事の構成をご検討の際は、CLUSTERPROのpopup試用版を用いて検証した後、ご提案・構築ください。

お問い合わせ

本記事に関するお問い合わせは、popupお問い合わせ窓口までお問い合わせください。
  • 本記事で紹介しているスクリプトの内容についてのお問い合わせ、および、お客様環境に合わせたカスタマイズにつきましてはCLUSTERPRO導入支援サービスにて承っておりますので、上記窓口の"ご購入前のお問い合わせ"フォームまでお問い合わせください。