次の方法で共有


Virtual Machine Scale Sets の信頼性

この記事には、特定の信頼性に関する推奨事項と、Virtual Machine Scale Sets の可用性ゾーンのサポートに関する情報が含まれています。

Note

Virtual Machine Scale Sets は、1 つのリージョンにのみデプロイできます。 複数のリージョンに VM をデプロイする場合は、仮想マシンのディザスター リカバリー: リージョン間フェールオーバーを参照してください。

Azure における信頼性のアーキテクチャ概要については、「Azure の信頼性」を参照してください。

信頼性に関する推奨事項

このセクションには、Azure Virtual Machines の回復性と可用性を実現するためのレコメンデーションが含まれています。 各レコメンデーションは、次の 2 つのカテゴリのいずれかに分類されます:

  • 正常性項目には、構成項目などの領域と、Azure リソースの構成設定、他のサービスへの依存関係など、Azure ワークロードを構成する主要コンポーネントの適切な機能をカバーします。

  • リスク項目は、可用性と回復の要件、テスト、監視、デプロイ、その他の項目など、未解決のままである場合に環境で問題が発生する可能性が高まる領域をカバーします。

信頼性に関する推奨事項の優先順位マトリックス

各推奨事項は、次の優先順位マトリックスに従ってマークされます。

Image 優先度 説明
直ちに修正が必要です。
Medium 3 から 6 か月以内に修正してください。
確認が必要です。

信頼性に関する推奨事項の概要

カテゴリ Priority 推奨
高可用性 自動修復ポリシーを有効にする
Virtual Machine Scale Sets Flex を使用して可用性ゾーン間に Virtual Machine Scale Sets をデプロイする
スケーラビリティ VMSS-1: フレキシブル オーケストレーション モードで VM をデプロイする
Virtual Machine Scale Sets の自動スケーリングを "自動" に構成する
Virtual Machine Scale Sets のカスタム スケールイン ポリシーを既定に設定する
ディザスター リカバリー すべての Virtual Machine Scale Sets VM で保護ポリシーを有効にする
Monitoring Virtual Machine Scale Sets のアプリケーションの正常性監視を有効にする
システムの効率 割り当てポリシーの拡散アルゴリズムを最大拡散に構成する
Automation パッチ オーケストレーション オプションを "Azure による調整" に設定する

高可用性

自動修復ポリシーを有効にする

アプリケーションの高可用性を実現するには、自動インスタンス修復を有効にして、正常な VM のセットを維持します。 Application Health 拡張機能または Load Balancer 正常性プローブでインスタンスが異常であることが検出されると、自動インスタンス修復によって異常なインスタンスが削除され、それを置き換える新しいインスタンスが作成されます。

プロパティ automaticRepairsPolicy.gracePeriod を使用して猶予期間を設定できます。 猶予期間は分単位 (ISO 8601 形式) で指定され、10 ~ 90 分の範囲で指定できます。デフォルト値は 30 分です。

// Azure Resource Graph Query
// Find VMSS instances associated with autoscale settings when autoscale is disabled
resources
| where type == "microsoft.compute/virtualmachinescalesets"
| project name, id, tags
| join kind=leftouter  (
    resources
    | where type == "microsoft.insights/autoscalesettings"
    | where tostring(properties.targetResourceUri) contains "Microsoft.Compute/virtualMachineScaleSets"
    | project id = tostring(properties.targetResourceUri), autoscalesettings = properties
) on id
| where isnull(autoscalesettings) or autoscalesettings.enabled == "false"
| project recommendationId = "vmss-4", name, id, tags, param1 = "autoscalesettings: Disabled"
| order by id asc

Virtual Machine Scale Sets Flex を使用して可用性ゾーン間に Virtual Machine Scale Sets をデプロイする

Virtual Machine Scale Sets を作成する場合は、可用性ゾーンを使用して、データセンター全体に及ぶ万一の障害からアプリケーションとデータを保護します。 詳細については、可用性ゾーンのサポートを参照してください。

// Azure Resource Graph Query
// Find VMSS instances with one or no Zones selected
resources
| where type == "microsoft.compute/virtualmachinescalesets"
| where array_length(zones) <= 1 or isnull(zones)
| project recommendationId = "vmss-8", name, id, tags, param1 = "AvailabilityZones: Single Zone"
| order by id asc

スケーラビリティ

フレキシブル オーケストレーション モードで VM をデプロイする

アプリケーションのスケーリングと可用性を将来にわたって保証するには、単一インスタンス VM を含むすべての VM をフレキシブル オーケストレーション モード を使用してスケール セットにデプロイする必要があります。 フレキシブル オーケストレーションでは、リージョン内または可用性ゾーン内の障害ドメイン全体に VM を拡散することで、 (最大 1,000 個の VM までの) 高可用性を保証します。

スケール セットを適切に使用する方法の詳細については、「いつ VM の代わりに Virtual Machine Scale Sets を使用するべきか」を参照してください。

// Azure Resource Graph Query
// Find all zonal VMs that are NOT deployed with Flex orchestration mode
resources
| where type == "microsoft.compute/virtualmachinescalesets"
| where properties.orchestrationMode != "Flexible"
| project recommendationId = "vmss-1", name, id, tags, param1 = strcat("orchestrationMode: ", tostring(properties.orchestrationMode))

Virtual Machine Scale Sets の自動スケーリングを "自動" に構成する

自動スケーリングは Azure Monitor の組み込み機能であり、需要に基づいてスケール セット VM を追加したり削除したりすることで、リソースのパフォーマンスとコスト効率を向上させることができます。 さらに、リソースを特定のインスタンス数に手動でスケーリングしたり、メトリックのしきい値に従ってスケーリングしたりすることができます。 指定された時間枠内にスケーリングするインスタンス数をスケジュールすることもできます。

OS イメージの自動アップグレードを有効にする方法については、Azure Virtual Machine Scale Sets の OS イメージの自動アップグレードを参照してください。

// Azure Resource Graph Query
// Find VMSS instances associated with autoscale settings when predictiveAutoscalePolicy_scaleMode is disabled
resources
| where type == "microsoft.compute/virtualmachinescalesets"
| project name, id, tags
| join kind=leftouter  (
    resources
    | where type == "microsoft.insights/autoscalesettings"
    | where tostring(properties.targetResourceUri) contains "Microsoft.Compute/virtualMachineScaleSets"
    | project id = tostring(properties.targetResourceUri), autoscalesettings = properties
) on id
| where autoscalesettings.enabled == "true" and autoscalesettings.predictiveAutoscalePolicy.scaleMode == "Disabled"
| project recommendationId = "vmss-5", name, id, tags, param1 = "predictiveAutoscalePolicy_scaleMode: Disabled"
| order by id asc

Virtual Machine Scale Sets のカスタム スケ-ルイン ポリシーを既定に設定する

Virtual Machine Scale Sets のカスタム スケールイン ポリシー機能を使用すると、仮想マシンがスケールインされる順序を構成できます。 次の 3 つのスケールイン ポリシー構成があります。

仮想マシン スケール セットのデプロイは、プラットフォームのメトリックやユーザー定義のカスタム メトリックなどの、メトリックの配列に基づいて、スケールアウトまたはスケールインできます。 スケールアウトではスケール セット モデルに基づいて新しい仮想マシンが作成されるのに対し、スケールインでは、スケール セットのワークロードの変化に応じて、構成や機能が異なる可能性のある実行中の仮想マシンが調整されます。

既定のカスタム スケールイン ポリシーは、ほとんどのシナリオに最適なアルゴリズムと柔軟性を提供するため、既定の順序に従うだけの場合は、スケールイン ポリシーを指定する必要はありません。 既定の順序は次のとおりです。

  1. 可用性ゾーン間で仮想マシンを均衡させます (スケール セットが可用性ゾーンのサポートでデプロイされている場合)。
  2. 障害ドメイン間で仮想マシンを均衡させます (ベスト エフォート)。
  3. インスタンス ID が最も大きい仮想マシンを削除します。

可用性ゾーン間で VM が均衡された後、ワークロードで最も古い VM または最も新しい VM を削除する必要がある場合にのみ Newest ポリシーと Oldest ポリシーを使用してください。

Note

可用性ゾーン間または障害ドメイン間で VM を均衡させる場合、可用性ゾーンまたは障害ドメインの間で VM が移動されることはありません。 仮想マシンの分散が均衡するまで、不均衡な可用性ゾーンまたは障害ドメインから仮想マシンを削除することによって均衡が実現されます。

// Azure Resource Graph Query
// Find VMSS instances where strictly zoneBalance is set to True
resources
| where type == "microsoft.compute/virtualmachinescalesets"
| where properties.orchestrationMode == "Uniform" and properties.zoneBalance == true
| project recommendationId = "vmss-6", name, id, tags, param1 = "strictly zoneBalance: Enabled"
| order by id asc

障害復旧

すべての Virtual Machine Scale Sets VM で保護ポリシーを有効にする

特定の VM をスケール セット インスタンスの他の部分とは異なる方法で処理する場合は、Virtual Machine Scale Sets の保護ポリシーを使用します。

アプリケーションがトラフィックを処理する際に、特定の VM をスケール セット インスタンスの他の部分とは異なる方法で処理したい場合があります。 たとえば、スケール セット内の特定の VM が長時間にわたって操作を実行している可能性があるため、操作が完了するまでそれらの VM をスケールインしたくないことがあります。 また、スケール セット内の数個の VM に特殊な機能を与えて、スケール セットの他のメンバーとは異なるタスクを実行させる場合もあります。 これらの特殊な VM は、スケール セット内の他の VM と一緒に変更されないようにする必要があります。 インスタンス保護は、これらのシナリオや他のシナリオをアプリケーションで有効にするための追加の制御を提供します。

// Azure Resource Graph Query
// Find all VMs that do NOT have health monitoring enabled
resources
| where type == "microsoft.compute/virtualmachinescalesets"
| join kind=leftouter  (
    resources
    | where type == "microsoft.compute/virtualmachinescalesets"
    | mv-expand extension=properties.virtualMachineProfile.extensionProfile.extensions
    | where extension.properties.type in ( "ApplicationHealthWindows", "ApplicationHealthLinux" )
    | project id
) on id
| where id1 == ""
| project recommendationId = "vmss-2", name, id, tags, param1 = "extension: null"

監視

Virtual Machine Scale Sets のアプリケーションの正常性監視を有効にする

お使いのアプリケーションの正常性の監視は、ご自身のデプロイを管理およびアップグレードするための重要なシグナルです。 Azure Virtual Machine Scale Sets は、次のようなローリング アップグレードのサポートを提供します。

// Azure Resource Graph Query
// Find all VMs that do NOT have automatic repair policy enabled
resources
| where type == "microsoft.compute/virtualmachinescalesets"
| where properties.automaticRepairsPolicy.enabled == false
| project recommendationId = "vmss-3", name, id, tags, param1 = "automaticRepairsPolicy: Disabled"

システムの効率

割り当てポリシーの拡散アルゴリズムを最大拡散に構成する

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

詳細については、拡散オプションを参照してください。

// Azure Resource Graph Query
// Find VMSS instances where Spreading algorithm is set to Static
resources
| where type == "microsoft.compute/virtualmachinescalesets"
| where properties.platformFaultDomainCount > 1
| project recommendationId = "vmss-7", name, id, tags, param1 = "platformFaultDomainCount: Static"
| order by id asc

Automation

パッチ オーケストレーション オプションを "Azure による調整" に設定する

Azure VM に対する VM ゲストの自動パッチ適用を有効にします。 VM ゲストの自動パッチ適用では、VM の影響範囲を制限しながら、セキュリティ コンプライアンスを維持するために安全かつ自動的に VM にパッチを適用することで、更新管理を容易にします。

resources
| where type == "microsoft.compute/virtualmachinescalesets"
| join kind=inner (
    resources
    | where type == "microsoft.compute/virtualmachines"
    | project id = tostring(properties.virtualMachineScaleSet.id), vmproperties = properties
) on id
| extend recommendationId = "vmss-9", param1 = "patchMode: Manual", vmproperties.osProfile.linuxConfiguration.patchSettings.patchMode
| where isnotnull(vmproperties.osProfile.linuxConfiguration) and vmproperties.osProfile.linuxConfiguration.patchSettings.patchMode !in ("AutomaticByPlatform", "AutomaticByOS")
| distinct recommendationId, name, id, param1
| union (resources
| where type == "microsoft.compute/virtualmachinescalesets"
| join kind=inner (
    resources
    | where type == "microsoft.compute/virtualmachines"
    | project id = tostring(properties.virtualMachineScaleSet.id), vmproperties = properties
) on id
| extend recommendationId = "vmss-9", param1 = "patchMode: Manual", vmproperties.osProfile.windowsConfiguration.patchSettings.patchMode
| where isnotnull(vmproperties.osProfile.windowsConfiguration) and vmproperties.osProfile.windowsConfiguration.patchSettings.patchMode !in ("AutomaticByPlatform", "AutomaticByOS")
| distinct recommendationId, name, id, param1)

可用性ゾーンのサポート

Azure 可用性ゾーンとは、各 Azure リージョン内にある、3 つ以上に物理的に分離されたデータセンターのグループです。 各ゾーン内のデータセンターには、独立した電源、冷却手段、ネットワーク インフラストラクチャが備わっています。 ローカル ゾーンの障害が発生した場合、可用性ゾーンは、1 つのゾーンが影響を受けたときに、リージョンのサービス、容量、高可用性が残りの 2 つのゾーンによってサポートされるように設計されています。

障害の範囲は、ソフトウェアやハードウェアの障害から、地震、水害、火災などの事象に至る可能性があります。 Azure サービスの冗長と論理的な分離により、障害に対するトレランスが実現されます。 Azure の可用性ゾーンの詳細については、リージョンと可用性ゾーンに関する記事を参照してください。

Azure の可用性ゾーン対応サービスは、適切なレベルの信頼性と柔軟性を提供するように設計されています。 それらは 2 つの方法で構成できます。 それらは、ゾーン間の自動レプリケーションによるゾーン冗長、またはインスタンスを特定のゾーンにピン留めするゾーンベースのいずれかになります。 これらのアプローチを組み合わせることもできます。 ゾーン ベースとゾーン冗長のアーキテクチャの比較の詳細については、「可用性ゾーンとリージョンの使用に関する推奨事項」を参照してください。

Azure Virtual Machine Scale Sets では、負荷分散が行われる VM のグループを作成および管理できます。 需要または定義されたスケジュールに応じて、VM の数を自動的に増減させることができます。 スケール セットは、アプリケーションの高可用性を実現します。また、多数の VM の一元的な管理、構成、更新を可能にします。 スケール セット自体にコストはかかりません。 料金は、作成した各 VM インスタンスに対してのみ発生します。

Virtual Machine Scale Sets は、リージョン内のゾーン デプロイとゾーン冗長デプロイの両方をサポートしています。

  • ゾーン デプロイ。 単一のゾーンにスケール セットを作成する場合は、そのセットのすべての VM が実行されるゾーンをユーザーが制御します。 スケール セットはそのゾーン内でのみ管理および自動スケーリングされます。

  • ゾーン冗長デプロイ。 ゾーン冗長スケール セットを使うと、複数のゾーンにまたがる単一のスケール セットを作成できます。 既定では、VM が作成されると、ゾーン間で均等に VM がバランスされます。

前提条件

  1. 可用性ゾーンを使用するには、サポートされている Azure リージョンにスケール セットを作成する必要があります。

  2. アプリケーションのスケーリングと可用性を将来にわたって保証するために、たとえ単一インスタンス VM であっても、すべての VM をフレキシブル オーケストレーション モードを使用してスケール セットにデプロイする必要があります。

SLA

可用性ゾーンは物理的に分離されており、個別の電源、ネットワーク、冷却装置を備えているため、SLA (サービス レベル アグリーメント) が向上します。 詳細については、Microsoft Online Services の SLA を参照してください。

可用性ゾーンを有効にして Virtual Machine Scale Sets を作成する

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

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

Create a scale set in a single availability zone

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

ゾーン フェールオーバーのサポート

ゾーンのない Azure リージョンで仮想マシン スケール セットに対して既定で作成される障害ドメインの数は 5 個です。 Virtual Machine Scale Sets の可用性ゾーン デプロイがサポートされるリージョンで、このオプションが選択されている場合、障害ドメインの数の既定値はゾーンごとに 1 個です。 この場合の FD = 1 とは、スケール セットに属する VM インスタンスがベスト エフォート ベースで多くのラックに拡散されていることを意味します。 詳細については、「Virtual Machine Scale Sets に対する障害ドメインの適切な数を選択する」を参照してください。

低待機時間デザイン

ゾーン冗長を使用して Virtual Machine Scale Sets を構成することをお勧めします。 ただし、低待機時間がアプリケーションの厳密な要件である場合は、ゾーン スケール セット VM を実装しなければならない場合があります。 ゾーン スケール セットのデプロイでは、複数のゾーンにわたって複数のスケール セット VM を作成することをお勧めします。 たとえば、ゾーン 1 に固定された 1 つのスケール セット インスタンスと、ゾーン 2 または 3 に固定された 1 つのインスタンスを作成できます。 また、ロード バランサーまたはその他のアプリケーション ロジックを使用して、ゾーンの停止中にトラフィックを適切なスケール セットに転送する必要があります。

重要

ゾーン対応のデプロイをオプトアウトすると、基になる障害の分離からの保護を放棄することになります。 可用性ゾーン構成からオプトアウトすると、ゾーンの配置と分離に従わないリソース (これらのリソースの基になる依存関係を含む) への依存が強制されます。 これらのリソースが、ゾーンダウン シナリオで存続することは期待できません。 このようなリソースを活用するソリューションでは、ディザスター リカバリー戦略を定義し、別のリージョンでソリューションの復旧を構成する必要があります。

安全なデプロイ手法

VM をデプロイする場所をより細かく制御するには、リージョン スケール セット VM ではなく、ゾーン スケール セット VM をデプロイする必要があります。 ただし、ゾーン VM はゾーン分離のみを提供し、ゾーン冗長は提供しません。 ゾーン VM で完全なゾーン冗長性を実現するには、異なるゾーンにまたがって 2 つ以上の VM が存在する必要があります。

ゾーン冗長 VM には、最大拡散デプロイ オプションを使用することもお勧めします。 詳細については、拡散オプションを参照してください。

拡散オプション

スケール セットを 1 つ以上の可用性ゾーンにデプロイする場合は、次の拡散オプションがあります (API バージョン 2017-12-01 以降)。

  • 最大拡散 (platformFaultDomainCount = 1)。 ほとんどの場合、最適な拡散が提供されるため、最大拡散が推奨されるデプロイ オプションです。 個別のハードウェア分離ユニットにレプリカを拡散する場合は、複数の可用性ゾーンに拡散し、各ゾーン内で最大拡散を利用することを勧めします。

    最大拡散を選ぶと、スケール セットは各ゾーン内の可能な限り多くの障害ドメインに VM を拡散します。 この拡散では、ゾーンごとの障害ドメインが 5 個より多く、または少なくなる可能性があります。

    Note

    最大拡散では、VM が拡散される障害ドメインの数に関係なく、スケール セット VM インスタンス ビューとインスタンス メタデータの両方に既定のドメインが 1 つしか表示されません。 各ゾーン内の拡散は暗黙で行われます。

  • 静的固定拡散 (platformFaultDomainCount = 5)。 静的固定拡散を使用すると、スケール セットはゾーンあたり 5 個の障害ドメインに VM を拡散します。 スケール セットが割り当て要求を満たすためにゾーンごとに 5 個の個別の障害ドメインを見つけられない場合、要求は失敗します。

  • マネージド ディスクの障害ドメインの数に合わせた拡散 (platformFaultDomainCount = 2 または 3)。スケール セットの障害ドメインの数をマネージド ディスクの障害ドメインの数に合わせることを検討できます。 数を一致させると、マネージド ディスクの障害ドメイン全体がダウンした場合に必要最小数が失われることを防止できます。 障害ドメインの数を、各リージョンで使用可能なマネージド ディスクの障害ドメインの数以下に設定することができます。 リージョンごとのマネージド ディスクの障害ドメインの数については、[ここにドキュメントを挿入](リンクはここ) を参照してください。

ゾーン バランス

複数のゾーンにまたがってデプロイされるスケール セット (ゾーン冗長) の場合は、ベスト エフォートのゾーンバランスまたは厳密なゾーンバランスのどちらかを選択できます。 各ゾーンにスケール セット内の他のすべてのゾーンと同じ数 (プラスマイナス 1 個) の VM があれば、スケール セットは「バランスが取れている」と見なされます。 次に例を示します。

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

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

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

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

可用性ゾーン サポートに移行する

リージョン スケール セットを可用性ゾーン サポートに再デプロイする方法については、仮想マシンと Virtual Machine Scale Sets を可用性ゾーン サポートに移行するを参照してください。

その他のガイダンス

配置グループ

重要

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

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

次のステップ