Azure可用性セットを使ってVMを冗長化するAZ CLIハンズオン|障害ドメインと更新ドメインの設計

運営:リナックスマスター.JP(代表 宮崎智広)
HOME > Linux技術 リナックスマスター.JP(Linuxマスター.JP) > Azure > Azure可用性セットを使ってVMを冗長化するAZ CLIハンズオン|障害ドメインと更新ドメインの設計
「AzureでVMを2台立てたのに、ラック障害で両方同時に落ちてしまった」「可用性セットと可用性ゾーンの違いがよく分からない」

VMを複数台用意しているのに、実は同じ物理ラック・同じネットワークスイッチに乗っていては冗長化の意味がありません。Azureには可用性セット(Availability Set)という仕組みがあり、VMを異なる障害ドメイン・更新ドメインへ自動で分散配置してくれます。

この記事では、Rocky Linux 9系/Ubuntu 22.04 LTSを想定環境として、Azure CLIコマンドで可用性セットを作成し、VMを2台組み込むまでのハンズオン手順を解説します。障害ドメインと更新ドメインの設計方針、可用性ゾーンとの使い分けまでカバーします。

この記事のポイント

・可用性セットはVMを異なる物理ラックに分散して障害の影響範囲を限定する
・障害ドメイン(最大3)と更新ドメイン(最大20)の2軸で分散配置を制御する
・az vm availability-set createコマンドで可用性セットを作成し、VM作成時に紐付ける
・可用性ゾーンとは保護の粒度が異なる。新規設計では可用性ゾーンを優先する


「このままじゃマズい」と感じていませんか?
参考書を開く気力もない、同年代に取り残される不安——
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
姓・名・メールの3つだけ/30秒/解除は3秒 / 詳細はこちら

Azure可用性セット(Availability Set)とは何か

可用性セットは、同じアプリケーションを担う複数のVMを物理的に異なるハードウェアへ分散配置するための論理的なグループです。Azure側が「このグループのVMは同じ電源・同じスイッチを共有させない」という制約を自動で守ってくれます。

可用性セットを使う主なメリットは次の2点です。

・ハードウェア障害への対応:ラック障害・電源障害が起きても、影響が一部のVMにとどまる(残りのVMは稼働し続ける)
・計画メンテナンスへの対応:Azureのホスト更新が行われるとき、同一グループのVMが同時に再起動されない

2台以上のVMを可用性セットに入れると、Azureは99.95%の稼働率SLAを保証します(Standard_B1s以上のサイズが対象)。1台だけのVMには稼働率SLAが付かないため、本番環境では必ずVMを2台以上用意することが前提です。

Linuxサーバーを長年オンプレで運用してきたエンジニアにとって、この仕組みは「ラックを分けて物理サーバーを配置する」という運用ノウハウをクラウドのAPIで宣言するイメージに近いです。

障害ドメインと更新ドメインの仕組み

可用性セットを設計する上で理解しておく核心概念が「障害ドメイン」と「更新ドメイン」です。

障害ドメイン(Fault Domain)

障害ドメインは、電源とネットワークスイッチを共有する物理サーバーのグループです。同じ障害ドメインにあるVMは、ラック電源が落ちたりスイッチ障害が起きたりすると同時に影響を受けます。

可用性セットのVMは異なる障害ドメインに分散されるため、1つのラックが落ちても別のラックのVMは生き続けます。設定できる障害ドメイン数は最大3(`--platform-fault-domain-count 3`)で、多くのリージョンでデフォルト値は2です。

更新ドメイン(Update Domain)

更新ドメインは、Azureが計画メンテナンス時に同時に再起動するVMのグループです。Azure側がホストのOSパッチ当てや設備メンテを行う際、同一更新ドメインのVMだけを順番に再起動します。

設定できる更新ドメイン数は最大20(デフォルト5)です。5つの更新ドメインがあれば、Azureは1/5ずつ順番に再起動するため、残り4/5のVMは常に稼働し続けます。

障害ドメインと更新ドメインの設計早見表

パラメータ 推奨値 最大値 役割
障害ドメイン数
(FD)
2~3 3 物理ラック障害からVMを保護
更新ドメイン数
(UD)
5 20 Azure計画メンテ時の同時再起動を防ぐ
マネージドディスクを使う構成では、Azure側が自動でストレージの障害ドメインもVMの配置に合わせて分散してくれます。本記事のハンズオンもマネージドディスクを前提とした手順です。

AZ CLIで可用性セットを構築するハンズオン

ここからは実際のCLIコマンドを使った構築手順を進めます。前提としてaz loginでサブスクリプションへの認証が完了していることを確認してください。Azure CLIのセットアップがまだの方は、Azureクラウド実践コースの環境準備セクションを参考にしてください。

1. リソースグループと可用性セットを作成する

まず作業用のリソースグループを作成し、その中に可用性セットを定義します。

# リソースグループを作成する(リージョン: japaneast) az group create \ --name rg-availset-demo \ --location japaneast # 可用性セットを作成する # 障害ドメイン数=2、更新ドメイン数=5 がよく使われる設定 az vm availability-set create \ --resource-group rg-availset-demo \ --name as-webserver \ --platform-fault-domain-count 2 \ --platform-update-domain-count 5

出力例(環境により異なります)

{ "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/rg-availset-demo/providers/Microsoft.Compute/availabilitySets/as-webserver", "location": "japaneast", "name": "as-webserver", "platformFaultDomainCount": 2, "platformUpdateDomainCount": 5, "sku": { "name": "Aligned" }, "type": "Microsoft.Compute/availabilitySets" }

sku.name が Aligned になっていれば、マネージドディスクとストレージ障害ドメインが連携した設定になっています。Classic と表示されている場合は、マネージドディスクが有効になっていないため、VMを作り直す必要があります。

2. VMを2台作成して可用性セットに組み込む

VM作成時に --availability-set オプションで先ほど作った可用性セットを指定します。可用性セットはVM作成後に変更できません。後から追加するには既存VMを削除して作り直す必要があるため、設計段階で決めておくことが重要です。

# 1台目のVMを作成する az vm create \ --resource-group rg-availset-demo \ --name vm-web-01 \ --availability-set as-webserver \ --image Ubuntu2204 \ --size Standard_B2s \ --admin-username azureuser \ --generate-ssh-keys # 2台目のVMを作成する(同じ可用性セットを指定) az vm create \ --resource-group rg-availset-demo \ --name vm-web-02 \ --availability-set as-webserver \ --image Ubuntu2204 \ --size Standard_B2s \ --admin-username azureuser \ --generate-ssh-keys

3. 障害ドメインと更新ドメインの割り当てを確認する

VMがどの障害ドメイン・更新ドメインに配置されたかを確認します。

# vm-web-01 の配置ドメインを確認する az vm get-instance-view \ --resource-group rg-availset-demo \ --name vm-web-01 \ --query '{name:name, faultDomain:instanceView.platformFaultDomain, updateDomain:instanceView.platformUpdateDomain}' # vm-web-02 の配置ドメインを確認する az vm get-instance-view \ --resource-group rg-availset-demo \ --name vm-web-02 \ --query '{name:name, faultDomain:instanceView.platformFaultDomain, updateDomain:instanceView.platformUpdateDomain}'

出力例(環境により異なります)

# vm-web-01 { "name": "vm-web-01", "faultDomain": 0, "updateDomain": 0 } # vm-web-02 { "name": "vm-web-02", "faultDomain": 1, "updateDomain": 1 }

faultDomain の値が異なっていれば(0と1)、2台のVMが異なる物理ラックに配置されていることを意味します。同じ値になっている場合はAzureの空きリソース状況によるもので、まれに発生します。その場合はVMを再作成するか、リージョンを変えると解消することがあります。

可用性セット全体のVMとドメイン情報を一覧表示するには以下のコマンドを使います。

# 可用性セットの詳細を確認する az vm availability-set show \ --resource-group rg-availset-demo \ --name as-webserver \ --output table

可用性セットと可用性ゾーンの使い分け

Azureには「可用性セット」と「可用性ゾーン(Availability Zone)」という2つの冗長化の仕組みがあります。名前が似ていますが保護する障害の粒度がまったく異なります。
項目 可用性セット 可用性ゾーン
保護する障害 同一DC内のラック障害・計画メンテ データセンター単位の障害(停電・火災等)
SLA 99.95%(VM2台以上) 99.99%(VM2台以上)
物理的な分離 同一データセンター内のラック分散 リージョン内の独立したDC(別棟)
追加コスト なし ゾーン間のデータ転送料が発生する場合あり
新規設計の推奨 ゾーンが使えない場合・旧来のVMサイズ 東日本・西日本など主要リージョンで推奨
新規でシステムを構築するなら、より高いSLA(99.99%)が得られる可用性ゾーンを使う方針を優先してください。可用性セットは、可用性ゾーンをサポートしていない一部のリージョンや、ゾーン対応していない旧来のVMサイズを使わざるを得ないケース、またはオンプレからのリフト&シフト移行など既存の構成制約がある場合に選択します。

なお、1つのVMに可用性セットと可用性ゾーンを同時に指定することはできません。どちらを使うか設計段階で決めておいてください。

よくあるエラーと対処法

「VMの可用性セットはVM作成後に変更できない」エラー

既存のVMに後から可用性セットを紐付けようとすると、操作がブロックされます。

# エラー例(既存VMに可用性セットを追加しようとした場合) # BadRequest: Changing property 'availabilitySet' is not allowed.

対処法は既存VMを削除してOSディスクを残し、可用性セットを指定しながら再作成する手順です。事前にデータディスクのスナップショットを取得してからVMを削除するとデータを保護できます。

「AlignedとClassicが混在している」警告

マネージドディスクを使うVMには sku: Aligned の可用性セットが必要です。Classic の可用性セットにマネージドディスクのVMを作成しようとするとエラーになります。az vm availability-set create を実行すると現在のAzure CLIのデフォルトでは Aligned が選ばれますが、古いAPIバージョンを経由した作成では Classic になる場合があります。az vm availability-set show で sku.name を必ず確認してください。

「faultDomainが全VMで0になる」ケース

リージョンの空きリソースが少ない時間帯に作成すると、分散が保証されないケースがあります。--no-wait を外して1台ずつ順番に作成する、または時間を置いて再試行することで解消することが多いです。

本記事のまとめ

やりたいこと コマンド
可用性セットを作成する az vm availability-set create --platform-fault-domain-count 2 --platform-update-domain-count 5
VMを可用性セットに組み込む az vm create --availability-set <セット名>
VMの障害・更新ドメインを確認する az vm get-instance-view --query '{faultDomain:instanceView.platformFaultDomain, ...}'
可用性セットの詳細を確認する az vm availability-set show --output table
ゾーン対応リージョンで高可用性を実現する az vm create --zone 1(可用性ゾーンを使う場合)
可用性セットの設計で重要なのは「障害ドメイン数は2~3で十分。更新ドメインはデフォルト5で運用しながら、VMの台数に応じて増やす」という判断軸です。VMの台数が更新ドメイン数を超えると1つの更新ドメインに複数のVMが入り、計画メンテ時の影響が広がるため注意してください。

新規環境では可用性ゾーンが推奨ですが、可用性セットは既存構成との互換性・コスト設計・リージョン制約に合わせた有効な選択肢です。両者の違いを理解した上で設計を選択できるエンジニアを目指してください。

現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、

この記事で解説したAzure可用性セットの設計・構築を含め、クラウド時代のLinuxインフラ管理を体系的に学べるコースをご用意しています。3,100名以上が受講した実績のある実践ハンズオン研修です。

>> Azureクラウド実践コースの詳細はこちら

無料メルマガで学習を続ける

Linuxの実践スキルをメールで毎週お届け。
登録は30秒、解除もいつでも可。

登録無料・いつでも解除できます

暗記不要・1時間後にはサーバーが動く

3,100名以上が実践した「型」を無料で公開中

プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。

姓・名・メールの3つだけ/30秒/解除は3秒 / 詳細はこちら

Linux無料マニュアル(図解60P) 名前とメールで30秒登録

運営

リナックスマスター.JP(代表 宮崎智広)

株式会社イーネットマーキュリーが運営するLinux教育サイトです。代表の宮崎智広は現役のLinuxサーバー管理者として20年以上の実務経験を持ち、累計3,100名以上のエンジニアを指導してきました。実践型のLinuxセミナーや無料マニュアルの配布を通じてLinux人材の育成に取り組んでいます。