Windows Azure Virtual Machinesの概要で紹介した、Windows Azure Virtual Machinesで死活監視をしながら、ロードバランシングする手順を実際にやってみました。
手順のインプット情報は、Automating Windows Azure Virtual Machines with PowerShellです。
Windows Azure PowerShellコマンドレットの入手
https://www.windowsazure.com/en-us/manage/downloads/
から、Windows Azure PowerShellコマンドレットを入手して、インストールします。
Windows Azure Powershellを使用する方法
スタートメニューから、Windows Azure PoerShellをクリックする。
もしくは、モジュールをコマンドレットでインポートします。
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
ここにファイルが存在する場合、スクリプトごとに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"」と指定します。
ロードバランシングの指定方法
ロードバランシングは、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ウィンドウ上に進行状況が表示されます。
処理が完了すると、次のように処理結果が表示されます。
Add-AzureEndPointで指定したプロパティName、Protocol、PublicPort、LocalPortと
Windows Azure管理ポータル上での表記の関係は次の通り。
ロードバランシングの部分は画面上に表示されません。
- 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 02012-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
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の名前とサービス名を変更しただけなので、設定ミスではないと思われ。。。