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

Azure プライベート DNSを利用したHAクラスター構築(Windows)

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

はじめに

Azure プライベート DNSを利用して、Microsoft Azure(以下、Azure)上でHAクラスターを構築してみました。

以前のpopupブログで、Azure DNSを利用したHAクラスター構築手順をご紹介しましたが、こちらはAzureのパブリック DNSをスクリプトで変更することで接続先の切り替えを実現していました。

当時のAzureでは、Azure プライベート DNS ゾーン(以降、プライベート DNS ゾーン)に対応していなかったため、Azure パブリック DNS ゾーン(以降、パブリック DNS ゾーン)を使用しました。
しかし、パブリック DNS ゾーンはインターネットに接続しているため、外部からのアクセスが不要なシステムでは、仮想ネットワークに閉じたカスタム DNSをユーザーが用意する必要がありました。
現在は、プライベート DNS ゾーンを利用することでカスタム DNSを作成することなく仮想ネットワーク内の DNS ゾーンの管理が可能です。

今回は接続先の切り替えにプライベート DNS ゾーンを利用したHAクラスターの構築手順をご紹介します。

  • CLUSTERPRO X 4.0以降では、Azure DNS リソース、Azure DNS 監視リソースを使用することで、パブリック DNS ゾーンを利用したHAクラスターが容易に構築可能です。
    また、スクリプトリソースを使用することで、プライベート DNS ゾーンを利用したHAクラスターが構築可能です。

この記事の内容

1. HAクラスター構成

プライベート DNS ゾーンを利用した2ノードミラーディスク型のHAクラスターを構築します。
構成は以下の通りです。

クラスター構成の図(2ノードミラーディスク型クラスター)

  • プライベート DNS ゾーンを使用して現用系サーバーへ接続先を切り替え
  • HAクラスター対象のアプリケーションにMinIO(オブジェクトストレージ)を使用

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

Azureに「ミラーディスク型HAクラスター」を構築します。
ネットワーク、仮想マシンの構成は以下の通りです。

  • リソース グループの設定
  • 名前
  • TestGroup1
  • リソース グループの場所
  • 東日本

  • 仮想ネットワークの設定
  • 名前
  • Vnet1
  • アドレス空間
  • 10.5.0.0/24
  • サブネット名
  • Vnet1-1
  • サブネットアドレス範囲
  • 10.5.0.0/24

  • サーバーの設定
  • ■ホスト
  • サーバー1 (現用系サーバー):node1
  • サーバー2 (待機系サーバー):node2

  • NICの設定
  • ホスト名 (node1)
  • NIC - IP構成
  • ipconfig1 (プライマリ):10.5.0.120
  • ホスト名 (node2)
  • NIC - IP構成
  • ipconfig1 (プライマリ):10.5.0.121

  • プライベート DNS ゾーンの設定
  • ■プライベート DNS ゾーン
  • test.zone
  • 仮想ホスト名
  • sample

AzureにおけるHAクラスターの構築手順は、「Microsoft Azure 向けHAクラスタ構築ガイド」の「構築手順(Azure DNSを使用したHAクラスタの場合)」を参照ください。
手順を参考に、仮想マシンの作成後、Azure CLIのインストール、サービス プリンシパルの作成を行い、CLUSTERPROを設定します。

なお、今回は接続先切り替えにプライベートDNSを使用し、スクリプトリソースによる制御を行うため、「DNSゾーンの作成」、「Azure DNS リソース」、「Azure DNS 監視リソース」に関する設定は不要です。

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

フェールオーバーの確認に使用するサービスとして、オブジェクトストレージのMinIOを使用しています。
minio.exeと設定ファイル(config.json)をCドライブ配下に格納します。
また、MinIOで使用するポート番号(9000)を解放します。

2-1. Azure プライベート DNS ゾーンの作成

Azure ポータルを使用して、プライベート DNS ゾーンを作成します。
今回は、DNS ゾーン名に「test.zone」を指定します。
また、仮想ネットワークリンクを作成し、クライアントとHAクラスター構築サーバーが存在する仮想ネットワークをプライベート DNS ゾーンにリンクさせます。

プライベート DNS ゾーンおよび仮想ネットワークリンクの作成手順は以下のサイトを参考にしました。

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

スクリプトリソースの追加

2つのスクリプトリソースを追加します。
  • スクリプトリソース(Azure DNS切り替え用)
  • スクリプトリソース(MinIO制御用)

スクリプトリソース(Azure DNS切り替え用)

プライベート DNS ゾーンのAレコードの追加/削除により、接続先の切り替えを実現します。
スクリプトによって、仮想ホスト名に対応するIPアドレスを切り替えることで、フェールオーバーグループが起動しているノードに仮想ホスト名でアクセスすることができます。

スクリプトリソース(Azure DNS切り替え用)を設定します。

起動スクリプト(start.bat)、停止スクリプト(stop.bat)にそれぞれプライベート DNS ゾーンのAレコードを追加/削除するスクリプトを記載します。
CLUSTERPRO Xでは、スクリプトを実行する場合に、環境変数によってスクリプト実行要因を指定します。
スクリプトの記述についての詳細はCLUSTERPRO Xのリファレンスガイドを参照ください。

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

起動スクリプト(サンプル)

set UserProfile=C:\Users\user1 ★ ユーザプロファイル情報(.azure)のあるディレクトリ
set ResourceGroup=ResGroup1 ★ リソースグループ名
set DnsZone=test.zone ★ プライベート DNS ゾーン名
set VhostName=sample ★ 仮想ホスト名
set Node1Name=NODE1 ★ 1つ目のノード名
set Node1IP=10.5.0.120 ★ 1つ目のIPアドレス
set Node2Name=NODE2 ★ 2つ目のノード名
set Node2IP=10.5.0.121 ★ 2つ目のIPアドレス
set TTL=60 ★ TTL

if %ComputerName% == %Node1Name% (
set IPAddr=%Node1IP%
) else if %ComputerName% == %Node2Name% (
set IPAddr=%Node2IP%
) else (
exit /b 99
)

call az network private-dns record-set a delete -g %ResourceGroup% -z %DnsZone% -n %VhostName% --yes
call az network private-dns record-set a create -g %ResourceGroup% -z %DnsZone% -n %VhostName% --ttl %TTL% > nul
call az network private-dns record-set a add-record -g %ResourceGroup% -z %DnsZone% -n %VhostName% -a %IPAddr% > nul
set Retval=%errorlevel%

exit /b %Retval%

停止スクリプト(サンプル)

set UserProfile=C:\Users\user1 ★ 起動スクリプトと同じパラメータを指定
set ResourceGroup=ResGroup1
set DnsZone=test.zone
set VhostName=sample

call az network private-dns record-set a delete -g %ResourceGroup% -z %DnsZone% -n %VhostName% --yes

exit /b 0

スクリプトの戻り値を判定するため、[正常な戻り値]を設定します。

スクリプトリソース(Azure DNS切り替え用)の設定画面03

スクリプトリソース(MinIO制御用)

スクリプトによって、MinIOの起動/停止を実行します。
スクリプトリソース(Azure DNS切り替え用)と同様の手順でスクリプトリソースを設定します。
起動スクリプト(start.bat)、停止スクリプト(stop.bat)にそれぞれMinIOを起動/停止するスクリプトを記載します。

起動スクリプト(サンプル)

set MinioDir=c:\minio ★ minio.exeの格納場所
set MinioDataDir=g:\data ★ MinIOで扱うデータの格納場所
start %MinioDir%\minio.exe --config-dir %MinioDir% server %MinioDataDir%
tasklist | find "minio"
exit /b %errorlevel%

停止スクリプト(サンプル)

tasklist | find "minio"
if errorlevel 1 exit /b 0
taskkill /f /im minio.exe
exit /b %errorlevel%

カスタム監視リソースの作成

2つのカスタム監視リソースを追加します。
  • カスタム監視リソース(Azure DNS監視用)
  • カスタム監視リソース(MinIO監視用)

カスタム監視リソース(Azure DNS監視用)

プライベート DNS ゾーンに登録したレコードとIPアドレスの対応付けを監視します。
スクリプトにより、DNSの名前解決を行い、名前解決されたIPアドレスが設定値と一致しているかを監視します。

カスタム監視リソース(Azure DNS監視用)を設定します。

監視スクリプト(サンプル)

set DnsZone=test.zone ★ 起動スクリプトと同じパラメータを指定
set VhostName=sample
set Node1Name=NODE1
set Node1IP=10.5.0.120
set Node2Name=NODE2
set Node2IP=10.5.0.121

if %ComputerName% == %Node1Name% (
set IPAddr=%Node1IP%
) else if %ComputerName% == %Node2Name% (
set IPAddr=%Node2IP%
) else (
exit /b 99
)

nslookup -type=a %VhostName%.%DnsZone%. | findstr /e /c:"%IPAddr%" > nul

exit /b %errorlevel%

カスタム監視リソース(MinIO監視用)

MinIOの起動状態を監視します。
スクリプトによりMinIOのプロセスが存在するかどうかを監視します。
カスタム監視リソース(Azure DNS監視用)と同様の手順でカスタム監視リソースを設定します。

監視スクリプト(サンプル)

tasklist | find "minio" > NUL 2>&1
exit /b %errorlevel%

3. 動作確認

WebUIを使用してHAクラスターを起動します。

仮想ホスト名(例ではhttp://sample.test.zone:9000/)を使用して、MinIOに接続します。

障害契機によるフェールオーバーの動作確認のために、MinIOのプロセスを停止します。

CLUSTERPRO Xが障害を検出しフェールオーバーが発生。

フェールオーバー後も同様に仮想ホスト名を使用してMinIOに接続します。
障害発生前と同様にアクセスできることが確認できました。

まとめ

今回は、Azure DNSのプライベート DNS ゾーンを利用したHAクラスターの構築手順を紹介させていただきました。
本記事の構成をご検討の際は、CLUSTERPROのpopup試用版を用いて検証した後、ご提案・構築ください。

お問い合わせ

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