建立使用可用性區域的虛擬機器擴展集

Azure 可用性區域是 Azure 區域內的錯誤隔離位置,可提供備援電源、冷卻系統和網路功能。 這些項目可讓您執行具高可用性、對資料中心失敗有容錯能力的應用程式。 至少有三個不同的 Azure 區域會支援可用性區域。 每個可用性區域都是由一或多個資料中心組成,其中配有獨立基礎結構電源、網路功能和冷卻系統。 可用性區域由高效能網路連線,來回延遲低於 2 毫秒。 如需詳細資訊,請參閱可用性區域概觀

若要保護虛擬機器擴展集,使其免於資料中心層級的失敗,您可以建立跨可用性區域的擴展集。 若要使用可用性區域,您必須在支援的 Azure 區域中建立擴展集。

可用性區域的設計考量

虛擬機擴展集支援三種區域性部署模型:

  • 區域備援或跨越區域 (建議)
  • 區域性或一致區域 (單一區域)
  • 地區

區域備援或跨越區域

區域備援或跨越區域的擴展集會將執行個體分配至所有所選區域 "zones": ["1","2","3"]。 根據預設,擴展集會執行最佳方法,將執行個體平均分配到選取的區域。 不過,您可以在部署中設定 "zoneBalance": "true",指定您想要嚴格區域平衡。 每個 VM 及其磁碟都屬於區域性,因此會釘選到特定區域。 區域之間的執行個體會透過低延遲的高效能網路連線。 發生區域性中斷或連線問題時,受影響區域內的執行個體連線可能會遭到入侵,而其他可用性區域中的執行個體應該不會受到影響。 您可以在區域性中斷期間新增擴展集容量,而擴展集會將更多執行個體新增至未受影響的區域。 還原區域時,您可能需要將擴展集縮小至原始容量。 最佳做法是設定以 CPU 或記憶體使用量為基礎的自動調整規則。 自動調整規則可讓擴展集在該區域遺失 VM 執行個體時,於其餘運作中的區域相應增加新的執行個體,來作為回應。

跨可用性區域分配執行個體,符合跨可用性區域分配執行個體的 99.99% SLA,建議您用於 Azure 中大部份的工作負載。

區域性或一致區域 (單一區域)

區域性或一致區域擴展集會將執行個體放在單一可用性區域 "zones": ['1']。 每個 VM 及其磁碟都屬於區域性,因此會釘選到特定區域。 當執行個體之間需要較低的延遲時,您主要會使用此設定。

地區

區域性虛擬機器擴展集是在未明確設定區域指派時所用 ("zones"=[]"zones"=null)。 在此設定中,擴展集會建立區域性 (非已釘選區域) 執行個體,並隱含地將執行個體置於整個區域。 系統無法保證可將執行個體平均或分配放置在區域中,或讓執行個體位於相同可用性區域。 Ultra 和進階 v2 磁碟可保證磁碟共置,進階 V1 磁碟最適合用於磁碟共置,而標準 SKU (SSD 或 HDD) 磁碟則無法保證磁碟共置。

在極少數的完全區域性中斷情況下,擴展集內的任何或所有執行個體都可能會受到影響。

容錯網域和可用性區域

容錯網域是可用性區域或硬體節點數據中心內的容錯隔離群組,可共用相同電源、網路、冷卻和平台維護排程。 位於不同容錯網域上的 VM 執行個體不太可能受到相同計劃性或非計劃性中斷影響。 您可以指定執行個體在區域內跨容錯網域分配的方式。

  • 最大分配 (platformFaultDomainCount = 1)
  • 靜態固定分配 (platformFaultDomainCount = 5)
  • 與儲存體磁碟容錯網域一致的分配 (僅適用於區域性部署 platformFaultDomainCount = 2 or 3)

使用最大分配時,擴展集會盡量將 VM 分配至每個區域中的多個容錯網域。 您可以在每個區域中五個以上或以下的容錯網域中進行此分配。 若使用靜態固定分配,擴展集會確切地在每個區域的五個容錯網域中分配 VM。 如果擴展集無法在每個區域中找到五個不同的容錯網域,來滿足配置要求,則要求會失敗。

我們建議您使用最大分配來為大部分工作負載進行部署,因為此方法在大部分情況下能提供最佳分配。 如果您需要將複本分配到不同硬體的獨立單元,我們建議您在可用性區域之間進行分配,並在每個區域中使用最大分配。

注意

使用最大分配時,無論您在多少個容錯網域間分配 VM,在擴展集 VM 執行個體檢視和執行個體中繼資料中只會看到一個容錯網域。 每個區域中的分配都是隱含的。

放置群組

重要

放置群組僅適用於以統一協調流程模式執行的虛擬機器擴展集。

當您部署擴展集時,您可以使用每個可用性區域的單一放置群組進行部署,或者使用每個區域的多個放置群組進行部署。 若是區域 (非區域性) 擴展集,您的選項是在該區域中有單一放置群組,或者在該區域中有多個放置群組。 如果名為 singlePlacementGroup 的擴展集屬性設定為 false,擴展集可以由多個放置群組構成,且具有範圍為 0 到 1,000 個的 VM。 當設定為預設值 true 時,擴展集則由單一放置群組構成,且具有範圍為 0 到 100 個的 VM。 針對大部分的工作負載,我們建議您使用多個放置群組,如此便能有更大的擴展性。 在 API 版本 2017-12-01 中,擴展集預設為單一區域和跨區域擴展集可有多個放置群組,但若是區域性 (非區域性) 擴展集,其預設為單一放置群組。

注意

如果您使用最大分配,您必須使用多個放置群組。

區域平衡

最後,針對跨多個區域部署的擴展集,您也可以選擇「最佳區域平衡」或「嚴格區域平衡」。對擴展集而言,如果每個區域與所有其他區域都具有相同數目的 VM,但 VM 數目差異可為 +\- 1 個,則此擴展集即為「平衡」。 例如:

  • 擴展集的區域 1 中有 2 個 VM,區域 2 中有 3 個 VM,而區域 3 中有 3 個 VM,則視為平衡。 只有一個區域的 VM 計數不同,且只比其他區域少 1 個。
  • 擴展集的區域 1 中有 1 個 VM,區域 2 中有 3 個 VM,而區域 3 中有 3 個 VM,則視為不平衡。 區域 1 的 VM 數目比區域 2 和 3 少 2 個。

也有可能發生擴展集中的 VM 建立成功,但這些 VM 上的延伸模組卻無法部署。 判斷擴展集是否平衡時,仍會將這些擴充失敗的 VM 計算在內。 例如,針對區域 1 中有 3 個 VM,區域 2 中有 3 個 VM,以及區域 3 中有 3 個 VM 的擴展集,即使區域 1 中的所有擴充都失敗,但區域 2 和區域 3 中的所有擴充都成功,則此擴展集將視為平衡。

若使用最佳區域平衡,擴展集會嘗試縮減或擴增以維持平衡。 不過,如果區域平衡基於某些原因而不能這麼做 (例如,如果某一個區域無法運作,擴展集不能在該區域中建立新的 VM),該擴展集會允許暫時性的不平衡,以成功進行縮減或擴增。在後續的相應放大嘗試上,該擴展集會將 VM 新增至其擴展集需要更多 VM 以取得平衡的區域。 同樣地,在後續的縮減嘗試上,該擴展集會將 VM 從其擴展集需要減少 VM 以取得平衡的區域中移除。 使用「嚴格區域平衡」,擴展集無法嘗試任何縮減或放大,如果這樣做會導致不平衡。

若要使用最佳區域平衡,請將 zoneBalance 設為 false。 在 API 版本 2017-12-01 中,這項設定是預設值。 若要使用嚴格區域平衡,請將 zoneBalance 設為 true

注意

只有當擴展集的區域屬性包含一個以上的區域時,才能設定 zoneBalance 屬性。 如果沒有指定區域或只指定一個區域,不應設定 zoneBalance 屬性。

建立跨越區域或區域性擴展集

在 Azure 區域中部署虛擬機器擴展集時,您可以選擇要使用一或多個可用性區域。

您可以使用下列其中一個方法,來建立使用可用性區域的擴展集:

使用 Azure 入口網站

建立使用可用性區域之擴展集的流程,與使用者入門文章中所述的流程相同。 當您選取支援的 Azure 區域時,就可以在一或多個可用區域中建立擴展集,如下列範例所示:

在單一可用性區域中建立擴展集

擴展集和支援資源 (例如,Azure 負載平衡器和公用 IP 位址) 都會建立在您指定的單一區域中。

使用 Azure CLI

建立使用可用性區域之擴展集的流程,與使用者入門文章中所述的流程相同。 若要使用可用性區域,您必須在支援的 Azure 區域中建立擴展集。

--zones 參數新增至 az vmss create 命令,並指定要使用的區域 (例如區域 1、2 或 3)。

az vmss create \
    --resource-group myResourceGroup \
    --name myScaleSet \
    --image <SKU Image> \
    --upgrade-policy-mode automatic \
    --admin-username azureuser \
    --generate-ssh-keys \
    --zones 1 2 3

在您指定的區域中建立及設定所有擴展集資源和 VM 需要幾分鐘的時間。 如需區域備援擴展集和網路資源的完整範例,請參閱這個 CLI 指令碼範例

使用 Azure PowerShell

若要使用可用性區域,您必須在支援的 Azure 區域中建立擴展集。 將 -Zone 參數新增至 New-AzVmssConfig 命令,並指定要使用的一或多個區域 (例如區域 1、2 或 3)。

New-AzVmss `
  -ResourceGroupName "myResourceGroup" `
  -Location "EastUS2" `
  -VMScaleSetName "myScaleSet" `
  -VirtualNetworkName "myVnet" `
  -SubnetName "mySubnet" `
  -PublicIpAddressName "myPublicIPAddress" `
  -LoadBalancerName "myLoadBalancer" `
  -UpgradePolicy "Automatic" `
  -Zone "1", "2", "3"

使用 Azure 資源管理員範本

建立使用可用性區域之擴展集的流程,與 LinuxWindows 的使用者入門文章中所述的流程相同。

{
  "type": "Microsoft.Compute/virtualMachineScaleSets",
  "name": "myScaleSet",
  "location": "East US 2",
  "apiVersion": "2017-12-01",
  "zones": [
        "1",
        "2",
        "3"
      ]
}

如果您建立的是公用 IP 位址或負載平衡器,請指定 "sku": {"name":"Standard"} 屬性,以建立區域備援網路資源。 您還必須建立網路安全性群組和規則,以便允許所有流量。 如需詳細資訊,請參閱 Azure Load Balancer Standard 概觀標準 Load Balancer 和可用性區域

如需區域備援擴展集和網路資源的完整範例,請參閱我們的 Resource Manager 範本範例

更新擴展集以新增可用性區域

您可以修改擴展,以展開要分散 VM 執行個體的區域集。 擴充功能可讓您利用較高的區域性可用性 SLA (99.99%) 與區域可用性 SLA (99.95%), 或擴充擴展集,以利用建立擴展集時無法使用的新可用性區域。

重要

更新虛擬機器擴展集,以新增目前為預覽狀態的可用性區域。 若您同意補充的使用規定,即可取得預覽。 在公開上市 (GA) 之前,此功能的某些領域可能會變更。

重要

此功能適用於 虛擬機器擴展集 上的無狀態工作負載。 區域性擴充不支援含具狀態工作負載的擴展集,或與 Service Fabric 或 Azure Kubernetes Services 搭配使用的擴展集

這項功能可以搭配 API 版本 2023-03-01 或更新版本使用。

啟用您的訂用帳戶以使用區域性擴充功能

您必須在訂用帳戶上註冊四個功能旗標:

az feature register --namespace Microsoft.Compute --name VmssAllowRegionalToZonalMigration
az feature register --namespace Microsoft.Compute --name VmssAllowExpansionOfAvailabilityZones
az feature register --namespace Microsoft.Compute --name VmssFlexAllowExpansionOfAvailabilityZones
az feature register --namespace Microsoft.Compute --name VmssFlexAllowRegionalToZonalMigration

您可以使用以下項目來檢查每個功能的註冊狀態:

az feature show --namespace Microsoft.Compute --name \<feature-name\>

擴充擴展集以使用可用性區域

您可以更新擴展集,將執行個體擴增至一或多個額外的可用性區域,最多可擴增至區域支援的可用性區域數目上限。 對於支援可用性區域的區域,可用性區域的數目下限為 3。

重要

當您將擴展集擴充至其他區域時,不會移轉或變更原始執行個體。 當您擴增時,將會建立新的執行個體,並平均分散到選取的可用性區域。 在擴展集中進行縮減時,系統會優先移除任何區域性執行個體。 之後,將會根據縮減原則移除執行個體。

擴充至區域性擴展集只需 3 個步驟:

  1. 準備區域性擴充
  2. 更新擴展集上的區域參數
  3. 新增區域性執行個體並移除原始執行個體

準備區域性擴充

警告

此功能可讓您將區域新增至擴展集。 新增區域後,您就無法返回區域性擴展集或移除區域。

若要準備區域性擴充:

  • 檢查您有足夠的配額,讓所選區域中的 VM 大小處理更多執行個體。
  • 檢查您使用的 VM 大小和磁碟類型是否適用於所有所需區域。 您可以使用計算資源 SKU API 來判斷大小適用於何種區域
  • 驗證擴展集設定是否適用於區域性擴展集:
    • 務必將 platformFaultDomainCount 設定為 1 或 5。 區域性部署不支援 2 或 3 個容錯網域的固定分配。
    • 區域擴充期間不支援容量保留。 擴展集完全區域化後 (不再有區域性執行個體),您可以將容量保留群組新增至擴展集。
    • 不支援 Azure 專用主機部署。

更新擴展集上的區域參數

更新擴展集以變更區域參數。

  1. 瀏覽至要更新的擴展集
  2. 在擴展集登陸頁面的 [屬性] 索引標籤上,尋找 [可用性區域] 屬性,然後按一下 [編輯]
  3. 在 [編輯位置] 對話方塊中,選取所需的區域
  4. 選取 [套用]

新增區域性執行個體並移除原始執行個體

手動擴增和縮減

更新擴展集的容量以新增更多執行個體。 新的容量應該設定為原始容量加上新執行個體的數目。 例如,如果您的擴展集有 5 個區域性執行個體,且您想要進行擴增,讓 3 個區域中各有 3 個執行個體,則應該將容量設定為 14。

您可以在相同的 ARM 範本或 REST API 呼叫中更新區域參數和擴展集容量。

當您確認新的執行個體符合需求後,即可縮減擴展集來移除原始區域性執行個體。 您可以手動刪除特定區域性執行個體,或減少擴展集容量來進行縮減。 透過減少擴展集容量進行縮減時,平台一律會優先移除區域性執行個體,然後遵循縮減原則。

使用輪流升級 + MaxSurge 進行自動化

透過輪流升級 + MaxSurge,系統會以批次中的最新縮放模型來建立新區域性執行個體,並讓執行個體處於最新狀態。 當一批新的執行個體新增至擴展集,且回報狀況良好後,系統就會從擴展集自動移除一批舊的執行個體。 升級會繼續進行,直到所有執行個體都處於最新狀態。

重要

輪流升級搭配 MaxSurge 功能目前處於公開預覽狀態。 此功能僅適用於 VMSS 統一協調流程模式。

已知問題與限制

  • 此功能是以 虛擬機器擴展集 上的無狀態工作負載為目標。

  • 不支援執行 Service Fabric 或 Azure Kubernetes Service 的擴展集。

  • 您無法移除或取代區域,只能新增區域

  • 您無法將跨越區域或區域性擴展集升級為區域性擴展集。

  • 務必將 platformFaultDomainCount 設定為 1 或 5。 區域性部署不支援 2 或 3 個容錯網域的固定分配。

  • 區域擴充期間不支援容量保留。 擴展集完全區域化後 (不再有區域性執行個體),您可以將容量保留群組新增至擴展集。

  • 不支援 Azure 專用主機部署

下一步

現在您已在可用性區域中建立擴展集,接下來您可以瞭解如何在虛擬機器擴展集上部署應用程式搭配虛擬機器擴展集使用自動調整