可用性ゾーンを使用する仮想マシン スケール セットを作成する

Azure 可用性ゾーンは、Azure リージョン内の障害から分離された場所であり、冗長な電源、冷却、ネットワークを提供します。 これにより、高可用性と、データ センターの障害に対するフォールト トレランスを備えた環境で、アプリケーションを実行できます。 Availability Zones をサポートする Azure リージョンには、少なくとも 3 つの個別のゾーンがあります。 各可用性ゾーンは、独立したインフラストラクチャ電源、冷却手段、ネットワークを備えた 1 つまたは複数のデータ センターで構成されます。 可用性ゾーンは、ラウンドトリップ待ち時間が 2 ミリ秒未満のハイ パフォーマンス ネットワークによって接続されます。 詳細については、可用性ゾーンの概要に関するページをご覧ください。

データセンター レベルの障害から仮想マシン スケール セットを保護するには、複数の可用性ゾーンにまたがるスケール セットを作成できます。 可用性ゾーンを使うには、サポートされている Azure リージョンにスケール セットを作成する必要があります。

可用性ゾーンの設計に関する考慮事項

Virtual Machine Scale Sets では、3 つのゾーン デプロイ モデルがサポートされています。

  • ゾーン冗長またはゾーン スパニング (推奨)
  • ゾーン単位またはゾーン アライン (単一ゾーン)
  • 地域

ゾーン冗長またはゾーン スパニング

ゾーン冗長またはゾーン スパニングのスケール セットでは、選択されたすべてのゾーンにインスタンスが分散されます ("zones": ["1","2","3"])。 既定では、スケール セットはベスト エフォート アプローチを実行して、選択されたゾーン間にインスタンスを均等に分散させます。 ただし、ユーザーはデプロイで "zoneBalance": "true" を設定することにより、ゾーンのバランスを厳密に取る必要があることを指定できます。 各 VM とそのディスクはゾーン単位であるため、特定のゾーンに固定されます。 ゾーン間のインスタンスは、低遅延のハイ パフォーマンス ネットワークによって接続されます。 ゾーンの停止または接続の問題が発生した場合、影響を受けるゾーン内のインスタンスへの接続は損なわれる可能性がありますが、他の可用性ゾーン内のインスタンスは影響を受けません。 ゾーンの停止中にスケール セットに容量を追加することができ、影響を受けていないゾーンにスケール セットによってインスタンスが追加されます。 ゾーンが復元されたら、スケール セットを元の容量にスケールダウンすることが必要になる場合があります。 CPU またはメモリの使用量に基づく自動スケーリング ルールを構成するのがベスト プラクティスです。 自動スケール ルールを作成すると、スケール セットは、その 1 つのゾーンでの VM インスタンスの喪失に、残りの動作しているゾーンに新しいインスタンスをスケールアウトすることによって、対応できるようになります。

複数の可用性ゾーン間にインスタンスを分散させると、可用性ゾーンに分散されたインスタンスでは 99.99% の SLA が満たされ、Azure のほとんどのワークロードに推奨されます。

ゾーン単位またはゾーン アライン (単一ゾーン)

ゾーン単位またはゾーン アラインのスケール セットでは、インスタンスは 1 つの可用性ゾーンに配置されます ("zones": ['1'])。 各 VM とそのディスクはゾーン単位であるため、特定のゾーンに固定されます。 この構成は、主にインスタンス間で低遅延が必要な場合に使われます。

地域

リージョン単位の仮想マシン スケール セットは、ゾーンの割り当てが明示的に設定されていない場合です ("zones"=[] または "zones"=null)。 この構成のスケール セットでは、リージョン単位の (ゾーン固定ではない) インスタンスが作成されて、リージョン全体にインスタンスが暗黙的に配置されます。 ゾーン間のバランスや分散に関する保証、またはインスタンスが同じ可用性ゾーンに配置される保証はありません。 ディスクのコロケーションは、Ultra Disks と Premium v2 ディスクでは保証され、Premium V1 ディスクではベスト エフォートで行われ、Standard SKU (SSD または HDD) ディスクでは保証されません。

まれに、ゾーン全体が停止した場合、スケール セット内の一部または全部のインスタンスが影響を受ける可能性があります。

障害ドメインと可用性ゾーン

障害ドメインは、同じ電源、ネットワーク、冷却装置、プラットフォームのメンテナンス スケジュールを共有するハードウェア ノードの、可用性ゾーンまたはデータセンター内の障害分離グループです。 異なる障害ドメイン上にある VM インスタンスが、同じ計画的または計画外の停止の影響を受ける可能性はほとんどありません。 ユーザーは、リージョンまたはゾーン内の障害ドメイン間にインスタンスを分散させる方法を指定できます。

  • 最大拡散 (platformFaultDomainCount = 1)
  • 静的固定拡散 (platformFaultDomainCount = 5)
  • ストレージ ディスクの障害ドメインに適合した拡散 (platformFaultDomainCount = 2 または 3、リージョン デプロイの場合のみ)

最大拡散を選ぶと、スケール セットは各ゾーン内の可能な限り多くの障害ドメインに VM を拡散します。 この拡散では、ゾーンごとの障害ドメインが 5 個より多く、または少なくなる可能性があります。 静的固定拡散を使用すると、スケール セットはゾーンごとに 5 個の障害ドメインに VM を拡散します。 スケール セットが割り当て要求を満たすためにゾーンごとに 5 個の個別の障害ドメインを見つけられない場合、要求は失敗します。

この方法ではほとんどの場合に最善の拡散を提供するので、ほとんどのワークロードでは最大拡散を使って展開することをお勧めします。 個別のハードウェア分離ユニットにレプリカを拡散する必要がある場合は、複数の可用性ゾーンに拡散し、各ゾーン内では最大拡散を利用することを勧めします。

Note

最大拡散では、VM が拡散される障害ドメインの数に関係なく、スケール セット VM インスタンス ビューおよびインスタンス メタデータには、既定の 1 つのドメインだけが表示されることに注意してください。 各ゾーン内の拡散は暗黙で行われます。

配置グループ

重要

配置グループは、均一オーケストレーション モードで実行されている仮想マシン スケール セットにのみ適用されます。

スケール セットをデプロイするときは、可用性ゾーンごとに 1 つの配置グループ、またはゾーンごとに複数の配置グループのどちらでもデプロイできます。 リージョン (非ゾーン) スケール セットでの選択肢は、リージョンに 1 つの配置グループ、またはリージョンに複数の配置グループです。 singlePlacementGroup というスケール セット プロパティが false に設定されている場合、そのスケール セットは、複数の配置グループで構成することができ、0 から 1,000 個の VM が含まれます。 既定値の true に設定されている場合、スケール セットは 1 つの配置グループで構成され、0 から 100 個の VM が含まれます。 ほとんどのワークロードでは、より大きいスケールに対応できるので、複数の配置グループをお勧めします。 API バージョン 2017-12-01 でのスケール セットの既定値は、単一ゾーンとクロスゾーンのスケール セットについては複数の配置グループですが、リージョン (非ゾーン) スケール セットについては単一の配置グループです。

Note

最大拡散を使う場合は、複数の配置グループを使う必要があります。

ゾーン バランス

最後に、複数のゾーンにまたがって展開されるスケール セットの場合、"ベスト エフォートのゾーン バランス" または "厳密なゾーン バランス" を選ぶこともできます。スケール セットが "バランスが取れている" ものと見なされるのは、スケール セットの各ゾーンの VM 数が同じであるか差が 1 つ以内の場合です。 次に例を示します。

  • ゾーン 1 が 2 VM、ゾーン 2 が 3 VM、ゾーン 3 が 3 VM であるスケール セットは、バランスが取れているものと考えられます。 VM 数が異なるゾーンは 1 つのみで、他のゾーンよりも 1 個少ないだけです。
  • ゾーン 1 が 1 VM、ゾーン 2 が 3 VM、ゾーン 3 が 3 VM であるスケール セットは、バランスが取れていないものと考えられます。 ゾーン 1 の VM 数は、ゾーン 2 および 3 と比べて 2 個少ないです。

スケール セットでの VM の作成は成功するかもしれませんが、それらの VM での拡張機能はデプロイに失敗します。 スケール セットのバランスが取れているかどうかを判断するとき、これらの拡張機能が失敗する VM もカウントされます。 たとえば、ゾーン 1 が 3 VM、ゾーン 2 が 3 VM、ゾーン 3 が 3 VM であるスケール セットは、ゾーン 1 のすべての拡張機能が失敗し、ゾーン 2 と 3 のすべての拡張機能が成功した場合でも、バランスが取れているものと見なされます。

ベスト エフォートのゾーン バランスでは、スケール セットはバランスを維持しながらスケールインとスケールアウトを試みます。 ただし、何らかの理由によりゾーン バランスが不可能な場合 (たとえば、1 つのゾーンがダウンして、スケール セットがそのゾーンに新しい VM を作成できなくなった場合)、スケール セットは、スケールインまたはスケールアウトを成功させるため、一時的なアンバランスを許可します。後続のスケールアウトの試行では、スケール セットは、スケール セットのバランスを取るために VM を増やす必要があるゾーンに VM を追加します。 同様に、後続のスケールインの試行では、スケール セットは、スケール セットのバランスを取るために VM を少なくする必要があるゾーンから VM を削除します。 "厳密なゾーン バランス" では、実行することによってバランスが崩れるスケールインまたはスケールアウトの試行はすべて失敗します。

ベスト エフォートのゾーン バランスを使うには、zoneBalancefalse に設定します。 この設定は API バージョン 2017-12-01 の既定値です。 厳密なゾーン バランスを使うには、zoneBalancetrue に設定します。

Note

zoneBalance プロパティを設定できるのは、スケール セットの zones プロパティに複数のゾーンが含まれている場合のみです。 ゾーンが指定されていない場合、またはゾーンが 1 つしか指定されていない場合は、zoneBalance プロパティを設定しないでください。

ゾーン スパニングまたはゾーン単位のスケール セットを作成する

仮想マシン スケール セットを展開するときは、1 つのリージョン内の単一の可用性ゾーンまたは複数のゾーンを使うことができます。

次のいずれかの方法で、可用性ゾーンを使うスケール セットを作成できます。

Azure ポータルの使用

可用性ゾーンを使うスケール セットを作成するプロセスは、使用の開始に関する記事で詳しく説明されているものと同じです。 次の例で示すように、サポートされている Azure リージョンを選ぶときに、使用可能なゾーンの 1 つ以上にスケール セットを作成できます。

単一の可用性ゾーンにスケール セットを作成する

スケール セットと、Azure ロード バランサーやパブリック IP アドレスなどのそれをサポートするリソースは、指定した 1 つのゾーンに作成されます。

Azure CLI の使用

可用性ゾーンを使うスケール セットを作成するプロセスは、使用の開始に関する記事で詳しく説明されているものと同じです。 可用性ゾーンを使うには、サポートされている Azure リージョンにスケール セットを作成する必要があります。

--zones パラメーターを az vmss create コマンドに追加して、使うゾーンを指定します (ゾーン 123 など)。

az vmss create \
    --resource-group myResourceGroup \
    --name myScaleSet \
    --image <SKU Image> \
    --upgrade-policy-mode automatic \
    --admin-username azureuser \
    --generate-ssh-keys \
    --zones 1 2 3

指定したゾーンにスケール セットのすべてのリソースと VM が作成および構成されるのに、数分かかります。 ゾーン冗長スケール セットとネットワーク リソースの完全な例については、こちらのサンプル CLI スクリプトをご覧ください

Azure PowerShell の使用

可用性ゾーンを使うには、サポートされている Azure リージョンにスケール セットを作成する必要があります。 -Zone パラメーターを New-AzVmssConfig コマンドに追加し、使うゾーン (1 つまたは複数) を指定します (ゾーン 123 など)。

New-AzVmss `
  -ResourceGroupName "myResourceGroup" `
  -Location "EastUS2" `
  -VMScaleSetName "myScaleSet" `
  -VirtualNetworkName "myVnet" `
  -SubnetName "mySubnet" `
  -PublicIpAddressName "myPublicIPAddress" `
  -LoadBalancerName "myLoadBalancer" `
  -UpgradePolicy "Automatic" `
  -Zone "1", "2", "3"

Azure リソース マネージャー テンプレートの使用

可用性ゾーンを使うスケール セットを作成するプロセスは、Linux または Windows での使用の開始に関する記事で詳しく説明されているものと同じです。

{
  "type": "Microsoft.Compute/virtualMachineScaleSets",
  "name": "myScaleSet",
  "location": "East US 2",
  "apiVersion": "2017-12-01",
  "zones": [
        "1",
        "2",
        "3"
      ]
}

パブリック IP アドレスまたはロード バランサーを作成する場合、ゾーン冗長ネットワーク リソースを作成するには、"sku": {"name":"Standard"} プロパティを指定します。 また、ネットワーク セキュリティ グループとルールを作成して、すべてのトラフィックを許可する必要があります。 詳しくは、「Azure Load Balancer Standard の概要」および「Standard Load Balancer と可用性ゾーン」をご覧ください。

ゾーン冗長スケール セットとネットワーク リソースの完全な例については、Resource Manager テンプレートのサンプルをご覧ください。

Availability Zones を追加するようにスケール セットを更新する

スケールを変更して、VM インスタンスを分散させるゾーンを拡張できます。 拡張すると、リージョンの可用性 SLA (99.95%) と比べてさらに高いゾーンの可用性 SLA (99.99%) を利用できます。 または、スケール セットの作成時には使用できなかった新しい可用性ゾーンを利用するには、スケール セットを拡張します。

重要

可用性ゾーンを追加するための Virtual Machine Scale Sets の更新は、現在プレビュー段階です。 プレビュー版は、追加の使用条件に同意することを条件に使用できます。 この機能の一部の側面は、一般公開 (GA) 前に変更される可能性があります。

重要

この機能は、Virtual Machine Scale Sets でのステートレス ワークロードを対象としています。 ステートフル ワークロードを含むスケール セット、または Service Fabric または Azure Kubernetes Services で使われるスケール セットは、ゾーン拡張ではサポートされていません

この機能は、API バージョン 2023-03-01 以降で使用できます。

サブスクリプションでゾーン拡張機能を使用できるようにする

サブスクリプションで 4 つの機能フラグに登録する必要があります。

az feature register --namespace Microsoft.Compute --name VmssAllowRegionalToZonalMigration
az feature register --namespace Microsoft.Compute --name VmssAllowExpansionOfAvailabilityZones
az feature register --namespace Microsoft.Compute --name VmssFlexAllowExpansionOfAvailabilityZones
az feature register --namespace Microsoft.Compute --name VmssFlexAllowRegionalToZonalMigration

次のようにして、各機能の登録状態をチェックできます。

az feature show --namespace Microsoft.Compute --name \<feature-name\>

可用性ゾーンを使用するようにスケール セットを拡張する

スケール セットを更新して、1 つ以上、リージョンでサポートされている可用性ゾーンの数までの追加の可用性ゾーンに、インスタンスをスケールアウトできます。 ゾーンをサポートするリージョンの場合、ゾーンの最小数は 3 です。

重要

スケールセットを追加ゾーンに拡張しても、元のインスタンスは移行または変更されません。 スケールアウトすると、新しいインスタンスが作成され、選択した Availability Zones に均等に分散されます。 スケール セットをスケールインすると、リージョン インスタンスから優先して削除されます。 その後、インスタンスは、Policy のスケールに基づいて削除されます。

ゾーン スケール セットへの拡張は、3 つのステップで行われます。

  1. ゾーンの拡張を準備する
  2. スケール セットで zones パラメーターを更新する
  3. 新しいゾーン インスタンスを追加し、元のインスタンスを削除する

ゾーンの拡張を準備する

警告

この機能により、スケール セットにゾーンを追加できます。 リージョン スケール セットに戻したり、追加されたゾーンを削除したりすることはできません。

ゾーン拡張の準備を行うには:

  • 選択したリージョン内の VM サイズに、さらに多くのインスタンスを処理するための十分なクォータがあることを確認します
  • 使っている VM サイズとディスクの種類が、目的のすべてのゾーンで利用できることを確認します。 Compute Resources SKUs API を使って、どのゾーンでどのサイズを利用できるかを確認できます
  • スケール セットの構成がゾーン スケール セットに対して有効であることを検証します。
    • platformFaultDomainCount が 1 または 5 に設定されている必要があります。 2 または 3 個の障害ドメインを使用する固定分散は、ゾーン デプロイではサポートされていません。
    • 容量予約は、ゾーン拡張の間はサポートされません。 スケール セットが完全にゾーン単位になったら (リージョン インスタンスがなくなった場合)、スケール セットに容量予約グループを追加できます。
    • Azure Dedicated Host のデプロイはサポートされていません。

スケール セットで zones パラメーターを更新する

zones パラメーターを変更するにはスケール セットを更新します。

  1. 更新するスケール セットに移動します
  2. スケール セットのランディング ページの [プロパティ] タブで、[可用性ゾーン] プロパティを見つけて、[編集] を選びます
  3. [場所の編集] ダイアログ ボックスで、目的のゾーンを選びます
  4. [適用] を選択します

新しいゾーン インスタンスを追加し、元のインスタンスを削除する

手動でスケールアウトとスケールインを行う

インスタンスを追加するには、スケール セットの容量を更新します。 新しい容量は、元の容量と新しいインスタンスの数に設定する必要があります。 たとえば、スケール セットに 5 つのリージョン インスタンスがあり、3 つの各ゾーンに 3 つのインスタンスが含まれるようにスケールアウトする場合は、容量を 14 に設定する必要があります。

zones パラメーターとスケール セットの容量は、同じ ARM テンプレートまたは REST API 呼び出しで更新できます。

新しいインスタンスの準備ができたら、スケール セットをスケールインして、元のリージョン インスタンスを削除します。 特定のリージョン インスタンスを手動で削除するか、スケール セットの容量を減らしてスケールインすることができます。 スケール セットの容量を減らすことでスケールインすると、プラットフォームは常にリージョン インスタンスの削除を優先してから、スケールイン ポリシーに従います。

ローリング アップグレードと MaxSurge を使用して自動化する

ローリング アップグレードと MaxSurge を使うと、新しいゾーン インスタンスが作成され、最新のスケール モデルで最新の状態に一括更新されます。 新しいインスタンスのバッチがスケール セットに追加され、正常であると報告されると、古いインスタンスのバッチがスケール セットから自動的に削除されます。 すべてのインスタンスが最新の状態になるまで更新が続けられます。

重要

ローリング アップグレードと MaxSurge は、現在パブリック プレビュー段階です。 VMSS 均一オーケストレーション モードでのみ使用できます。

既知の問題と制限事項

  • この機能の対象は、Virtual Machine Scale Sets でのステートレス ワークロードです。

  • Service Fabric または Azure Kubernetes Service を実行しているスケール セットはサポートされていません。

  • ゾーンを削除または置換することはできず、ゾーンの追加だけができます

  • ゾーン スパニングまたはゾーン単位のスケール セットからリージョン スケール セットに更新することはできません。

  • platformFaultDomainCount が 1 または 5 に設定されている必要があります。 2 または 3 個の障害ドメインを使用する固定分散は、ゾーン デプロイではサポートされていません。

  • 容量予約は、ゾーン拡張の間はサポートされません。 スケール セットが完全にゾーン単位になったら (リージョン インスタンスがなくなった場合)、スケール セットに容量予約グループを追加できます。

  • Azure Dedicated Host のデプロイはサポートされていません

次のステップ

可用性ゾーンにスケール セットを作成したので、次に、仮想マシン スケール セットにアプリケーションを展開する方法または仮想マシン スケール セットで自動スケールを使用する方法を学習できます。