Azure 可用性ゾーンと可用性セット

スポンサーリンク

マイクロソフトAzureは、可用性セットと可用性ゾーンと呼ばれる物理的な障害の影響を与える範囲を定義しています。AWSのAvailability Zoneに相当する概念で、ゾーンを適切に分割しなければAzure内で障害が発生した場合に適切に切り替わりません。

参考資料

参考になる公式ドキュメントを以下に示します。

事前準備

以下、仮想ネットワーク等のリソースを作成します。

az group create --name MyResourceGroup --location japaneast

az network vnet create \
  --resource-group MyResourceGroup \
  --name MyVnet \
  --address-prefix 172.16.0.0/16

az network vnet subnet create \
  --resource-group MyResourceGroup \
  --name MySubnet \
  --vnet-name MyVnet \
  --address-prefixes 172.16.0.0/24

可用性ゾーン

可用性ゾーン使用可能なリージョンの確認

可用性ゾーンは電源やスイッチなど物理的な設備を共有するエリアです。可用性ゾーンを分けてサービスを配置すれば、電源設備などに障害が発生したとしてもサービスを継続する事ができます。

しかし、全てのリージョンに複数の可用性ゾーンが存在するわけではありません。可用性ゾーンに対応しているリージョンは「可用性ゾーンをサポートする Azure サービス」に記されています。

もし、公式ドキュメントを参照するのが手間ならば、CLIからも可用性ゾーンに対応しているかどうかを調べる事ができます。以下のようにaz vm list-skusを使いZones列を参照すれば、可用性ゾーンに対応しているかどうかを確認できます。

$ az vm list-skus \
  --location japaneast \
  --output table
ResourceType      Locations    Name                  Zones    Restrictions
----------------  -----------  --------------------  -------  ---------------
availabilitySets  japaneast    Aligned                        None
availabilitySets  japaneast    Classic                        None
disks             japaneast    Premium_LRS           1,2,3    None
disks             japaneast    Premium_LRS           1,2,3    None
disks             japaneast    Premium_LRS           1,2,3    None
disks             japaneast    Premium_LRS           1,2,3    None

 <omitted>

virtualMachines   japaneast    Standard_A1_v2        1,2,3    None
virtualMachines   japaneast    Standard_A2m_v2       1,2,3    None
virtualMachines   japaneast    Standard_A2_v2        1,2,3    None
virtualMachines   japaneast    Standard_A4m_v2       1,2,3    None
virtualMachines   japaneast    Standard_A4_v2        1,2,3    None
virtualMachines   japaneast    Standard_A8m_v2       1,2,3    None
virtualMachines   japaneast    Standard_A8_v2        1,2,3    None
virtualMachines   japaneast    Standard_B12ms        1,2,3    None
virtualMachines   japaneast    Standard_B16ms        1,2,3    None
virtualMachines   japaneast    Standard_B1ls         1,2,3    None
virtualMachines   japaneast    Standard_B1ms         1,2,3    None
virtualMachines   japaneast    Standard_B1s          1,2,3    None

 <omitted>

可用性ゾーンを指定した仮想マシンの作成

前述のaz vm list-skusコマンドの出力のように、Azureは「1,2,3」の3つの可用性ゾーンを使えるリージョンが多く存在します。仮想マシン作成時に、zoneオプションを指定すると、仮想マシンを配置する可用性ゾーンを指定できます。作成例は以下の通りです。

az vm create \
  --resource-group MyResourceGroup \
  --name linux011 \
  --image UbuntuLTS \
  --size Standard_B1s \
  --admin-username azureuser \
  --ssh-key-values ~/.ssh/authorized_keys  \
  --vnet-name MyVnet \
  --subnet MySubnet \
  --zone 1

az vm create \
  --resource-group MyResourceGroup \
  --name linux012 \
  --image UbuntuLTS \
  --size Standard_B1s \
  --admin-username azureuser \
  --ssh-key-values ~/.ssh/authorized_keys  \
  --vnet-name MyVnet \
  --subnet MySubnet \
  --zone 2

az vm create \
  --resource-group MyResourceGroup \
  --name linux013 \
  --image UbuntuLTS \
  --size Standard_B1s \
  --admin-username azureuser \
  --ssh-key-values ~/.ssh/authorized_keys  \
  --vnet-name MyVnet \
  --subnet MySubnet \
  --zone 3

コンピュートリソースの確認

コンピュートリソースが確かに可用性ゾーンで分離されている事を確認します。ポータル(GUI)ならば、仮想マシンの「概要」画面で、どの可用性ゾーンに属しているかを確認できます。

仮想マシンの可用性ゾーンの確認

CLIならば以下のようなshowコマンドを使用します。

az vm show \
  --resource-group MyResourceGroup \
  --name linux011

出力例は以下の通りです。

$ az vm show \
  --resource-group MyResourceGroup \
  --name linux011

  <omitted>

    "osDisk": {
      "caching": "ReadWrite",
      "createOption": "FromImage",
      "deleteOption": "Detach",
      "diffDiskSettings": null,
      "diskSizeGb": 30,
      "encryptionSettings": null,
      "image": null,
      "managedDisk": {
        "diskEncryptionSet": null,
        "id": "/subscriptions/2e2f81a9-b030-410f-9784-c582580c932e/resourceGroups/MyResourceGroup/providers/Microsoft.Compute/disks/linux011_OsDisk_1_e4ebc26b05174ede84bccd65639d3f4d",
        "resourceGroup": "MyResourceGroup",
        "storageAccountType": "Premium_LRS"
      },
      "name": "linux011_OsDisk_1_e4ebc26b05174ede84bccd65639d3f4d",
      "osType": "Linux",
      "vhd": null,
      "writeAcceleratorEnabled": null
    }
  },
  "tags": {},
  "type": "Microsoft.Compute/virtualMachines",
  "userData": null,
  "virtualMachineScaleSet": null,
  "vmId": "391c70a6-f195-414e-8466-53cab81a4989",
  "zones": [
    "1"
  ]
}

ストレージリソースの確認

OSディスクも可用性ゾーンで分離されている事を確認します。ポータル(GUI)ならば、仮想マシンの「ディスク」画面で「ディスク名」を押下します。

OSディスクの可用性ゾーンの確認 01

ディスクの「概要」画面で可用性ゾーンを確認します。

OSディスクの可用性ゾーンの確認 02

CLIならば以下のようなshowコマンドを使用します。

osdiskname=$(az vm show \
  --resource-group MyResourceGroup \
  --name linux011 \
  --query "storageProfile.osDisk.name" \
  --output tsv)

az disk show \
  --resource-group MyResourceGroup \
  --name ${osdiskname}

出力例は以下の通りです。

$ az disk show \
  --resource-group MyResourceGroup \
  --name ${osdiskname}

  <omitted>

  "supportsHibernation": null,
  "tags": {},
  "tier": "P4",
  "timeCreated": "2022-03-07T04:09:11.251421+00:00",
  "type": "Microsoft.Compute/disks",
  "uniqueId": "e4ebc26b-0517-4ede-84bc-cd65639d3f4d",
  "zones": [
    "1"
  ]
}

次の検証シナリオの準備

以下スクリーンショットのように、デフォルト設定のサブスクリプションでは1リージョンあたりvCPUは10個までになっています。

サブスクリプションに対するクォータの確認

次のシナリオでは仮想マシンを10個作成しますので、その準備として前述の操作で作成した仮想マシンを削除します。

for i in `seq 11 13`; do
  az vm delete \
    --resource-group MyResourceGroup \
    --name linux0${i} \
    --yes
done

可用性セット

可用性セットの定義

前述の「可用性ゾーン」の設定では、どの仮想マシンがどのゾーンに属すかを明示的に設定しました。しかし、この設定は仮想マシンの台数が増えれば設定が煩雑になり、どこかのゾーンに仮想マシンが偏ってしまう事故は容易に想像できるでしょう。

このような管理を自動的に定義するのが「可用性セット」と呼ばれる設定です。「可用性セット」は、どの程度分散させるかのパラメタ「障害ドメイン(platform-fault-domain)」「更新ドメイン(platform-update-domain)」で定義します。これら値を大きくすればするほど、仮想マシンは分散されます。

「可用性セット」の作成例は以下の通りです。

az vm availability-set create \
    --resource-group MyResourceGroup \
    --name MyAvailabilitySet \
    --platform-fault-domain-count 2 \
    --platform-update-domain-count 5

障害ドメイン

障害ドメインとは「電源とネットワーク スイッチを共有する仮想マシンのグループ」です。platform-fault-domain-countを3にすれば、3つのグループに仮想マシンが分散されます。

AWSは4つのAZを備えていますが、今のところAzureの可用性ゾーンは3つしかないので、Azureの場合はplatform-fault-domain-countに指定できる値は2か3のみです。

更新ドメイン

更新ドメインは「仮想マシンと同時に再起動できる基礎となる物理ハードウェアのグループ」です。端的に言えば、バージョンアップ等でハードウェアの再起動が必要になった時に影響を受ける範囲です。platform-update-domain-countは最大で10を指定できます。

可用性セットを指定した仮想マシンの作成

可用性セットを指定して仮想マシンを作成するには、availability-setに「可用性セット名」を指定します。操作例は以下の通りです。

「可用性ゾーン」と「可用性セット」は排他的な設定で、どちらか片方しか指定できません。

for i in `seq 20 29`; do
  az vm create \
    --resource-group MyResourceGroup \
    --name linux0${i} \
    --image UbuntuLTS \
    --size Standard_B1s \
    --admin-username azureuser \
    --ssh-key-values ~/.ssh/authorized_keys \
    --vnet-name MyVnet \
    --subnet MySubnet \
    --availability-set MyAvailabilitySet
done

可用性セットの確認

ポータル(GUI)のすべてのメニューから「コンピューティング」「可用性セット」の順に遷移します。

可用性セットの確認 01

「Virtual Machine」の画面にて、作成した仮想マシンの「障害ドメイン」「更新ドメイン」が分散している事を確認します。

可用性セットの確認 02

タイトルとURLをコピーしました