JavaScriptを有効にしてください

VMSS を仮想マシンの冗長性オプションとして使い隊

 ·   6 分で読めます  ·   Kento

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. 仮想マシンスケールセットの作成
  2. 新規仮想マシンのアタッチ

1. 仮想マシンスケールセットの作成

いくつかのパターンの VMSS を作成します
共通のプロパティとして以下の点をあげておきます

項目 選択肢
オーケストレーションモード フレキシブル
スケーリングモード スケーリング プロファイルがありません: デプロイ後に仮想マシンを手動でアタッチする
image01
VMSS 共通部分:

その他のパラメートを下記のように作成します

VMSS の名前 可用性ゾーン 拡散アルゴリズム
vmss-zone1 ゾーン1 最大拡散
vmss-zone123 ゾーン1, 2, 3 最大拡散
vmss-notzone-f1 なし 最大拡散
vmss-notzone-f3 なし 固定拡散 (障害ドメイン 3)

一部のスクリーンショットだけ載せておきます

image02
vmss_zone1:

image03
vmss_zone1:

image01
vmss-notzone-f3:

image01
vmss-notzone-f3:

2. 新規仮想マシンのアタッチ

作成した VMSS に仮想マシンを作成してみます

vmss-zone1

以下の設定にした VMSS に仮想マシンをデプロイしてみます

VMSS の名前 可用性ゾーン 拡散アルゴリズム
vmss-zone1 ゾーン1 最大拡散

スクリーンショットの通り、冗長性オプションで仮想マシンスケールセットを選んで、vmss-zone1 を選択しました
ゾーンは 1 のままグレーアウトしており、固定されてしまっていることがわかります

image06
vmss_zone1:

vmss-zone123

以下の設定にした VMSS に仮想マシンをデプロイしてみます

VMSS の名前 可用性ゾーン 拡散アルゴリズム
vmss-zone123 ゾーン1, 2, 3 最大拡散

スクリーンショットの通り、冗長性オプションで仮想マシンスケールセットを選んで、vmss-zone123 を選択しました
ゾーンは 1, 2, 3 の好きな値を選択できるようになっています

image07
vmss_zone123:

vmss-notzone-f1

以下の設定にした VMSS に仮想マシンをデプロイしてみます

VMSS の名前 可用性ゾーン 拡散アルゴリズム
vmss-notzone-f1 なし 最大拡散

今回はゾーンがないので障害ドメインが選択肢に現れています
拡散アルゴリズムを最大拡散にしたので、Azure 側が最大限に分散されるように障害ドメインを自動で割り当ててくれます

image08
vmss_notzone-f1:

作成後の仮想マシンのプロファイルを見てみましたが、どこの障害ドメインに所属しているかはオープンにされていないようです

ちなみに公開情報によるとこの場合、利用される障害ドメイン数は状況次第で 5 つ以上になったりするみたいです

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

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

image09
vmss_notzone-f1:

vmss-notzone-f3

以下の設定にした VMSS に仮想マシンをデプロイしてみます

VMSS の名前 可用性ゾーン 拡散アルゴリズム
vmss-notzone-f3 なし 固定拡散 (障害ドメイン 3)

今回もゾーンがないので障害ドメインが選択肢に現れています
拡散アルゴリズムを固定拡散にしたので、ユーザー側が障害ドメインを割り当てられるようになっています

image10
vmss_notzone-f3:

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

image11
vmss_notzone-f3:

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

image12
vmss_notzone-f3:

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

image13
vmss_notzone-f3:

まとめ

仮想マシン作成自のオプションとしての仮想マシンスケールセットを色んなパターンで試してみました
可用性がほしい場合は複数ゾーンを利用するのが良さそうです
ゾーンが使えないリージョンでは可用性セットのように利用することができます

可用性セット ライクの場合は、障害ドメインを自分で選択することもできます
選択することができるのは、自由度が高い一方で、選択ミスに繋がるリスクもあると思います
推奨通り最大拡散にするのが吉かと思いました

参考

共有

Kento
著者
Kento
2020年に新卒で IT 企業に入社. インフラエンジニア(主にクラウド)として活動中