Azure Virtual Machine Scale Sets は、仮想マシン (VM) インスタンスのグループを作成および管理するために使用できる Azure コンピューティング リソースです。 需要または定義されたスケジュールに応じて、VM インスタンスの数を自動的に増減させることができます。 仮想マシン スケール セットは、複数の可用性ゾーンと障害ドメインに VM を分散することで、アプリケーションの可用性と回復性を高めるのに役立ちます。
Azure を使用する場合、 信頼性は共有責任です。 Microsoft では、回復性と回復性をサポートするさまざまな機能を提供しています。 使用するすべてのサービスでこれらの機能がどのように機能するかを理解し、ビジネス目標とアップタイムの目標を達成するために必要な機能を選択する必要があります。
この記事では、一時的な障害、可用性ゾーンの停止、リージョンの停止、VM の再構成、サービス メンテナンスなど、さまざまな潜在的な障害や問題に対して仮想マシン スケール セットの回復性を確保する方法について説明します。 また、バックアップを使用して他の種類の問題から復旧する方法についても説明し、仮想マシン スケール セットのサービス レベル アグリーメント (SLA) に関する重要な情報を強調しています。
Important
スケール セットとその VM の信頼性を考慮する場合は、VM で実行されるディスク、ネットワーク インフラストラクチャ、アプリケーションの信頼性も考慮する必要があります。 VM の回復性を向上させるだけで、他のコンポーネントに等しい回復性がない場合は、影響が制限される可能性があります。 回復性の要件によっては、複数の領域で構成の変更が必要になる場合があります。
運用環境のデプロイに関する推奨事項
Azure Well-Architected Framework には、信頼性、パフォーマンス、セキュリティ、コスト、運用に関する推奨事項が用意されています。 これらの領域が相互にどのように影響し、信頼性の高い仮想マシン スケール セット ソリューションに貢献するかについては、 Well-Architected Framework での Azure Virtual Machines とスケール セットのアーキテクチャのベスト プラクティスに関するページを参照してください。
信頼性アーキテクチャの概要
スケール セットは複数の VM インスタンスをグループ化し、一元化された構成、自動スケール ルール、ローリング アップグレードを適用します。
スケール セットでは、次の 2 つの異なる オーケストレーション モードがサポートされます。
- 柔軟なスケール セット (推奨) により、個々の VM インスタンスをデプロイおよび管理する柔軟性が向上します。
- 均一スケール セット は、同じ構成の VM をデプロイし、それらをグループとして管理します。
障害ドメインの拡散
障害ドメインは、 データセンター内の障害分離グループです。 各障害ドメインはサーバー ラックに似ています。これは、同じ電源、ネットワーク、冷却、プラットフォームのメンテナンス スケジュールを共有するハードウェア ノードのコレクションです。 各スケール セットの VM インスタンスは複数の障害ドメインに分散されるため、1 つの障害ドメインで発生する計画的または計画外の停止は、他の障害ドメインの VM インスタンスには影響しない可能性があります。
スケール セットをデプロイすると、VM が分散する障害ドメインの数を制御できます。 ほとんどのシナリオでは、 最大拡散動作を 使用します。この動作では、可能な限り多くの障害ドメインが使用されます。 詳細については、「 仮想マシン スケール セットの適切な数の障害ドメインを選択する」を参照してください。
可用性ゾーンがあるリージョンでは、各ゾーンに個別の障害ドメインのセットがあります。 ゾーンスパン スケール セットを作成すると、インスタンスはスケール セットが使用する各ゾーンの障害ドメインに分散されます。
負荷分散
スケール セットは、Azure Load Balancer や Azure Application Gateway などの Azure 負荷分散サービスと統合できます。 スケール セットがインスタンスを追加または削除すると、組み込みのロード バランサー統合によってロード バランサーの構成が自動的に更新されます。 詳細については、「 仮想マシン スケール セットのネットワーク」を参照してください。
スケール セットには、インスタンスのデプロイ、スケーリング、配布、更新の方法に影響する他の多くのコントロールと機能が含まれています。 詳細については、「 仮想マシン スケール セットの概要」を参照してください。
一時的な障害に対する回復性
一時的な障害は、コンポーネントにおける短い断続的な障害です。 これらはクラウドのような分散環境で頻繁に発生し、運用の通常の範囲であり、 一時的な障害は、短時間の経過後に自分自身を修正します。 アプリケーションで一時的な障害を処理できることは重要です。通常は、影響を受ける要求を再試行します。
クラウドでホストされるすべてのアプリケーションは、クラウドでホストされている API、データベース、およびその他のコンポーネントと通信する際に、Azure の一時的な障害処理のガイダンスに従う必要があります。 詳細については、「一時的な障害を処理するための推奨事項」を参照してください。
VM で実行されるアプリケーションでは、サービスの一時的な中断がワークロードに影響しないように、適切な障害処理戦略を実装する必要があります。
インスタンスの問題に対する回復性
スケール セットが VM インスタンスの作成または削除タスクを開始すると、操作が失敗する可能性があります。 失敗した VM インスタンスの作成または削除タスクを自動的に再試行するには、 仮想マシン スケール セット (プレビュー) の回復力のある作成と削除機能の使用を検討してください。
インスタンスの実行中に問題が発生する可能性があります。 たとえば、アプリケーションのクラッシュやリソースの枯渇により、インスタンスが応答しなくなる可能性があります。 インスタンスの自動修復を使用して、アプリケーションの正常性を監視し、必要に応じ VM インスタンスを自動的に再起動、再イメージ化、または置き換えます。
可用性ゾーンの障害に対する回復性
可用性ゾーン は、Azure リージョン内のデータセンターの物理的に分離されたグループです。 1 つのゾーンで障害が発生した際には、サービスを残りのゾーンのいずれかにフェールオーバーできます。
仮想マシン スケール セットは、ゾーンスパン構成とゾーン構成の両方で可用性ゾーンをサポートします。
ゾーンにまたがるスケール セットは、選択した複数の可用性ゾーンにインスタンスを分散させます。
VM インスタンスを可用性ゾーンに分散すると、最高の SLA が得られます。 Azure のほとんどの VM ベースのワークロードには、ゾーンにまたがるスケール セットを使用することをお勧めします。
ゾーンスパン スケール セットでは、各 VM インスタンスとそのディスクは特定の可用性ゾーンに関連付けられます。 すべてのゾーンが正常な場合、インスタンスは、高パフォーマンスで待機時間の短いネットワークを使用してゾーン間で通信できます。 ゾーンで障害や接続の問題が発生した場合、他のゾーン内のインスタンスは影響を受けません。
既定では、スケール セットはベスト エフォートアプローチを使用して、選択したゾーン間でインスタンスを均等に分散します。 ただし、厳密な分散が必要な場合は、 ゾーン分散の構成を変更できます。
次の図は、ゾーンにまたがるスケール セットが 3 つのゾーンに分散し、各ゾーンに 1 つのインスタンスが存在することを示しています。
ゾーン スパニングは他の Azure サービスの ゾーン冗長 に似ていますが、ゾーンがダウンしている場合、スケール セットではゾーン間またはフェールオーバー間でのデータの自動レプリケーションは提供されません。 一部の異常な状況では、ゾーンにまたがるスケール セットのインスタンスが 1 つのゾーンにデプロイされている場合もあります。たとえば、1 つのゾーン内の個々の VM を、同じゾーンに 1 つのインスタンスを含むゾーンにまたがる柔軟なスケール セットにアタッチする場合などです。
注
柔軟なオーケストレーション モードを使用し、個々の VM をアタッチ、デタッチ、または削除する場合は、VM が複数のゾーンに分散されていることを確認します。 VM がすべて 1 つのゾーンにある場合、スケール セットは、そのゾーンの停止に対する回復力がない可能性があります。
ゾーン スケール セット(ゾーンアラインとも呼ばれる)は、指定した単一の可用性ゾーンにすべてのインスタンスを配置します。 各 VM とそのディスクはゾーン化されているため、その特定のゾーンにピン留めされます。
Important
単一の可用性ゾーンへのピン留めは、ニーズに合わせてゾーン間の待機時間が長すぎる場合と、待機時間が要件を満たしていないことを確認した後にのみ推奨されます。 ゾーン リソースだけでは、可用性ゾーンの停止に対する回復性は提供されません。 ゾーン リソースの回復性を向上させるには、個別のリソースを複数の可用性ゾーンに明示的にデプロイし、トラフィック ルーティングとフェールオーバーを構成する必要があります。 詳細については、「 ゾーン リソースとゾーンの回復性」を参照してください。
次の図は、1 つのゾーン内のゾーン スケール セットを示しています。そのゾーンには 3 つのインスタンスがあります。
スケール セットの可用性ゾーンを指定しない場合は、 非ゾーン または リージョンです。 このシナリオでは、インスタンスがリージョン内の任意のゾーンに配置され、必ずしも均等に分散されるわけではなく、同じゾーンに配置されることもあるかもしれません。 非ゾーン スケール セットを使用する場合、Ultra ディスクと Premium v2 ディスクでは、同じゾーン内のディスク コロケーションが保証されます。 コロケーションは、Premium v1 ディスクのベスト エフォートベースで提供され、ソリッド ステート ドライブ (SSD) ディスクやハード ディスク ドライブ (HDD) ディスクを含む Standard SKU ディスクでは保証されません。 リージョン内のいずれかのゾーンで障害が発生した場合、スケール セットでダウンタイムが発生する可能性があります。
Requirements
リージョンのサポート: ゾーン にまたがるスケール セットとゾーン スケール セットは、 可用性ゾーンをサポートする任意のリージョンにデプロイできます。
ただし、一部の VM の種類とサイズは、特定のリージョンまたはリージョン内の特定のゾーンでのみ使用できます。 必要な VM の種類をサポートするリージョンとゾーンを確認するには、次のリソースを使用します。
各リージョンで使用可能な VM の種類を確認するには、「リージョン 別に利用可能な製品」を参照してください。
特定のリージョンの各ゾーン内でサポートされている VM の種類とサイズを確認するには、「 VM SKU の可用性を確認する」を参照してください。
スケール セットに対して選択したゾーンで特定の VM SKU を使用できない場合、スケール セットは容量要件を満たすためにスケールアウトできない可能性があります。
専用ホスト: Azure Dedicated Host デプロイは、ゾーンをまたぐスケールセットやゾーンごとのスケールセットをサポートしていません。
種類: 可用性ゾーンのサポートは、柔軟で均一なスケール セットを含め、すべての種類のスケール セットで使用できます。
考慮事項
障害ドメインの拡散: スケール セットで可用性ゾーンを使用する場合は、特定の障害ドメイン分散アプローチから選択する必要があります。 ほとんどのワークロードでは、可能な限り多くの障害ドメインを使用する最大拡散を使用することをお勧めします。 詳細については、「 仮想マシン スケール セットの適切な数の障害ドメインを選択する」を参照してください。
ゾーンの分散:ゾーンの分散 によって、スケール セット内の VM インスタンスが、選択したゾーン間で均等に分散されるかどうかが決まります。 スケール セットは、各ゾーンに同じ数の VM がある場合、プラスまたはマイナス 1 つの VM がある場合にバランスが取れていると見なされます。 ゾーン分散モードは、ベスト エフォートまたは厳密に設定できます。 この設定は、ゾーン停止のシナリオを含め、スケール セットが不均等にスケールアウトできるかどうかを制御します。
配置グループ: 均一スケール セットの場合、複数の 配置グループを構成すると、スケール セットが使用する各ゾーンに複数の配置グループがデプロイされます。
費用
同じ数と種類の VM インスタンスを持つ場合、ゾーンまたがりスケールセット、ゾンスケールセット、非ゾンスケールセットの間にコストの違いはありません。
可用性ゾーンのサポートを設定する
このセクションでは、スケール セットの可用性ゾーンのサポートを構成する方法について説明します。
ゾーンを跨ぐスケールセットまたはゾーンごとのスケールセットを作成します。 新しいスケール セットを作成するときに可用性ゾーンを構成できます。 詳細については、「 可用性ゾーンを使用する仮想マシン スケール セットの作成」を参照してください。
注
使用する可用性ゾーンを選択した場合、実際には "論理可用性ゾーン" を選択していることになります。 別の Azure サブスクリプションの他のワークロード コンポーネントをデプロイした場合、別の "論理可用性ゾーン" 番号を使用して、同じ物理可用性ゾーンにアクセスできる場合があります。 詳細については、「物理ゾーンと可用性ゾーン」を参照してください。
可用性ゾーンを使用するように既存のスケール セットを変換します。 既存の非ゾーン (リージョン) スケール セットを、可用性ゾーンを使用するように変換できます。 詳細については、「 可用性ゾーンを追加するためのスケール セットの更新」を参照してください。
既存のスケール セットの可用性ゾーン構成を変更します。 既存のスケール セットにゾーンを追加することはできますが、ゾーンを削除することはできません。 詳細については、「 可用性ゾーンを追加するためのスケール セットの更新」を参照してください。
Important
スケール セットをより多くのゾーンに拡張しても、元の VM インスタンスはすぐに移行または変更されることはありません。 スケールアウトすると、新しいインスタンスが作成され、選択した可用性ゾーンに均等に分散されます。 元のインスタンスのデータが必要な場合は、新しいゾーン内のインスタンスにデータを移行する必要があります。 スケール セットをスケールインすると、リージョン インスタンスはすべて最初に削除の優先順位が付けられます。 その後、インスタンスはスケール セットのスケールイン ポリシーに基づいて削除されます。 詳細については、「 スケール セットのバランスを手動で調整する方法」を参照してください。
容量の計画と管理
可用性ゾーンの障害に備えるために、スケール セット内の VM インスタンスの数を 過剰にプロビジョニング することを検討してください。 このアプローチにより、ソリューションは容量損失を許容し、パフォーマンスが低下することなく引き続き機能し、残りのゾーンが完全な運用負荷を処理するのに十分な容量を確保できます。 詳細については、「過剰プロビジョニングを使用して容量を管理する」をご覧ください。
すべてのゾーンが正常な場合の動作
このセクションでは、スケール セットが可用性ゾーンのサポートを使用して構成され、すべての可用性ゾーンが運用可能な場合に想定される内容について説明します。
ゾーン間のトラフィック ルーティング: 異なる可用性ゾーン内の VM を含め、スケール セット内の VM 間でトラフィックをルーティングする責任があります。 一般的なアプローチには、スケール セットとの組み込みの統合を提供する Load Balancer と Application Gateway があります。 詳細については、「 仮想マシン スケール セットのネットワーク」を参照してください。
ゾーン間のデータ レプリケーション: 異なる可用性ゾーン内の VM 間を含め、VM 間で行う必要があるデータ レプリケーションは、ユーザーが担当します。 VM 上で実行されるデータベースやその他の同様のステートフル アプリケーションは、多くの場合、データをレプリケートする機能を提供します。
ゾーン障害時の動作
このセクションでは、スケール セットが可用性ゾーンのサポートを使用して構成され、可用性ゾーンで障害が発生した場合に想定される内容について説明します。
検出と応答: 可用性ゾーンの損失を検出し、対応方法を決定する責任があります。
ゾーンスパン スケール セットの場合、影響を受けるゾーン内のすべての VM インスタンスが使用できない可能性があります。 正常なゾーン内のインスタンスは引き続き動作します。
影響を受けるゾーンにデプロイされたゾーン スケール セットの場合、すべての VM インスタンスが使用できない可能性があります。 ゾーン障害に対応する方法を計画する必要があります。 たとえば、トラフィックを別のゾーンまたはリージョンの別のスケール セットにリダイレクトできます。
- 通知: ゾーンがダウンしても、Microsoft から自動的に通知されることはありません。 ただし、 Azure Resource Health を 使用して個々のリソースの正常性を監視したり、 Resource Health アラート を設定して問題を通知したりすることはできます。 また、Azure Service Health を使用して、ゾーンの障害を含むサービスの全体的な正常性を把握し、問題を通知する Service Health アラートを設定することもできます。
アクティブな要求: 影響を受ける可用性ゾーン内の VM で発生するアクティブな要求またはその他の作業は、終了される可能性があります。
予想されるデータ損失: ゾーン VM ディスクは、ゾーン障害時に使用できない可能性があります。
ゾーン冗長ストレージ (ZRS) ディスクを使用していて、障害が VM に影響する場合は、障害が発生した VM から ZRS ディスクを 強制的にデタッチ できます。 この方法では、ZRS ディスクを別の VM に接続できます。
予想されるダウンタイム: 影響を受けるゾーン内のすべての VM は、可用性ゾーンが復旧するまでダウンしたままです。 ゾーンにまたがるスケール セットを使用すると、正常なゾーンにある VM は引き続き機能します。
トラフィックの再ルーティング: 正常なゾーン内の他の VM へのトラフィックを再ルーティングする責任があります。
正常性チェックを行うゾーン回復性のあるロード バランサーを構成する場合、ロード バランサーは通常、失敗した VM を検出し、正常なゾーン内の他の VM インスタンスにトラフィックをルーティングできます。
インスタンスの置換: 仮想マシン スケール セットは、新しいインスタンスを正常なゾーンに自動的に追加するとは限りません。
ゾーン スパン スケール セットがある場合は、スケールアウトしてインスタンスを追加できます。 ゾーンの障害がゾーン内の特定のサーバー セットに制限されている場合、スケールアウト操作によって正常なインスタンスが同じゾーンに追加されたり、他のゾーンにインスタンスが追加されたりする可能性があります。 ただし、スケール セットで 厳密なゾーン分散が使用されている場合、スケール セットは不均衡を引き起こすスケールアウト操作をブロックします。
ヒント
CPU またはメモリの使用量に基づいて 自動スケール ルールを構成することをお勧めします。 自動スケール ルールを使用すると、スケール セットは、スケールアウトして残りの運用ゾーンに新しいインスタンスを追加することで、ゾーン内の VM インスタンスの損失に対応できます。
ゾーンの回復
ゾーンが正常な場合は、ゾーン内の VM が再起動します。 ワークロードに必要なゾーン回復手順とデータ同期は、お客様が担当します。
ゾーンの障害発生時にスケール セットに一時的なインスタンスを追加する場合、ゾーンが復元されるときに、スケール セットを元の容量にスケール ダウンすることが必要になる場合があります。
ゾーンエラーのテスト
Azure Chaos Studio を使用して、1 つまたは複数の可用性ゾーン内の VM の損失を実験の一部としてシミュレートできます。 Chaos Studio には、特定のゾーン内の VM をシャットダウンする機能など、 スケール セットに組み込みの障害が用意されています。 これらの機能を使用して、ゾーン レベルの障害をシミュレートし、フェールオーバー プロセスをテストできます。
リージョン全体の障害に対する回復性
スケール セットは、単一リージョンのリソースです。 リージョンが使用できない場合、そのリージョン内のすべてのスケール セットも使用できなくなります。
回復性のためのカスタム マルチリージョン ソリューション
複数のスケール セットを異なるリージョンにデプロイできますが、レプリケーション、負荷分散、およびフェールオーバー プロセスを実装する必要があります。 たとえば、複数のリージョンに同じスケール セットをデプロイし、正常性プローブで Azure Front Door または Azure Traffic Manager を使用してトラフィックをルーティングできます。 アプリケーション メカニズムまたはマネージド データ サービスを使用して状態をレプリケートする責任があります。
バックアップと復元
Azure Backup では、VM のネイティブ バックアップ サポートが提供されます。 Azure Backup はバックアップを作成および管理し、接続されているすべてのディスクを含む VM 全体に対してアプリケーション整合性の保護を提供します。 Azure Backup を使用した VM バックアップ ソリューションは、複数のディスクまたはアプリケーション対応のバックアップの調整されたバックアップが必要な場合に最適です。 ただし、データベース ワークロードの場合は、トランザクション整合性保護と高速復旧オプションを提供するアプリケーション固有のバックアップ ソリューションを検討してください。
AZURE Backup for VMs を使用すると、ニーズに合わせてバックアップの頻度、保有期間、ストレージ構成をカスタマイズできます。 詳細については、 VM の Azure Backup に関するページを参照してください。
バックアップでは、VM に接続されているディスクもサポートされます。 詳細については、「 Azure Disk Backup の概要」を参照してください。
ほとんどのソリューションでは、バックアップのみに依存しないでください。 代わりに、このガイドで説明されている他の機能を使用して、回復性の要件をサポートします。 ただし、バックアップでは、他の方法では行わないリスクから保護されます。 詳細については、「冗長性、レプリケーション、バックアップとは」を参照してください。
VM の再構成に対する回復性
スケール セットを使用すると、VM SKU の変更、各 VM で使用するイメージの変更、VM 拡張機能の追加または削除など、VM に構成変更を適用する方法を制御できます。 アップグレード の適用方法を決定する アップグレード ポリシー モードを制御できます。 詳細については、「 仮想マシン スケール セットのアップグレード ポリシー モード」を参照してください。
一部のアップグレードの種類では、インスタンスの再イメージ化または再デプロイが必要です。 自動アップグレードから特定のインスタンスを除外するには、 インスタンス保護の使用を検討してください。 保持する必要がある状態を含むインスタンスや、他のインスタンスでレプリケートできない構成を含むインスタンスを除外する場合があります。
サービス メンテナンスに対する回復性
Azure では、VM のホスト インフラストラクチャの信頼性、パフォーマンス、およびセキュリティを向上させるために、更新プログラムが定期的に実行されます。 スケール セットには、計画メンテナンスを理解して制御するための複数の方法が用意されています。
計画メンテナンス通知では、メンテナンス の期限が通知され、メンテナンスがいつ行われるかを制御できます。
メンテナンス構成 を使用すると、ビジネス ニーズに合わせて一度にメンテナンス期間をスケジュールできます。
Linux VM と WindowsVM のスケジュールされたイベントにより、アプリケーションは VM のメンテナンスに備える時間を得ることができます。 再起動などの今後のメンテナンス イベントに関する情報が提供されるため、アプリケーションで準備を行い、中断を制限できます。
サービス水準合意書
Azure サービスのサービス レベル アグリーメント (SLA) には、各サービスの期待される可用性と、その可用性の期待を達成するためにソリューションが満たす必要がある条件について記載されています。 詳細については、 オンライン サービスの SLA を参照してください。
仮想マシン スケール セットは、VM の可用性 SLA を共有します。 次の両方の条件を満たすスケール セットを使用して、VM のアップタイム率を高めることができます。
- スケール セットには、2 つ以上のインスタンスが含まれています。
- スケール セットは、これらのインスタンスを 2 つ以上の可用性ゾーンに分散します。