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

Azure ロードバランサーのDSRを利用したHAクラスターの構築を試してみました(Linux)

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

はじめに

Microsoft Azureで、HAクラスターの接続先切り替えにAzureロードバランサーのDSRを使用したHAクラスターの構築を試してみました。

Azureロードバランサーでは、負荷分散規則にフローティングIP(Direct Server Return)が選択可能です。
CLUSTERPROのAzure向けHAクラスタ構築ガイドでは、DSRは無効の通常のロードバランサーを使用したHAクラスターの構築手順を紹介していますが、今回は、DSRを有効化した状態でHAクラスターを構築します。

構築手順は、WindowsとLinuxで異なります。今回は、Linux環境におけるAzureロードバランサーのDSRを有効化した状態でHAクラスターを構築するための設定方法をご紹介します。

Windows環境における構築手順はpopupこちらより参照ください。

この記事の内容

1. DSRとは

DSR(Direct Server Return)は、ロードバランサーの機能の一つです。
クライアントからロードバランサー経由でサーバーにアクセスする際に、サーバーからクライアントへの応答も通常はロードバランサーを経由します。
DSRを使用すると、ロードバランサーを経由することなく、サーバーからクライアントへ直接応答することが可能です。

Azureロードバランサーでは、負荷分散規則の設定で、フローティングIP(Direct Server Return)の有効化/無効化が選択できます。

2. HAクラスター構成

「ロードバランサーを使用したHAクラスター」を構築します。構成は以下の通りです。

cluster configuration
  • Azureロードバランサーを使用して現用系サーバーへ接続先を切り替え
  • HAクラスター対象のアプリケーションにpopupMinIOを使用

また、DSRを使用するため、HAクラスターを構築するサーバーのローカルループバックにロードバランサーのフロントエンドIPアドレス(例.10.5.0.200)を付与します。
今回は、ロードバランサーの接続先切り替えに合わせて、CLUSTERPROのEXECリソースで、IPアドレスの付け替えを行います。

DSRを使用する構成は、以下のサイトを参考にしました。

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

「内部ロードバランサーを使用したHAクラスター」を構築します。構築手順は、HAクラスタ構築ガイド(Linux)を参照ください。

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

3.1 ロードバランサーの作成

ロードバランサーのDSRを有効化します。

構築ガイドの「構築手順(内部ロードバランサーを使用したHAクラスタの場合)」に記載の 「Microsoft Azure の設定」-「ロードバランサーの設定(負荷分散規則の設定)」に以下の手順を追加します。

ロードバランサーのフローティングIP(Direct Server Return)を有効化します。
また、ポートとバックエンドポートには、同一のポート番号を設定します。
今回は、MinIOの接続に使用するためのポート番号に9000を指定します。

3.2 HAクラスターの構築

ロードバランサーの切り替えに合わせて、ローカルループバックにフロントエンドIPアドレスを追加/削除するEXECリソースを登録します。

構築ガイドの「構築手順(内部ロードバランサーを使用したHAクラスタの場合)」に記載の「CLUSTERPROの設定」に以下の手順を追加します。

EXECリソースを追加し、ローカルループバックにフロントエンドIPアドレスを追加/削除するスクリプトを登録します。
CLUSTERPRO Xでは、スクリプトを実行する場合に、環境変数によってスクリプト実行要因を指定します。
スクリプトの記述についての詳細はCLUSTERPRO Xのリファレンスガイドを参照ください。
なお、EXECリソースの依存関係は、依存するリソースなし(深度0)に設定します。

  • 以下のスクリプトはipコマンドによるフロントエンドIPアドレスの追加/削除を記述したものです。
    Red Hat Enterprise Linux 7.6 にて動作確認を行っています。
  • スクリプトはサンプルであり、動作を保証するものではありません。
  • ★部分の変数の値は環境に合わせて設定してください。

起動スクリプト
# Server1
SERVER1_NAME="server1" ★Server1のホスト名
SERVER1_NIC="lo" ★Server1のローカルループバックのインターフェース名
# Server2
SERVER2_NAME="server2" ★Server2のホスト名
SERVER2_NIC="lo" ★Server2のローカルループバックのインターフェース名
# VIP Address
VIP=10.5.0.200 ★ロードバランサーのフロントエンドIPアドレス
NETMASK=255.255.255.255 ★フロントエンドIPアドレスのネットマスク
# HostName
CURRENT_HOSTNAME=`hostname`

if [ $CURRENT_HOSTNAME = $SERVER1_NAME ]; then
     NIC=$SERVER1_NIC
elif [ $CURRENT_HOSTNAME = $SERVER2_NAME ]; then
     NIC=$SERVER2_NIC
else
     echo "SERVER is not found."
     exit 1
fi
# Add IP Address
ip addr add $VIP/$NETMASK brd + dev $NIC
RET=$?
if [ $RET = 0 ]; then
     exit 0
else
     echo "Failure to add IP Address"
     exit 1
fi

停止スクリプト
# Server1
SERVER1_NAME="server1" ★Server1のホスト名
SERVER1_NIC="lo" ★Server1のローカルループバックのインターフェース名
# Server2
SERVER2_NAME="server2" ★Server2のホスト名
SERVER2_NIC="lo" ★Server2のローカルループバックのインターフェース名
# VIP Address
VIP=10.5.0.200 ★ロードバランサーのフロントエンドIPアドレス
NETMASK=255.255.255.255 ★フロントエンドIPアドレスのネットマスク
# HostName
CURRENT_HOSTNAME=`hostname`

if [ $CURRENT_HOSTNAME = $SERVER1_NAME ]; then
    NIC=$SERVER1_NIC
elif [ $CURRENT_HOSTNAME = $SERVER2_NAME ]; then
    NIC=$SERVER2_NIC
else
    echo "SERVER is not found."
    exit 1
fi
# Del IP Address
ip addr del $VIP/$NETMASK brd + dev $NIC
RET=$?
if [ $RET = 0 ]; then
    exit 0
else
    echo "Failure to del IP Address"
    exit 1
fi

4. 動作確認

フェールオーバーグループを起動し、現用系のMinIOにアクセスができることを確認します。
また、DSRが使用できているか確認するため、パケットキャプチャし、通信元、通信先のIPアドレスを確認します。

Server1でフェールオーバーグループを起動し、MinIOにアクセスできることを確認します。 パケットキャプチャし、クライアントのIPアドレス(10.5.0.4)とサーバーに付与したIPアドレス(10.5.0.200)で通信が行われることを確認します。

フェールオーバーを実行し、Server2でフェールオーバーグループを起動し、MinIOにアクセスできることを確認します。
パケットキャプチャし、同様に、クライアントのIPアドレス(10.5.0.4)とサーバーに付与したIPアドレス(10.5.0.200)で通信が行われることを確認します。

フェールオーバーの前後で、サーバーに付与したIPアドレスを使用してパケットの送受信ができていることが確認できました。

まとめ

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

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

お問い合わせ

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