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

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

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

はじめに

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)
各VM上でシステム割り当てマネージドIDを使用して、az loginでAzure CLIを認証します。

# az login --identity

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

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

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

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

起動スクリプト

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

#Check the usage status of SecandaryIP
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 "Faild to get nic-name"
        exit 1
    fi
    if [ "${NicInUse}" = "${NicName}" ]
    then
        echo "Address already in use for ${CurrentHostName}"
        exit 0
    else
        # Delete SecondaryIP
        "${AZPath}" network nic ip-config delete -g "${ResourceGroup}" -n "${IPConfig}" --nic-name "${NicInUse}"
        if [ "$?" != "0" ]
        then
            echo "Faild to delete secondary IP"
            exit 1
        fi
    fi
else
    exit 1
fi

# Create SecondaryIP
"${AZPath}" network nic ip-config create -g "${ResourceGroup}" -n "${IPConfig}" --nic-name "${NicName}" --private-ip-address "${SecondaryIP}"

if [ "$?" != "0" ]
then
    echo "Faild to create secondary IP"  
    exit 1
fi

停止スクリプト

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}" network nic ip-config delete --name "${IPConfig}" --nic-name "${NicName}" --resource-group "${ResourceGroup}"
if [ "$?" != "0" ]
then
    echo "Faild to delete secondary IP"
    exit 1
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試用版を用いて検証した後、ご提案・構築ください。

参考

クラウド向けクラスター構築支援サービス(クラウドHAコンサル)を実施しています。
お問い合わせ先はこちら(info@clusterpro.jp.nec.com new window)

お問い合わせ

当ブログに関するお問い合わせは、CLUSTERPRO プリセールスお問い合わせ窓口(info@clusterpro.jp.nec.com new window)までお問い合わせください。