Azure Portal で仮想マシンを作成する際に冗長性オプションで 「仮想マシンスケールセット」を選択することができます
今回は冗長性としての仮想マシンスケールセットを試してみます
仮想マシンの冗長性オプションについて
仮想マシンには従来から可用性セットと可用性ゾーンと呼ばれる冗長性オプションがあります
冗長性オプション | 耐えうる障害 |
---|---|
可用性セット | データセンター内のラックレベル |
可用性ゾーン | データセンター規模 |
詳しい説明はビンぐるか、コパるかすれば出てくると思うので割愛します
---
title: 仮想マシンの可用性セット
---
graph RL;
%%グループとサービス
subgraph AvailabilitySet["可用性セット"]
subgraph Rack1["ラック1"]
subgraph UpdateDomain11["更新ドメイン1"]
VM1("VM")
end
subgraph UpdateDomain12["更新ドメイン2"]
end
subgraph UpdateDomain13["更新ドメイン3"]
end
end
subgraph Rack2["ラック2"]
subgraph UpdateDomain21["更新ドメイン1"]
end
subgraph UpdateDomain22["更新ドメイン2"]
VM2("VM")
end
subgraph UpdateDomain23["更新ドメイン3"]
end
end
subgraph Rack3["ラック3"]
subgraph UpdateDomain31["更新ドメイン1"]
end
subgraph UpdateDomain32["更新ドメイン2"]
end
subgraph UpdateDomain33["更新ドメイン3"]
VM3("VM")
end
end
end
%%サブグラフのスタイル
classDef subG fill:none,color:#345,stroke:#345
class AvailabilitySet subG
classDef RackG fill:none,color:#0a0,stroke:#0a0
class Rack1,Rack2,Rack3 RackG
classDef UpdateDomainG fill:none,color:#0a0,stroke:#0a0
class UpdateDomain1,UpdateDomain2,UpdateDomain3 UpdateDomainG
%%ノードのスタイル
classDef SCP fill:#e83,color:#fff,stroke:none
class VM1,VM2,VM3 SCP
---
title: 仮想マシンの可用性ゾーン
---
graph TB;
%%グループとサービス
subgraph Zone1["可用性ゾーン 1"]
VM1("VM1")
end
subgraph Zone2["可用性ゾーン 2"]
VM2("VM2")
end
subgraph Zone3["可用性ゾーン 3"]
VM3("VM3")
end
%%サブグラフのスタイル
classDef VnetG fill:none,color:#0a0,stroke:#0a0
class Zone1,Zone2,Zone3 VnetG
%%ノードのスタイル
classDef SCP fill:#e83,color:#fff,stroke:none
class VM1,VM2,VM3 SCP
このように障害ドメインや、可用性ゾーンに分散して仮想マシンを配置することで可用性を高めることができます
仮想マシンスケールセットを冗長化オプション
仮想マシンスケールセットは 均一モードとフレキシブルモードの2種類のオーケストレーションモードがあります
Orchestration modes for Virtual Machine Scale Sets in Azure | Microsoft Learn
今回使うのはこのフレキシブルモードです
フレキシブルモードの VMSS を作成する際に可用性ゾーンの使用の有無を選択できます
このときの選択で可用性セットっぽく使うか、可用性ゾーンっぽく使うかが決まります
可用性ゾーンの選択 | 冗長性のイメージ |
---|---|
いずれかのゾーンを1つ選択 | 複数の VM があっても単一ゾーンの利用 |
2つ以上のゾーンを選択 | 複数 VM を利用することで、ゾーン分散 |
ゾーンの選択なし | 可用性セットライク |
となります
さらに 拡散アルゴリズムを利用することで、好きな障害ドメインに配置することができます
これは可用性セットになかった特徴です
VMSS と可用性セットの比較は先に紹介した記事に書かれています
Orchestration modes for Virtual Machine Scale Sets in Azure | Microsoft Learn
百聞は一見に如かずということで実際に使ってみます
ざっくり手順
- 仮想マシンスケールセットの作成
- 新規仮想マシンのアタッチ
1. 仮想マシンスケールセットの作成
いくつかのパターンの VMSS を作成します
共通のプロパティとして以下の点をあげておきます
項目 | 選択肢 |
---|---|
オーケストレーションモード | フレキシブル |
スケーリングモード | スケーリング プロファイルがありません: デプロイ後に仮想マシンを手動でアタッチする |

その他のパラメートを下記のように作成します
VMSS の名前 | 可用性ゾーン | 拡散アルゴリズム |
---|---|---|
vmss-zone1 | ゾーン1 | 最大拡散 |
vmss-zone123 | ゾーン1, 2, 3 | 最大拡散 |
vmss-notzone-f1 | なし | 最大拡散 |
vmss-notzone-f3 | なし | 固定拡散 (障害ドメイン 3) |
一部のスクリーンショットだけ載せておきます
最大拡散と固定拡散は、最大拡散の方が推奨とのことです
この方法ではほとんどの場合に最善の拡散を提供するので、ほとんどのワークロードでは最大拡散を使って展開することをお勧めします。
2. 新規仮想マシンのアタッチ
作成した VMSS に仮想マシンを作成してみます
vmss-zone1
以下の設定にした VMSS に仮想マシンをデプロイしてみます
VMSS の名前 | 可用性ゾーン | 拡散アルゴリズム |
---|---|---|
vmss-zone1 | ゾーン1 | 最大拡散 |
スクリーンショットの通り、冗長性オプションで仮想マシンスケールセットを選んで、vmss-zone1 を選択しました
ゾーンは 1 のままグレーアウトしており、固定されてしまっていることがわかります

vmss-zone123
以下の設定にした VMSS に仮想マシンをデプロイしてみます
VMSS の名前 | 可用性ゾーン | 拡散アルゴリズム |
---|---|---|
vmss-zone123 | ゾーン1, 2, 3 | 最大拡散 |
スクリーンショットの通り、冗長性オプションで仮想マシンスケールセットを選んで、vmss-zone123 を選択しました
ゾーンは 1, 2, 3 の好きな値を選択できるようになっています

vmss-notzone-f1
以下の設定にした VMSS に仮想マシンをデプロイしてみます
VMSS の名前 | 可用性ゾーン | 拡散アルゴリズム |
---|---|---|
vmss-notzone-f1 | なし | 最大拡散 |
今回はゾーンがないので障害ドメインが選択肢に現れています
拡散アルゴリズムを最大拡散にしたので、Azure 側が最大限に分散されるように障害ドメインを自動で割り当ててくれます

作成後の仮想マシンのプロファイルを見てみましたが、どこの障害ドメインに所属しているかはオープンにされていないようです
ちなみに公開情報によるとこの場合、利用される障害ドメイン数は状況次第で 5 つ以上になったりするみたいです
最大拡散を選ぶと、スケール セットは各ゾーン内の可能な限り多くの障害ドメインに VM を拡散します。 この拡散では、ゾーンごとの障害ドメインが 5 個より多く、または少なくなる可能性があります。
可用性ゾーンを使用する仮想マシン スケール セットを作成する | Microsoft Learn

vmss-notzone-f3
以下の設定にした VMSS に仮想マシンをデプロイしてみます
VMSS の名前 | 可用性ゾーン | 拡散アルゴリズム |
---|---|---|
vmss-notzone-f3 | なし | 固定拡散 (障害ドメイン 3) |
今回もゾーンがないので障害ドメインが選択肢に現れています
拡散アルゴリズムを固定拡散にしたので、ユーザー側が障害ドメインを割り当てられるようになっています

障害ドメインを 1 にしてデプロイしてみました
1つ前の例とは異なりデプロイされている障害ドメインが明確に書かれています

では、この固定拡散において障害ドメインを自動割り当てにするとどうなるのか、試してみます

デプロイ結果をみてみると、自動で障害ドメイン 0 に作成されていることがわかりました

まとめ
仮想マシン作成自のオプションとしての仮想マシンスケールセットを色んなパターンで試してみました
可用性がほしい場合は複数ゾーンを利用するのが良さそうです
ゾーンが使えないリージョンでは可用性セットのように利用することができます
可用性セット ライクの場合は、障害ドメインを自分で選択することもできます
選択することができるのは、自由度が高い一方で、選択ミスに繋がるリスクもあると思います
推奨通り最大拡散にするのが吉かと思いました