次の方法で共有


チュートリアル: Azure PowerShell を使用して高可用性アプリケーションを作成するために Azure で Windows 仮想マシンを負荷分散する

適用対象: ✔️ Windows VM ✔️ 均一スケール セット

負荷分散は、受信要求を複数の仮想マシンに分散することで、より高いレベルの可用性を提供します。 このチュートリアルでは、トラフィックを分散し、高可用性を提供する Azure ロード バランサーのさまざまなコンポーネントについて説明します。 次の方法を学びます:

  • Azure Load Balancer を作成する
  • ロードバランサーのヘルスプローブを作成する
  • ロード バランサーのトラフィック ルールを作成する
  • カスタム スクリプト拡張機能を使用して基本的な IIS サイトを作成する
  • 仮想マシンを作成してロード バランサーにアタッチする
  • 動作中のロード バランサーを表示する
  • ロード バランサーから VM を追加および削除する

Azure Load Balancer の概要

Azure ロード バランサーは、正常な VM 間で受信トラフィックを分散することで高可用性を提供するレイヤー 4 (TCP、UDP) ロード バランサーです。 ロード バランサーの正常性プローブは、各 VM 上の特定のポートを監視し、運用 VM にのみトラフィックを分散します。

1 つ以上のパブリック IP アドレスを含むフロントエンド IP 構成を定義します。 このフロントエンド IP 構成により、ロード バランサーとアプリケーションにインターネット経由でアクセスできます。

仮想マシンは、仮想ネットワーク インターフェイス カード (NIC) を使用してロード バランサーに接続します。 VM にトラフィックを分散するために、バックエンド アドレス プールには、ロード バランサーに接続されている仮想 (NIC) の IP アドレスが含まれています。

トラフィックのフローを制御するには、VM にマップされる特定のポートとプロトコルのロード バランサー規則を定義します。

Azure Cloud Shell を起動する

Azure Cloud Shell は無料のインタラクティブ シェルです。この記事の手順は、Azure Cloud Shell を使って実行することができます。 お使いのアカウントで使用できるように、一般的な Azure ツールがあらかじめインストールされ、設定されています。

Cloud Shell を開くには、コード ブロックの右上隅にある [使ってみる] を選択します。 https://shell.azure.com/powershell に移動して、別のブラウザー タブで Cloud Shell を起動することもできます。 [コピー] を選択してコードのブロックをコピーし、Cloud Shell に貼り付けてから、Enter キーを押して実行します。

Azure ロード バランサーを作成する

このセクションでは、ロード バランサーの各コンポーネントを作成および構成する方法について説明します。 ロード バランサーを作成する前に、 New-AzResourceGroup を使用してリソース グループを作成します。 次の例では、eastUS の場所に myResourceGroupLoadBalancer という名前のリソース グループを作成します。

New-AzResourceGroup `
  -ResourceGroupName "myResourceGroupLoadBalancer" `
  -Location "EastUS"

パブリック IP アドレスの作成

インターネット上のアプリにアクセスするには、ロード バランサーのパブリック IP アドレスが必要です。 New-AzPublicIpAddress を使用してパブリック IP アドレスを作成します。 次の例では、myResourceGroupLoadBalancer リソース グループに myPublicIP という名前のパブリック IP アドレスを作成します。

$publicIP = New-AzPublicIpAddress `
  -ResourceGroupName "myResourceGroupLoadBalancer" `
  -Location "EastUS" `
  -AllocationMethod "Static" `
  -Name "myPublicIP"

ロード バランサーを作成する

New-AzLoadBalancerFrontendIpConfig を使用してフロントエンド IP プールを作成します。 次の例では、 myFrontEndPool という名前のフロントエンド IP プールを作成し、 myPublicIP アドレスをアタッチします。

$frontendIP = New-AzLoadBalancerFrontendIpConfig `
  -Name "myFrontEndPool" `
  -PublicIpAddress $publicIP

New-AzLoadBalancerBackendAddressPoolConfig を使用して、バックエンド アドレス プールを作成します。 残りの手順では、VM をこのバックエンド プールにアタッチします。 次の例では、 myBackEndPool という名前のバックエンド アドレス プールを作成します。

$backendPool = New-AzLoadBalancerBackendAddressPoolConfig `
  -Name "myBackEndPool"

次に、 New-AzLoadBalancer を使用してロード バランサーを作成します。 次の例では、前の手順で作成したフロントエンドとバックエンド IP プールを使用して 、myLoadBalancer という名前のロード バランサーを作成します。

$lb = New-AzLoadBalancer `
  -ResourceGroupName "myResourceGroupLoadBalancer" `
  -Name "myLoadBalancer" `
  -Location "EastUS" `
  -FrontendIpConfiguration $frontendIP `
  -BackendAddressPool $backendPool

ヘルスプローブの作成

ロード バランサーがアプリの状態を監視できるようにするには、健康診断用プローブを使用します。 正常性プローブは、正常性チェックへの応答に基づいて、ロード バランサーのローテーションから VM を動的に追加または削除します。 既定では、15 秒間隔で 2 回連続して障害が発生した後、VM はロード バランサーの分散から削除されます。 アプリのプロトコルまたは特定の正常性チェック ページに基づいて正常性プローブを作成します。

次の例では、TCP プローブを作成します。 さらに詳細な正常性チェックを行うカスタム HTTP プローブを作成することもできます。 カスタム HTTP プローブを使用する場合は、 healthcheck.aspxなどの正常性チェック ページを作成する必要があります。 プローブは、ロード バランサーがホストをローテーション状態に保つために HTTP 200 OK 応答を返す必要があります。

TCP 正常性プローブを作成するには、 Add-AzLoadBalancerProbeConfig を使用します。 次の例では、TCP ポート 80 で各 VM を監視する myHealthProbe という名前の正常性プローブを作成します。

Add-AzLoadBalancerProbeConfig `
  -Name "myHealthProbe" `
  -LoadBalancer $lb `
  -Protocol tcp `
  -Port 80 `
  -IntervalInSeconds 15 `
  -ProbeCount 2

正常性プローブを適用するには、 Set-AzLoadBalancer を使用してロード バランサーを更新します。

Set-AzLoadBalancer -LoadBalancer $lb

ロード バランサー規則の作成

ロード バランサー規則の目的は、一連の VM に対するトラフィックの分散方法を定義することです。 着信トラフィック用のフロントエンド IP 構成と、トラフィックを受信するためのバックエンド IP プールを、必要な発信元ポートと宛先ポートと共に定義します。 正常な VM のみがトラフィックを受信するように、使用する正常性プローブも定義します。

Add-AzLoadBalancerRuleConfig を使用して、ロード バランサー規則を作成します。 次の例では、 myLoadBalancerRule という名前のロード バランサー規則を作成し、 TCP ポート 80 でトラフィックを分散します。

$probe = Get-AzLoadBalancerProbeConfig -LoadBalancer $lb -Name "myHealthProbe"

Add-AzLoadBalancerRuleConfig `
  -Name "myLoadBalancerRule" `
  -LoadBalancer $lb `
  -FrontendIpConfiguration $lb.FrontendIpConfigurations[0] `
  -BackendAddressPool $lb.BackendAddressPools[0] `
  -Protocol Tcp `
  -FrontendPort 80 `
  -BackendPort 80 `
  -Probe $probe

Set-AzLoadBalancer を使用してロード バランサーを更新します。

Set-AzLoadBalancer -LoadBalancer $lb

仮想ネットワークを構成する

一部の VM をデプロイし、バランサーをテストする前に、サポートする仮想ネットワーク リソースを作成します。 仮想ネットワークの詳細については、「 Azure Virtual Networks の管理 」チュートリアルを参照してください。

ネットワーク リソースを作成する

New-AzVirtualNetwork を使用して仮想ネットワークを作成します。 次の例では、mySubnet と共に myVnet という名前の仮想ネットワークを作成します。

# Create subnet config
$subnetConfig = New-AzVirtualNetworkSubnetConfig `
  -Name "mySubnet" `
  -AddressPrefix 192.168.1.0/24

# Create the virtual network
$vnet = New-AzVirtualNetwork `
  -ResourceGroupName "myResourceGroupLoadBalancer" `
  -Location "EastUS" `
  -Name "myVnet" `
  -AddressPrefix 192.168.0.0/16 `
  -Subnet $subnetConfig

仮想 NIC は New-AzNetworkInterface で作成されます。 次の例では、3 つの仮想 NIC を作成します。 (以降の手順では、アプリ用に作成する VM ごとに仮想 NIC を 1 つ)。 追加の仮想 NIC と VM はいつでも作成し、ロード バランサーに追加できます。

for ($i=1; $i -le 3; $i++)
{
   New-AzNetworkInterface `
     -ResourceGroupName "myResourceGroupLoadBalancer" `
     -Name myVM$i `
     -Location "EastUS" `
     -Subnet $vnet.Subnets[0] `
     -LoadBalancerBackendAddressPool $lb.BackendAddressPools[0]
}

仮想マシンを作成する

アプリの高可用性を高めるには、可用性セットに VM を配置します。

可用性セットを作成するには、New-AzAvailabilitySet を使用します。 次の例では、myAvailabilitySet という名前の可用性セットを作成します。

$availabilitySet = New-AzAvailabilitySet `
  -ResourceGroupName "myResourceGroupLoadBalancer" `
  -Name "myAvailabilitySet" `
  -Location "EastUS" `
  -Sku aligned `
  -PlatformFaultDomainCount 2 `
  -PlatformUpdateDomainCount 2

次のように、Get-Credential を使用して VM の管理者のユーザー名とパスワードを設定します。

$cred = Get-Credential

New-AzVM を使用して VM を作成できるようになりました。 次の例では、3 つの VM と必要な仮想ネットワーク コンポーネントがまだ存在しない場合に作成します。

for ($i=1; $i -le 3; $i++)
{
    New-AzVm `
        -ResourceGroupName "myResourceGroupLoadBalancer" `
        -Name "myVM$i" `
        -Location "East US" `
        -VirtualNetworkName "myVnet" `
        -SubnetName "mySubnet" `
        -SecurityGroupName "myNetworkSecurityGroup" `
        -OpenPorts 80 `
        -AvailabilitySetName "myAvailabilitySet" `
        -Credential $cred `
        -AsJob
}

-AsJob パラメーターはバックグラウンド タスクとして VM を作成するため、PowerShell プロンプトが再度使用可能になります。 Job コマンドレットを使用して、バックグラウンド ジョブの詳細を表示できます。 3 つの VM をすべて作成して構成するには数分かかります。

カスタム スクリプト拡張機能を使用して IIS をインストールする

Windows 仮想マシンをカスタマイズする方法に関する前のチュートリアルでは、Windows 用カスタム スクリプト拡張機能を使用して VM のカスタマイズを自動化する方法について説明しました。 同じ方法を使用して、VM に IIS をインストールして構成できます。

Set-AzVMExtension コマンドを使用して、カスタム スクリプト拡張機能をインストールします。 拡張機能はpowershell Add-WindowsFeature Web-Serverを実行してIISウェブサーバーをインストールし、その後Default.htmページを更新してVMのホスト名を表示します。

for ($i=1; $i -le 3; $i++)
{
   Set-AzVMExtension `
     -ResourceGroupName "myResourceGroupLoadBalancer" `
     -ExtensionName "IIS" `
     -VMName myVM$i `
     -Publisher Microsoft.Compute `
     -ExtensionType CustomScriptExtension `
     -TypeHandlerVersion 1.8 `
     -SettingString '{"commandToExecute":"powershell Add-WindowsFeature Web-Server; powershell Add-Content -Path \"C:\\inetpub\\wwwroot\\Default.htm\" -Value $($env:computername)"}' `
     -Location EastUS
}

ロード バランサーをテストする

ロードバランサーのパブリックIPアドレスを取得するには、Get-AzPublicIPAddress を使用します。 次の例では、先ほど作成した myPublicIP の IP アドレスを取得しています。

Get-AzPublicIPAddress `
  -ResourceGroupName "myResourceGroupLoadBalancer" `
  -Name "myPublicIP" | select IpAddress

次に、公開IPアドレスをウェブブラウザに入力できます。 ロードバランサーがトラフィックを分散させたVMのホスト名を含むウェブサイトが、以下の例のように表示されます。

IIS Web サイトの実行

ロード バランサーがアプリを実行している 3 つの VM すべてにトラフィックを分散することを確認するには、Web ブラウザーを強制的に更新します。

VM の追加と削除

OS 更新プログラムのインストールなど、アプリを実行している VM に対してメンテナンスを実行することが必要な場合があります。 アプリへのトラフィックの増加に対処するには、VM を追加する必要がある場合があります。 このセクションでは、ロード バランサーから VM を削除または追加する方法について説明します。

ロード バランサーから VM を削除する

Get-AzNetworkInterface でネットワーク インターフェイス カードを取得し、仮想 NIC の LoadBalancerBackendAddressPools プロパティを $null に設定します。 最後に、仮想 NIC を更新します。

$nic = Get-AzNetworkInterface `
    -ResourceGroupName "myResourceGroupLoadBalancer" `
    -Name "myVM2"
$nic.Ipconfigurations[0].LoadBalancerBackendAddressPools=$null
Set-AzNetworkInterface -NetworkInterface $nic

ロード バランサーがアプリを実行している残りの 2 つの VM にトラフィックを分散することを確認するには、Web ブラウザーを強制的に更新します。 OS 更新プログラムのインストールや VM の再起動など、VM のメンテナンスを実行できるようになりました。

ロード バランサーに VM を追加する

VM メンテナンスを実行した後、または容量を拡張する必要がある場合は、仮想 NIC の LoadBalancerBackendAddressPools プロパティを Get-AzLoadBalancer から BackendAddressPool に設定します。

ロード バランサーを取得します。

$lb = Get-AzLoadBalancer `
    -ResourceGroupName myResourceGroupLoadBalancer `
    -Name myLoadBalancer 
$nic.IpConfigurations[0].LoadBalancerBackendAddressPools=$lb.BackendAddressPools[0]
Set-AzNetworkInterface -NetworkInterface $nic

次のステップ

このチュートリアルでは、ロード バランサーを作成し、それに VM を接続しました。 以下の方法を学習しました。

  • Azure Load Balancer を作成する
  • ロードバランサーのヘルスプローブを作成する
  • ロード バランサーのトラフィック ルールを作成する
  • カスタム スクリプト拡張機能を使用して基本的な IIS サイトを作成する
  • 仮想マシンを作成してロード バランサーにアタッチする
  • 動作中のロード バランサーを表示する
  • ロード バランサーから VM を追加および削除する

次のチュートリアルに進み、VM ネットワークを管理する方法を学習してください。