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

hostsファイル書き換えによるHAクラスターの接続先切り替えを試してみました(Windows)

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

はじめに

今回は、オンプレミス上で、Windows環境のHAクラスターへの接続先切り替えに、hostsファイルの書き換えを利用する方法についてご紹介します。この方法では、HAクラスターへの接続に仮想ホスト名を利用して接続することが可能です。

HAクラスターへの接続先切り替えには、接続先切り替え専用のグループリソースを使用する方法を推奨していますが、これらのグループリソースを利用できない場合に、本記事のhostsファイル書き換えによる接続先切り替えをご検討ください。

今回紹介するhostsファイル書き換え方法では、HAクラスターにアクセスする全てのクライアントのhostsファイルを、WinRMを使用してCLUSTERPROから書き換えを行います。
これにより、接続先切り替え専用のグループリソースを使用せずに、HAクラスターへの仮想ホスト名による接続先切り替えを行うことができます。

本記事では、CLUSTERPROの設定例とWinRMの一般的な設定例をご紹介します。

この記事の内容

1. 利用ケース

hostsファイル書き換えによるHAクラスターへの接続先切り替えは、以下の理由等により、接続先切り替え専用のグループリソース(フローティングIPリソース、仮想IPリソース、ダイナミックDNSリソース)がいずれも利用できない場合にご検討ください。

  • 異なるセグメント間でクラスターを構築するため、フローティングIPリソースが使用できない。
  • 異なるセグメント間をつなぐルーターがRIP未対応のため、仮想IPリソースが使用できない。
  • ダイナミックDNSサーバーが用意できないため、ダイナミックDNSリソースが使用できない。

接続先切り替え専用のグループリソースを使用した構成の詳細は、以下の記事を参照ください。

【参考】
→ 2. CLUSTERPROの接続先切り替え機能を使用したHAクラスター構成

また、hostsファイル書き換えによる接続先切り替えには、以下のような注意事項があります。

  • WinRMでクラスターサーバーからクライアントにコマンドを実行するため、セキュリティ要件的に問題が無いか確認する必要がある。
  • WinRMはクライアントの情報(IPアドレス・ユーザー名・パスワード)を使用するため、クライアントを追加するたびにWinRMの設定およびスクリプトの修正が必要になる。

2. hostsファイル書き換えの流れ

hostsファイル書き換えの流れは以下になります。

  • 障害が発生し、現用系サーバーから待機系サーバーにフェールオーバー
  • CLUSTERPROのアプリケーションリソースからWinRMを使用して、クラスターにアクセスするクライアント全てに、hostsファイルを書き換えるスクリプトファイルを実行させるコマンドを送信
  • 各クライアントでスクリプトファイルを実行し、クライアントのhostsファイル内の仮想ホスト名の名前解決先を待機系サーバーに書き換え

3. 事前準備

今回はWinRMでの接続方法に、WinRM既定のHTTPポートであるTCP 5985番ポートを使用します。WinRMの設定方法の詳細については以下を参照ください。

3.1 クライアント編

3.1.1 WinRMの設定

クライアントにて、管理者権限でPowerShellを起動します。
クライアントで以下のコマンドを実行し、WinRMの設定をします。

> winrm quickconfig

上記コマンドでは、以下の設定を実行しています。

  • 1. WinRMサービスを開始し、サービスのスタートアップの種類を 自動開始に設定します。
  • 2. 任意のIPアドレスでHTTPまたはHTTPSを使用してWS-Managementプロトコル メッセージ を送受信するポートのリスナーを構成します。
  • 3. WinRMサービスのWindowsファイアウォールの例外を定義し、HTTP(5985)またはHTTPS(5986)のポートを開きます。
  • パブリックファイアウォールを使用している場合は、リモートアドレスとして「ローカルサブネット」のみが許可されるため、別途、クライアントのIPアドレスを許可するように設定を変更する必要があります。

3.1.2 hostsファイルの初期エントリの設定

hostsファイルは以下のパスに格納されています。

C:\Windows\System32\drivers\etc\hosts

hostsファイルをテキストエディタ等で開き、現用系サーバーのIPアドレスと使用したい仮想ホスト名のペアを追記します。

例)

192.168.0.10 sample.clusterpro.com

3.1.3 hostsファイル書き換えスクリプトの準備

クライアント上でhostsファイルのエントリを書き換えるスクリプトを準備します。
本記事では、クライアントに以下のパスを作成してスクリプトファイルを格納します。

C:\CLUSTERPRO\client\changehosts_client.ps1

スクリプトの例は以下になります。

  • 以下のスクリプトは例であり、動作を保証するものではありません。

■ changehosts_client.ps1

#hostsファイルのエントリを書き換えるサンプルスクリプト
#クライアント用

#サーバー1の情報
$ACTIVE_IP="192.168.0.10"
$ACTIVE_HOST_NAME="server01"


#サーバー2の情報
$STANDBY_IP="192.168.1.20"

$STANDBY_HOST_NAME="server02"

#仮想ホスト名
$VIRTUAL_HOST_NAME="sample.clusterpro.com"

#hostsファイルの格納フォルダ
$DIR="C:\Windows\System32\drivers\etc"


#hostsファイルのエントリ書き換え
if ($Args[0] -match $ACTIVE_HOST_NAME) {
    $BEFORE_LINE="${STANDBY_IP}\s*${VIRTUAL_HOST_NAME}"
    $AFTER_LINE ="${ACTIVE_IP}  ${VIRTUAL_HOST_NAME}"
} elseif ($Args[0] -match $STANDBY_HOST_NAME) {
    $BEFORE_LINE="${ACTIVE_IP}\s*${VIRTUAL_HOST_NAME}"
    $AFTER_LINE ="${STANDBY_IP}  ${VIRTUAL_HOST_NAME}"
} else {
    exit 1
}

$RET=Select-String -Path $DIR\hosts -Pattern $AFTER_LINE
if( $RET -ne $null ) { exit 0 }

if((Test-Path $DIR\hosts_tmp) -eq "True"){
    Remove-Item $DIR\hosts_tmp
}
$data = Get-Content $DIR\hosts -Encoding UTF8
$data = $data | ForEach-Object { $_ -replace "$BEFORE_LINE","$AFTER_LINE"}
$data | Out-File  $DIR\hosts_tmp -Encoding UTF8
Copy-Item -Path $DIR\hosts_tmp -Destination $DIR\hosts -Force


#書き換え後のhostsファイルに稼働系のエントリがあるか確認
$RET=Select-String -Path $DIR\hosts -Pattern $AFTER_LINE
if( $RET -ne $null ) { exit 0 } else { exit 1 }

3.2 クラスターサーバー編

3.2.1 WinRMの設定

各クラスターサーバーにて、管理者権限でPowerShellを起動します。
各クラスターサーバーで以下のコマンドを実行し、クライアントを信頼済みホストに登録します。

> winrm set winrm/config/client '@{TrustedHosts ="<クライアント1のIPアドレス>,<クライアント2のIPアドレス>"}'

  • クライアントを追加で設定する場合は、既存のクライアントのIPアドレスも合わせて登録する必要があります。以下は新規クライアントを追加する場合の例です。
> winrm set winrm/config/client '@{TrustedHosts ="<既存クライアント1のIPアドレス>,<既存クライアント2のIPアドレス>,<新規クライアントのIPアドレス>"}'

以下のコマンドを実行することで、信頼済みホストに登録されているIPアドレスを確認することができます。

> winrm get winrm/config/client

3.2.2 クライアント上のスクリプトを実行させるスクリプトの準備

クラスターサーバーからWinRMを利用して、クライアント上のhostsファイル書き換えスクリプトを実行させるスクリプトを準備します。
本記事では、各クラスターサーバーに以下のパスを作成してスクリプトファイルを格納します。

C:\CLUSTERPRO\cluster\changehosts_cluster.ps1

スクリプトの例は以下になります。

  • 以下のスクリプトは例であり、動作を保証するものではありません。

■ changehosts_cluster.ps1

#WinRMでクライアント上のスクリプトを実行させるサンプルスクリプト
#クラスターサーバー用

#hostsファイルを書き換えるクライアントの情報
$ClientsInfo = @{
    client1 = @{
        ip = "172.16.1.11"
        user = "Administrator"
        pass = "Password0"
    }
    client2 = @{
        ip = "172.16.1.12"
        user = "Administrator"
        pass = "Password0"
    }
}

#クライアントで実行するhostsファイル書き換えスクリプトファイルのパス
$ScriptPath = "C:\CLUSTERPRO\client\changehosts_client.ps1"


#WinRMでクライアント上のスクリプトを実行
$hosts = hostname

[string]$cmd = $ScriptPath + " " + $hosts + ';$?'
[scriptblock]$RemoteScript = [scriptblock]::Create($cmd)

foreach($ClientInfo in $ClientsInfo.Values){
    $pass = ConvertTo-SecureString -AsPlainText -Force $ClientInfo["pass"]
    $psc = New-Object System.Management.Automation.PSCredential($ClientInfo["user"],$pass)

    $RET=Invoke-Command $ClientInfo["ip"] -ScriptBlock $RemoteScript -Credential $psc
    if ($RET -eq $null -or -! $RET) {
        $msg="クライアント(IP="+$ClientInfo["ip"]+")のhostsファイル書き換えに失敗しました。"
        clplogcmd -m $msg -l ERR
    }
}

exit 0

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

今回のHAクラスターの構築手順をご紹介します。

4.1 HAクラスター構成

今回は、オンプレミス環境に「hostsファイル書き換えを利用したミラーディスク型クラスター」を構築します。構築するHAクラスターの構成図は以下の通りです。

4.2 オンプレミス環境の設定

今回、クラスター化するアプリケーションにはIIS(Internet Information Services)を用います。
現用系サーバーと待機系サーバーへのCLUSTERPRO XとIISのインストール方法については省略します。
以下の設定値で環境を構築します。

■ ネットワーク・ハードウェア

・ネットワーク
  - ネットワークアドレス1: 192.168.0.0/24
  - ネットワークアドレス2: 192.168.1.0/24
・クラスターサーバー
  - server01
    - IPアドレス: 192.168.0.10
    - ディスク1(OS用): 30GiB
    - ディスク2(ミラーディスク用): 5GiB
      - クラスターパーティション:Eドライブ、1024MB、RAW
      - データパーティション:Fドライブ、4093MB、NTFS
  - server02
    - IPアドレス: 192.168.1.20
    - ディスク1(OS用): 30GiB
    - ディスク2(ミラーディスク用): 5GiB
      - クラスターパーティション:Eドライブ、1024MB、RAW
      - データパーティション:Fドライブ、4093MB、NTFS

■ OS・CLUSTERPRO

・Windows Server 2022
・CLUSTERPRO X 5.2 for Windows (内部バージョン:13.20)

4.3 CLUSTERPROの設定

WinRMは管理者権限を持つユーザーで実行する必要があるため、今回はCLUSTERPROにAdministratorユーザーを設定します。
CLUSTERPROの設定は以下の通りです。

■ CLUSTERPROの設定

・ クラスタのプロパティ
  - アカウント
   - ユーザ名:Administrator

・ フェールオーバーグループ(failover)
  - アプリケーションリソース(appli_changehosts)
  - ミラーディスクリソース(md)
  - サービスリソース(service_IIS)

・ モニタリソース
  - ミラーディスク監視リソース(mdw)
  - ユーザ空間監視リソース(userw)

クライアント上のhostsファイル書き換えスクリプトを実行させるためのクラスターサーバー上のスクリプトを、アプリケーションリソースで制御します。
アプリケーションリソースの設定値は以下になります。

リソース名 タブ 設定名 設定値
アプリケーションリソース
(appli_changhosts)
依存関係 既存の依存関係に従う オフ
依存するリソース なし
詳細 常駐タイプ 非常駐
開始パス powershell.exe
詳細 - 調整 -
パラメータ
実行ユーザ Administrator
詳細 - 調整 - 開始 オプションパラメータ -file "C:\CLUSTERPRO\cluster\changehosts_cluster.ps1"

IISの起動/停止はサービスリソースで制御します。今回は、IISが起動する前に接続先切り替えを実施済みになるように、依存関係を設定します。
サービスリソースの設定値は以下になります。

リソース名 タブ 設定名 設定値
サービスリソース
(service_IIS)
依存関係 既存の依存関係に従う オフ
依存するリソース ミラーディスクリソース(md),
アプリケーションリソース(appli_changehosts)
詳細 サービス名 World Wide Web 発行サービス

5. 動作確認

フェールオーバーの前後でクライアントのhostsファイルが書き換わっていること、および、クライアントから仮想ホスト名に接続できることを確認します。

  • 1.server01でフェールオーバーグループを起動します。
  • 2.クライアントのhostsファイルを確認し、仮想ホスト名の名前解決先がserver01のIPアドレスになっていることを確認します。
  • 3.クライアントから仮想ホスト名を使用して、IISにアクセスできることを確認します。
  • 4.Cluster WebUIから、フェールオーバーグループをserver01からserver02に手動で移動します。
  • 5.クライアントのhostsファイルを確認し、仮想ホスト名の名前解決先がserver02のIPアドレスになっていることを確認します。
  • 6.クライアントから仮想ホスト名を使用して、IISにアクセスできることを確認します。

上記の動作確認により、フェールオーバー前後でクライアントのhostsファイルが書き換わること、および、クライアントからの仮想ホスト名の接続先が切り替わることが確認できます。
  • クライアントが仮想ホスト名へのアクセスに失敗する場合は、Cluster WebUIのアラートログを確認ください。本記事のスクリプトでは、クライアントのhostsファイルが書き換えられなかった場合は、アラートログに出力されます。

まとめ

今回は、オンプレミス上で、Windows環境のHAクラスターへの接続先切り替えにhostsファイルの書き換えを利用する方法についてご紹介しました。
HAクラスターへの接続先切り替えには、接続先切り替え専用のグループリソースを使用する方法を推奨していますが、これらのグループリソースを利用できない場合は、本記事の接続先切り替え方法を1つの選択肢としてご検討ください。

また、今回はオンプレミス上での設定方法についてご紹介しましたが、本構成はhostsファイルおよびWinRMを使用できる環境であればクラウド上等でも利用可能です。

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

お問い合わせ

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