Share via


虛擬機器擴展集中的可靠性

本文包含虛擬機器擴展集可用性區域支援特定可靠性建議和資訊。

注意

虛擬機器擴展集只能部署到一個區域。 如果您想要跨多個區域部署 VM,請參閱虛擬機器災害復原:跨區域容錯移轉

有關 Azure 可靠性的結構概觀,請參閱 Azure 可靠性

可靠性建議

本節內含成功復原和可用性的建議。 每個建議都屬以下其中一類 (共兩類):

  • 健康情況項目涵蓋的領域包括設定項目,以及構成 Azure 工作負載 (例如 Azure 資源組態設定、與其他服務的相依性等)的主要元件的正確函式。

  • 風險項目涵蓋的領域包括可用性和復原需求、測試、監視、部署等其他項目,若不解決,環境將經常出現問題。

可靠性建議優先順序矩陣

每個建議都根據以下優先順序矩陣標記:

映像 優先順序 描述
需要立即修正。
在 3-6 個月內修正。
需要檢閱。

可靠性建議摘要

類別 優先順序 建議
高可用性 啟用自動修復原則
使用虛擬機器擴展集彈性跨可用性區域部署虛擬機器擴展集
延展性 VMSS-1:使用彈性協調流程模式部署 VM
將虛擬機器擴展集自動調整設定為自動
將虛擬機器擴展集自訂縮減原則設定為預設值
災害復原 為所有虛擬機器擴展集 VM 啟用保護原則
監視 啟用虛擬機器擴展集應用程式狀況監控
系統效率 將配置原則分配演算法設定為最大分配
自動化 將修補程式協調流程選項設定為 Azure 協調

高可用性

啟用自動修復原則

若要達到應用程式的高可用性,請啟用自動執行個體修復,以維護一組狀況良好的 VM。 當應用程式健康狀態延伸模組Load Balancer 健全狀態探查發現執行個體狀況不良時,自動執行個體修復會刪除狀況不良的執行個體,並建立新的執行個體來取代它。

您可以使用屬性 automaticRepairsPolicy.gracePeriod 來設定寬限期。 以分鐘和 ISO 8601 格式指定的寬限期可以介於 10 到 90 分鐘之間,且預設值為 30 分鐘。

// Azure Resource Graph Query
// Find VMSS instances associated with autoscale settings when autoscale is disabled
resources
| where type == "microsoft.compute/virtualmachinescalesets"
| project name, id, tags
| join kind=leftouter  (
    resources
    | where type == "microsoft.insights/autoscalesettings"
    | where tostring(properties.targetResourceUri) contains "Microsoft.Compute/virtualMachineScaleSets"
    | project id = tostring(properties.targetResourceUri), autoscalesettings = properties
) on id
| where isnull(autoscalesettings) or autoscalesettings.enabled == "false"
| project recommendationId = "vmss-4", name, id, tags, param1 = "autoscalesettings: Disabled"
| order by id asc

使用虛擬機器擴展集彈性跨可用性區域部署虛擬機器擴展集

建立虛擬機器擴展集時,請使用可用性區域保護應用程式和資料,以免資料中心突然故障。 如需詳細資訊,請參閱可用性區域支援

// Azure Resource Graph Query
// Find VMSS instances with one or no Zones selected
resources
| where type == "microsoft.compute/virtualmachinescalesets"
| where array_length(zones) <= 1 or isnull(zones)
| project recommendationId = "vmss-8", name, id, tags, param1 = "AvailabilityZones: Single Zone"
| order by id asc

延展性

使用彈性協調流程模式部署 VM

所有 VM,包括單一執行個體 VM,都應該使用彈性協調流程模式部署到擴展集,以確保未來您的應用程式能夠調整且具有可用性。 彈性協調流程可透過在區域中的多個容錯網域上或可用性區域內分配 VM,來提供高可用性保證 (高達 1000 個 VM)。

如需如何適當使用擴展集的詳細資訊,請參閱何時使用虛擬機器擴展集而非 VM

// Azure Resource Graph Query
// Find all zonal VMs that are NOT deployed with Flex orchestration mode
resources
| where type == "microsoft.compute/virtualmachinescalesets"
| where properties.orchestrationMode != "Flexible"
| project recommendationId = "vmss-1", name, id, tags, param1 = strcat("orchestrationMode: ", tostring(properties.orchestrationMode))

將虛擬機器擴展集自動調整設定為自動

自動調整是 Azure 監視器的內建功能,可根據需求新增和移除擴展集 VM,以協助資源的效能和成本效益。 此外,您可以選擇手動將資源調整為特定執行個體計數,或根據計量閾值進行調整。 您也可以排程在指定時間範圍內調整的執行個體計數。

若要了解如何啟用自動 OS 映像升級,請參閱 Azure 虛擬機器擴展集自動 OS 映像升級

// Azure Resource Graph Query
// Find VMSS instances associated with autoscale settings when predictiveAutoscalePolicy_scaleMode is disabled
resources
| where type == "microsoft.compute/virtualmachinescalesets"
| project name, id, tags
| join kind=leftouter  (
    resources
    | where type == "microsoft.insights/autoscalesettings"
    | where tostring(properties.targetResourceUri) contains "Microsoft.Compute/virtualMachineScaleSets"
    | project id = tostring(properties.targetResourceUri), autoscalesettings = properties
) on id
| where autoscalesettings.enabled == "true" and autoscalesettings.predictiveAutoscalePolicy.scaleMode == "Disabled"
| project recommendationId = "vmss-5", name, id, tags, param1 = "predictiveAutoscalePolicy_scaleMode: Disabled"
| order by id asc

將虛擬機器擴展集自訂縮減原則設定為預設值

虛擬機器擴展集自訂縮減原則功能可讓您設定虛擬機縮減的順序。 縮減原則設定有三種:

虛擬機器擴展集部署可以根據計量陣列進行擴大或縮減,這些計量包括平台和使用者定義的自訂計量。 相應放大會根據擴展集模型建立新的虛擬機器,相應縮小則會影響執行中的虛擬機器,而隨著擴展集工作負載的發展,可能會有不同的設定和/或功能。

如果您只想要遵循預設順序,就不需要指定縮減原則,因為預設自訂縮減原則會為大部分案例提供最佳的演算法和彈性。 預設順序如下:

  1. 在可用性區域之間平衡虛擬機器 (如果擴展集是以可用性區域支援部署)。
  2. 平衡容錯網域之間的虛擬機器 (盡力)。
  3. 刪除具有最高執行個體識別碼的虛擬機器。

只有在工作負載要求在平衡跨可用性區域之後刪除最舊或最新的 VM 時,才使用最新和最舊的原則。

注意

在可用性區域或容錯網域之間平衡,不會跨可用性區域或容錯網域移動 VM。 達到平衡的方法是從不平衡的可用性區域或容錯網域刪除虛擬機器,直到虛擬機器的分佈達到平衡為止。

// Azure Resource Graph Query
// Find VMSS instances where strictly zoneBalance is set to True
resources
| where type == "microsoft.compute/virtualmachinescalesets"
| where properties.orchestrationMode == "Uniform" and properties.zoneBalance == true
| project recommendationId = "vmss-6", name, id, tags, param1 = "strictly zoneBalance: Enabled"
| order by id asc

災害復原

為所有虛擬機器擴展集 VM 啟用保護原則

如果您想要將特定 VM 與擴展集執行個體的其餘部分分開處理,請使用虛擬機器擴展集保護原則。

當應用程式處理流量時,在某些情況下您可能會希望將特定 VM 與其他的擴展集執行個體分開處理。 例如,擴展集中某些 VM 可能正在執行長時間的作業,且您不希望在作業完成前縮減這些 VM。 您也可能在擴展集中特製化一些 VM,以執行與擴展集其他成員不同的工作。 您要求這些特殊 VM 不與擴展集內的其他 VM 一起修改。 執行個體保護會提供額外控制項,以為應用程式提供這些案例和其他案例。

// Azure Resource Graph Query
// Find all VMs that do NOT have health monitoring enabled
resources
| where type == "microsoft.compute/virtualmachinescalesets"
| join kind=leftouter  (
    resources
    | where type == "microsoft.compute/virtualmachinescalesets"
    | mv-expand extension=properties.virtualMachineProfile.extensionProfile.extensions
    | where extension.properties.type in ( "ApplicationHealthWindows", "ApplicationHealthLinux" )
    | project id
) on id
| where id1 == ""
| project recommendationId = "vmss-2", name, id, tags, param1 = "extension: null"

監視

啟用虛擬機器擴展集應用程式狀況監控

監視應用程式健康狀態是用於管理及升級部署的重要訊號。 Azure 虛擬機器擴展集提供輪流升級的支援,包括:

// Azure Resource Graph Query
// Find all VMs that do NOT have automatic repair policy enabled
resources
| where type == "microsoft.compute/virtualmachinescalesets"
| where properties.automaticRepairsPolicy.enabled == false
| project recommendationId = "vmss-3", name, id, tags, param1 = "automaticRepairsPolicy: Disabled"

系統效率

將配置原則分配演算法設定為最大分配

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

如需詳細資訊,請參閱分配選項

// Azure Resource Graph Query
// Find VMSS instances where Spreading algorithm is set to Static
resources
| where type == "microsoft.compute/virtualmachinescalesets"
| where properties.platformFaultDomainCount > 1
| project recommendationId = "vmss-7", name, id, tags, param1 = "platformFaultDomainCount: Static"
| order by id asc

自動化

將修補程式協調流程選項設定為 Azure 協調

為您的 Azure VM 啟用自動 VM 客體修補。 自動 VM 客體修補可藉由安全地自動修補 VM 來協助簡化更新管理,以維護安全性合規性,同時限制 VM 的影響範圍。

resources
| where type == "microsoft.compute/virtualmachinescalesets"
| join kind=inner (
    resources
    | where type == "microsoft.compute/virtualmachines"
    | project id = tostring(properties.virtualMachineScaleSet.id), vmproperties = properties
) on id
| extend recommendationId = "vmss-9", param1 = "patchMode: Manual", vmproperties.osProfile.linuxConfiguration.patchSettings.patchMode
| where isnotnull(vmproperties.osProfile.linuxConfiguration) and vmproperties.osProfile.linuxConfiguration.patchSettings.patchMode !in ("AutomaticByPlatform", "AutomaticByOS")
| distinct recommendationId, name, id, param1
| union (resources
| where type == "microsoft.compute/virtualmachinescalesets"
| join kind=inner (
    resources
    | where type == "microsoft.compute/virtualmachines"
    | project id = tostring(properties.virtualMachineScaleSet.id), vmproperties = properties
) on id
| extend recommendationId = "vmss-9", param1 = "patchMode: Manual", vmproperties.osProfile.windowsConfiguration.patchSettings.patchMode
| where isnotnull(vmproperties.osProfile.windowsConfiguration) and vmproperties.osProfile.windowsConfiguration.patchSettings.patchMode !in ("AutomaticByPlatform", "AutomaticByOS")
| distinct recommendationId, name, id, param1)

可用性區域支援

Azure 可用性區域是每個 Azure 區域內至少三個實體上獨立的資料中心群組。 每個區域內的資料中心都配備了獨立的電源、冷卻和網路基礎結構。 可用性區域的作用是在一個區域受影響時 (例如本機區域失敗時),讓其餘兩個區域支援區域服務、容量和高可用性。

這類失敗的範圍可從軟體和硬體故障,擴及到如地震、淹水和火災的事件。 Azure 服務的備援和邏輯隔離功能可以容錯。 如需深入了解 Azure 的可用性區域,請參閱區域和可用性區域

已啟用 Azure 可用性區域的服務是設計來提供正確的可靠性和彈性層級。 您可以透過兩種方式加以設定。 可採用區域備援 (可跨區域自動複寫) 或分區 (將執行個體釘選在特定區域)。 兩種方法可以結合使用。 如需區域與區域備援結構的詳細資訊,請參閱使用可用性分區和區域的建議

有了 Azure 虛擬機器擴展集,您便可以建立和管理一組負載平衡的 VM。 VM 的數目可以自動增加或減少,以因應需求或已定義的排程。 擴展集確保應用程式的高可用性,可讓您集中管理、設定和更新許多 VM。 擴展集本身不需要任何成本。 且只須為您建立的每一個 VM 執行個體付費。

虛擬機器擴展集支援區域內的分區和區域備援部署:

  • 分區部署。 當您在單一區域中建立擴展集時,您可以控制該集合的所有 VM 執行所在區域。 擴展集只會在該區域內進行管理和自動調整。

  • 區域備援部署。 區域備援擴展集可讓您建立跨多個區域的單一擴展集。 根據預設,當 VM 建立時,它們會在區域之間平均平衡。

必要條件

  1. 若要使用可用性區域,您必須在支援的 Azure 區域中建立擴展集。

  2. 所有 VM,即使是單一執行個體 VM,都應該使用彈性協調流程模式部署到擴展集,以確保未來您的應用程式能夠調整且具有可用性。

SLA

可用性區域在實體上是獨立的,提供不同的電源、網路和冷卻,因此服務等級協定 (SLA) 增加。 如需詳細資訊,請參閱 Microsoft Online Services 的 SLA

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

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

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

Create a scale set in a single availability zone

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

分區容錯移轉支援

在沒有任何區域 (zone) 的 Azure 區域 (region) 中,預設會建立具有五個容錯網域的虛擬機器擴展集。 若為支援可用性區域性虛擬機器擴展集部署的區域,且已選取此選項,則每個區域容錯網域計數的預設值為 1。 在此情況下,FD=1 表示屬於擴展集的 VM 執行個體會儘可能分散於許多機架。 如需詳細資訊,請參閱為虛擬機器擴展集選擇正確的容錯網域數目

低延遲設計

建議您使用區域備援設定虛擬機器擴展集。 不過,如果您的應用程式有嚴格的低延遲需求,則可能需要為擴展集 VM 實作分區。 使用分區擴展集部署時,建議您跨多個區域建立多個擴展集 VM。 例如,您可以建立一個釘選至區域 1 的擴展集執行個體,以及建立一個釘選至區域 2 或 3 的執行個體。 您也需要使用負載平衡器或其他應用程式邏輯,在區域中斷期間將流量導向至適當的擴展集。

重要

如果您退出宣告區域感知部署,將放棄因隔離基礎錯誤而獲得的保護。 退出宣告可用性區域設定時,將強制依賴不遵守區域放置和隔離的資源 (包括這些資源的基礎相依性)。 您不應指望這些資源在區域關閉的情節中,還能留存下來。 有效率的調控這類資源的解決方案應定義災害復原策略,並在另一個區域中設定解決方案的復原。

安全部署技術

若要更充分掌控部署 VM 的位置,您應該部署分區,而不是區域擴展集 VM。 不過,分區 VM 只提供區域隔離,而不是區域備援。 若要使用分區 VM 達成完整區域備援,應該有兩個以上的 VM 跨不同區域。

另外也建議您針對區域備援 VM 使用最大分配部署選項。 如需詳細資訊,請參閱分配選項

分配選項

當您將擴展集部署到一或多個可用性區域時,您有下列分配選項 (從 API 版本 2017-12-01 起):

  • 最大分配 (platformFaultDomainCount = 1)。 最大分配是建議的部署選項,因為它在大部分情況下提供最佳的分配。 如果您需要將複本分配到不同硬體的獨立單元,我們建議您在可用性區域之間進行分配,並在每個區域中使用最大分配。

    使用最大分配時,擴展集會盡量將 VM 分配至每個區域中的多個容錯網域。 您可以在每個區域中五個以上或以下的容錯網域中進行此分配。

    注意

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

  • 靜態固定分配 (platformFaultDomainCount = 5)。 若使用靜態固定分配,擴展集會確切地在每個區域的五個容錯網域中分配 VM。 如果擴展集無法在每個區域中找到五個不同的容錯網域,來滿足配置要求,則要求會失敗。

  • 分配與受控磁碟容錯網域一致 (platformFaultDomainCount = 2 或 3) 您可以考慮使擴展集容錯網域數目與受控磁碟容錯網域數目一致。 如果整個受控磁碟容錯網域停止運作,此一致狀態有助於防止仲裁遺失。 您可將容錯網域計數設定為小於或等於每個區域中可用的受控磁碟容錯網域數目。 若要了解依區域的受控磁碟容錯網域數目,請參閱 [在這裡插入文件] (這裡放置連結)。

區域平衡

針對跨多個區域部署的擴展集 (區域備援),您可以選擇最佳區域平衡嚴格區域平衡。 如果每個區域與擴展集中所有其他區域都具有相同數目的 VM (加減 1 個 VM),則該擴展集即視為「平衡」。 例如:

擴展集 區域 1 中的 VM 區域 2 中的 VM 區域 3 中的 VM 區域平衡
平衡擴展集 2 3 3 此擴展集視為平衡。 只有一個區域的 VM 計數不同,且只比其他區域少 1 個。
不平衡的擴展集 1 3 3 此擴展集被視為不平衡。 區域 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 設定是預設值。 若要使用嚴格區域平衡,請將 zoneBalance 設定為 true

移轉至可用性區域支援

若要了解如何將區域擴展集重新部署至可用性區域支援,請參閱將虛擬機器和虛擬機器擴展集移轉到可用性區域支援

其他指導方針

放置群組

重要

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

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

下一步