Windows Azure Virtual Machinesで、死活監視(ヘルスチェック)しながらロードバランシングする手順

2012-06-13

Windows Azure Virtual Machinesの概要で紹介した、Windows Azure Virtual Machinesで死活監視をしながら、ロードバランシングする手順を実際にやってみました。
手順のインプット情報は、Automating Windows Azure Virtual Machines with PowerShellです。

Windows Azure PowerShellコマンドレットの入手

image
https://www.windowsazure.com/en-us/manage/downloads/

から、Windows Azure PowerShellコマンドレットを入手して、インストールします。

Windows Azure Powershellを使用する方法

スタートメニューから、Windows Azure PoerShellをクリックする。

image

もしくは、モジュールをコマンドレットでインポートします。

Import-Module 'c:\Program Files (x86)\Microsoft SDKs\Windows Azure\PowerShell\Microsoft.WindowsAzure.Management.psd1'

サブスクリプションの設定

Windows Azureの操作をするための設定を一番簡単にする方法は、

https://windows.azure.com/download/publishprofile.aspx

にアクセスして、設定ファイルをダウンロードすることです。

ダウンロードした設定ファイルをインポートします。

Import-AzurePublishSettingsFile ‘c:\temp\mysub.publishsettings’

設定結果を確認したい場合は、次のコマンドを実行します。

Get-AzureSubscription

手動で、サブスクリプションの設定をしたい場合は、Set-AzureSubscriptionで、サブスクリプションIDと管理証明書を設定します。

$subid = ‘[YOUR-SUBSCRIPTION-ID]’

$cert = Get-Item Cert:\CurrentUser\My\YOURCERTTHUMBPRINT

Set-AzureSubscription -SubscriptionName ‘testsub1’ -SubscriptionId $subid -Certificate $cert

 

補足:インポートしたり、手動で設定したサブスクリプション情報は、次のディレクトリに格納されます。

C:\Users\user\AppData\Roaming\Windows Azure Powershell

image

ここにファイルが存在する場合、スクリプトごとにSet-AzureSubscriptionを実行する必要はありません。

コマンドレットは複数のサブスクリプションに対応しており、Select-AzureSubscriptionコマンドレットで、アクティブなサブスクリプションを切り替えて、処理を実行できます。

Virtual Machinesの設定変更

Windows Azure Virtual Machinesの設定変更をするには、「get-azurevm」で

変更したいVMを指定します。

パイプラインで設定変更処理を記述します。

処理を記述後、パイプラインで結んで「Update-Azure」を実行します。

VMの指定方法

次の例では、VM名が「ce03」と「ce01」が含まれたサービス名「eva」と、VM名「win01」を含んだサービス名「wino4」があります。

evaのce01を指定するには、

「Get-AzureVM -ServiceName "eva" -Name "ce01"」と指定します。

image

image

ロードバランシングの指定方法

ロードバランシングは、Windows Azure VMのエンドポイントで定義します。

次の図のように、ヘルスチェック機能を持っているので、特定ファイルにアクセスできるかどうかで、死活監視チェックができます。

エンドポイントを追加するには「Add-AzureEndpoint」コマンドレットを使用します。

Add-AzureEndpoint -Name "HttpIn" -Protocol "tcp" -Public

Port 80 -LocalPort 8080 -LBSetName "WebFarm" -ProbePort 80 -ProbeProtocol "http" -ProbePath "/health.txt"

このスクリプトを実行すると、Windows Azure PowerShellウィンドウ上に進行状況が表示されます。

image

処理が完了すると、次のように処理結果が表示されます。

image

Add-AzureEndPointで指定したプロパティName、Protocol、PublicPort、LocalPortと

Windows Azure管理ポータル上での表記の関係は次の通り。

ロードバランシングの部分は画面上に表示されません。

image

  • LBSetName

    ロードバランサーのエンドポイント名を定義します。

    クラウドサービス内にある複数の仮想マシンがロードバランサーのエンドポイントを使用できます。

  • ProbePort

    死活監視に使用するパブリックポートの指定。指定しない場合は、ロードバランサー用の

    ポートと同じポートを使用します。

  • ProbeProtocol

    死活監視に使用するプロトコルを使用します。「http」、「TCP」のどちらかのみ使用できます。

    「TCP」を指定すると、死活監視要求では「ACK」を受け取ります。

    「HTTP」を指定すると、死活監視用のURLから「200 OK」を受け取ります。

  • ProbePath

    ProbeProtocolに「http」を設定した場合、死活監視に使用するURIを指定します。

詳細は、Add-AzureEndpointのリファレンスを参照してください。

更新の実行

最後に、更新処理を実行するための「Update-AzureVM」をパイプラインでつなげればOK。

Update-AzureVM

サンプルスクリプト

死活チェック付エンドポイントの追加

get-azurevm -ServiceName "win04" -Name "win01" | Add-AzureEndpoint -Name "HttpIn"

-Protocol "tcp" -PublicPort 80 -LocalPort 80 -LBSetName "WebFarm" -ProbePort 80 -ProbeProtocol "http" -ProbePath "/" | Update-AzureVM

死活チェック付エンドポイントの更新

get-azurevm -ServiceName "win04" -Name "win01" | Set-AzureEndpoint -Name "HttpIn" -Protocol "tcp" -PublicPort 80 -LocalPort 80 -LBSetName "WebFarm" -ProbePort 80 -ProbeProtocol "http" -ProbePath "/" | Update-AzureVM

特定VMのエンドポイントの確認

get-azurevm -ServiceName "eva" -Name "ce03" |get-AzureEndpoint

特定VMの特定エンドポイントの確認

get-azurevm -ServiceName "eva" -Name "ce03" |get-AzureEndpoint -Name "HttpIn"

 

検証確認

Win2012 & IIS のVM2つ

特に問題なく、10分ほどで死活チェック付のロードバランシング構築完了。

死活チェックは15秒に1回実施されているので、15秒ほどで切り替わることを確認できた。

IISのログには次のような記録が残っている。

2012-06-12 20:12:53 10.146.154.34 GET / – 80 – 10.146.154.190 Load+Balancer+Agent – 200 0 0 2

2012-06-12 20:13:08 10.146.154.34 GET / – 80 – 10.146.154.190 Load+Balancer+Agent – 200 0 0 0

2012-06-12 20:13:23 10.146.154.34 GET / – 80 – 10.146.154.190 Load+Balancer+Agent – 200 0 0 0

2012-06-12 20:13:38 10.146.154.34 GET / – 80 – 10.146.154.190 Load+Balancer+Agent – 200 0 0 1

2012-06-12 20:13:53 10.146.154.34 GET / – 80 – 10.146.154.190 Load+Balancer+Agent – 200 0 0 2

image

CentOS & nginx のVM2つ

上手くロードバランシングさせられず。。。。

VMそれぞれでエンドポイントを追加して接続すると、両方のVMのnginx HellowWorldを確認。

死活チェック無しのロードバランシングを組むと、正常に動作していることを確認。

死活チェック有り(パスは「/」)だと、両方ダウンしていて接続できない・・・・・・。

nginxのアクセスログは次の通り「200」を返しているのだけど。。。。

10.24.202.190 – – [12/Jun/2012:20:18:47 +0000] "GET / HTTP/1.1" 200 155 "-" "Load Balancer Agent" "-"

10.24.202.190 – – [12/Jun/2012:20:19:02 +0000] "GET / HTTP/1.1" 200 155 "-" "Load Balancer Agent" "-"

10.24.202.190 – – [12/Jun/2012:20:19:17 +0000] "GET / HTTP/1.1" 200 155 "-" "Load Balancer Agent" "-"

10.24.202.190 – – [12/Jun/2012:20:19:32 +0000] "GET / HTTP/1.1" 200 155 "-" "Load Balancer Agent" "-"

10.24.202.190 – – [12/Jun/2012:20:19:47 +0000] "GET / HTTP/1.1" 200 155 "-" "Load Balancer Agent" "-"

10.24.202.190 – – [12/Jun/2012:20:20:02 +0000] "GET / HTTP/1.1" 200 155 "-" "Load Balancer Agent" "-"

ちなみにロードバランシングさせるために使用したPowerShellコマンドは、Windowsの名前とサービス名を変更しただけなので、設定ミスではないと思われ。。。