共用方式為


Azure 虛擬機器擴展集的自動執行個體修復

針對 Azure 虛擬機器擴展集啟用自動執行個體修復,可透過維護一組狀況良好的執行個體,協助實現應用程式的高可用性。 如果應用程式健康情況延伸模組負載平衡器健康情況探查找到狀況不良的實例,則自動實例修復會嘗試觸發修復動作來復原實例,例如刪除狀況不良的實例,並建立新的實例來取代它、重新映像狀況不良的實例,或重新啟動狀況不良的實例。

使用自動執行個體修復的需求

針對擴展集啟用應用程式狀況監控

此擴展集應已針對執行個體啟用應用程式狀況監控。 健康情況監視可以使用應用程式健康情況延伸模組負載平衡器健全狀態探查來完成,一次只能啟用一個。 應用程式健全狀況延伸模組或負載平衡器探查會偵測虛擬機器執行個體上設定的應用程式端點,以判斷應用程式健全狀態。 擴展集協調器會使用此健全狀態來監視執行個體健康情況,並在需要時執行修復。

設定端點以提供健全狀態

啟用自動執行個體修復原則之前,請先確定擴展集執行個體已設定應用程式端點來發出應用程式健全狀態。 若要在應用程式健康情況延伸模組上設定健全狀態,您可以使用二進位健全狀態豐富健全狀態。 若要使用負載平衡器健全狀態探查設定健全狀態,請參閱探查行為

針對標示為「狀況不良」或「未知」的執行個體 (未知狀態僅適用於應用程式健康情況延伸模組 - 豐富健全狀態),擴展集會觸發自動修復。 啟用自動修復原則之前,請先確定已正確設定應用程式端點,以避免在設定端點時發生非預期的執行個體修復。

API 版本

計算 API 2018-10-01 版或更新版本支援自動修復原則。

repairAction計算 API 版本 2021-11-01 或更高版本支援重新映像和重新啟動的設定。

對資源或訂用帳戶移動的限制

目前不支援在啟用自動修復功能時對擴展集進行資源或訂用帳戶移動。

對 Service Fabric 擴展集的限制

Service Fabric 擴展集目前不支援此功能。

佈建錯誤的 VM 限制

自動修復目前不支援 VM 執行個體因為佈建失敗而標示為「狀況不良」的案例。 VM 必須成功初始化,才能啟用健康情況監視和自動修復功能。

自動執行個體修復如何運作?

自動執行個體修復功能需依賴擴展集中個別執行個體的狀況監控。 擴展集中的 VM 執行個體可以設定為使用應用程式健全狀況延伸模組負載平衡器健全狀態探查來發出應用程式健全狀態。 如果發現執行個體狀況不良,擴展集會在狀況不良的執行個體上執行預先設定的修復動作。 您可以使用 automaticRepairsPolicy 物件,在虛擬機器擴展集模型中啟用自動執行個體修復。

自動執行個體修復程序的運作方式如下:

  1. 應用程式健全狀況延伸模組負載平衡器健全狀態探查會偵測擴展集中每部虛擬機器內的應用程式端點,以取得每個執行個體的應用程式健全狀態。
  2. 如果端點回應狀態 200 (良好),則會將執行個體標示為「良好」。 在其他所有情況下 (包括無法觸達端點),就會將執行個體標示為「狀況不良」。
  3. 當發現執行個體狀況不良時,擴展集會將已設定的修復動作(預設值為「取代」) 套用至狀況不良的執行個體。
  4. 執行個體修復會以批次方式執行。 在任何指定時間,於擴展集中修復的執行個體數目不會超過總數的 5%。 如果擴展集中的執行個體少於 20 個,則一次會針對一個狀況不良的執行個體進行修復。
  5. 上述程序會繼續進行,直到擴展集中所有狀況不良的執行個體都已修復為止。

可用的修復動作

自動實例修復有三個可用的修復動作 – 取代、重新安裝映像和重新啟動。 默認修復動作為 Replace,但您可以藉由修改 repairAction 物件下的 automaticRepairsPolicy 設定來設定自動修復,以使用 Reimage 或 Restart。

  • 取代會刪除狀況不良的執行個體,並建立新的執行個體來取代它。 您可以使用最新的虛擬機器擴展集模型來建立新的執行個體。 此修復動作是預設值。

  • 重新安裝映像會將重新安裝映像作業套用至狀況不良的執行個體。

  • 重新啟動會將重新啟動作業套用至狀況不良的執行個體。

下表會比較這三個修復動作之間的差異:

修復動作 保留 VM 執行個體識別碼? 保留私人 IP 嗎? 保留受控資料磁碟? 保留受控 OS 磁碟? 保留本機 (暫存) 磁碟?
取代 (預設值) No No
重新安裝映像 Yes .是 Yes
重新啟動 Yes .是 .是 .是 Yes

如需在自動修復原則下更新修復動作的詳細資料,請參閱在自動修復原則上設定修復動作一節。

批次處理

自動執行個體修復作業會以批次方式執行。 在任何指定時間,擴展集中透過自動修復原則進行修復的執行個體數目不會超過 5%。 此程序有助於避免在發現執行個體狀況不良時刪除並重新建立大量執行個體。

寬限期

當執行個體因為在擴展集上執行 PUT、PATCH 或 POST 動作而經歷狀態變更作業,則只有在寬限期結束後,才會在該執行個體上執行任何修復動作。 寬限期是讓執行個體能夠回復為健全狀態的時間量。 寬限期會在狀態變更完成之後開始,這有助於避免任何過早或意外的修復作業。 擴展集中任何新建立的執行個體都會具有寬限期 (包括因為修復作業而建立的執行個體)。 寬限期會以 ISO 8601 格式來指定 (以分鐘為單位),而且可以使用 automaticRepairsPolicy.gracePeriod 屬性來設定。 寬限期的範圍可介於 10 分鐘到 90 分鐘之間,而預設值為 10 分鐘。

暫止修復

虛擬機器擴展集讓您能夠視需要暫時暫止自動執行個體修復。 在虛擬機器擴展集的執行個體檢視中的 orchestrationServices 屬性下方,適用於自動修復的 serviceState 會顯示自動修復的目前狀態。 將擴展集加入自動修復時,會將 serviceState 參數的值設定為 Running。 暫止擴展集的自動修復時,會將 serviceState 參數設定為 Suspended。 如果 automaticRepairsPolicy 定義於擴展集上,但未啟用自動修復功能,則會將 serviceState 參數設定為 Not Running

如果新建立的執行個體在取代擴展集中狀況不良的執行個體之後仍然持續維持狀況不良 (即使在重複執行修復作業之後),則作為安全措施,平台會將適用於自動修復的 serviceState 更新為 Suspended。 您可以將適用於自動修復的 serviceState 值設定為 Running,以繼續自動修復。 如需詳細指示,請參閱關於如何針對擴展集檢視和更新自動修復原則的服務狀態的小節。

您也可以設定 Azure 警示規則來監視 serviceState 變更,並在擴展集上暫停自動修復時收到通知。 如需詳細資料,請參閱使用 Azure 警示規則來監視自動執行個體修復 serviceState 中的變更

執行個體保護和自動修復

如果擴展集中的執行個體會透過套用其中一個保護原則來保護,則不會在該執行個體上執行自動修復。 此行為適用於下列兩個保護原則:「防止縮減」和「防止擴展集」動作。

終止通知和自動修復

如果在擴展集上啟用終止通知功能,則在取代作業期間,刪除狀況不良的執行個體會遵循終止通知設定。 終止通知會透過 Azure 中繼資料服務 (已排定事件) 來傳送,而執行個體刪除會在設定的延遲逾時期間延遲。 但是,建立新執行個體來取代狀況不良的執行個體,並不會等候延遲逾時完成。

在建立新擴展集時啟用自動修復原則

重要

自 2023 年 11 月起,如果未指定協調流程模式,則使用 PowerShell 和 Azure CLI 建立的 VM 擴展集會預設為彈性協調流程模式。 如需此變更的詳細資訊,以及您應該採取的動作,請移至針對 VMSS PowerShell/CLI 客戶的中斷性變更 - Microsoft 社群中樞

若要在建立新擴展集時啟用自動修復原則,請確定已符合加入此功能的所有需求。 應用程式端點應針對擴展集執行個體正確設定,以避免在設定端點時觸發非預期的修復。 針對新建立的擴展集,只有在寬限期完成之後,才會執行任何執行個體修復。 若要在擴展集中啟用自動執行個體修復,請在虛擬機器擴展集模型中使用 automaticRepairsPolicy 物件。

您也可以使用此快速入門範本來部署虛擬機器擴展集。 在快速入門中,擴展集具有負載平衡器健康情況探查,並啟用自動修復實例,且已設定寬限期為 30 分鐘。

下列步驟會在建立新擴展集時啟用自動修復原則。

  1. 移至 [虛擬機器擴展集]
  2. 選取 [+ 新增],建立新的擴展集。
  3. 移至 [健康情況] 索引標籤。
  4. 找出 [健康情況] 區段。
  5. 啟用 [監視應用程式健全狀況] 選項。
  6. 找出 [自動修復原則] 區段。
  7. 將 [自動修復] 選項設定為 [開啟]
  8. 在 [寬限期 (分鐘)] 中,指定寬限期 (以分鐘為單位),允許的值介於 10 到 90 分鐘之間。
  9. 完成建立新的擴展集之後,選取 [檢閱 + 建立] 按鈕。

在更新現有的擴展集時啟用自動修復原則

在現有擴展集中啟用自動修復原則之前,請先確定已符合加入此功能的所有需求。 應用程式端點應針對擴展集執行個體正確設定,以避免在設定端點時觸發非預期的修復。 若要在擴展集中啟用自動執行個體修復,請在虛擬機器擴展集模型中使用 automaticRepairsPolicy 物件。

更新現有擴展集的模型之後,請務必將最新模型套用至該擴展的所有執行個體。 請參閱如何藉由使用最新的擴展集模型將 VM 更新至最新狀態的相關指示。

您可以透過 Azure 入口網站,修改現有擴展集的自動修復原則。

注意

在您開始後續步驟之前,請在虛擬機器擴展集上啟用應用程式健康情況延伸模組負載平衡器健全狀態探查

  1. 移至現有的虛擬機器擴展集。0
  2. 在左側功能表的 [設定] 下方,選取 [健全狀況與修復]
  3. 啟用 [監視應用程式健全狀況] 選項。

如果您要使用應用程式健康情況延伸模組來監視擴展集:

  1. 從 [應用程式健康情況監視器] 下拉式清單中選擇 [應用程式健康情況延伸模組]

  2. 從 [通訊協定] 下拉式清單中,選擇應用程式用來報告健康情況的網路通訊協定。 根據您的應用程式需求選取適當的通訊協定。 通訊協定選項為 [HTTP、HTTPS] 或 [TCP]

  3. 在 [連接埠號碼] 組態方塊中,輸入用來監視應用程式健康情況的網路連接埠。

  4. 針對 [路徑],提供用來報告應用程式健康情況的應用程式端點路徑(例如 “/”)。

    注意

    應用程式健康情況延伸模組會在擴展集中的每個虛擬機器內 Ping 此路徑,以取得每個執行個體的應用程式健全狀態。 如果您使用二進位健全狀態,且端點回應狀態為 200 (確定),則執行個體會標示為「狀況良好」。 在其他所有情況下 (包括無法觸達端點),就會將執行個體標示為「狀況不良」。 如需更多健全狀態選項,請瀏覽豐富健全狀態

如果您要使用 SLB 健全狀態探查來監視擴展集:

  • 從 [應用程式健康情況監視器] 下拉式清單中選擇 [負載平衡器探查]。- 針對負載平衡器健全狀態探查,請選取現有的健全狀態探查,或建立新的健全狀態探查以進行監視。

若要啟用自動修復:

  1. 找出 [自動修復原則] 區段。
  2. 將 [自動修復] 選項設定為 [開啟]
  3. 在 [寬限期 (分鐘)] 中,以分鐘為單位指定寬限期。 允許的值介於 10 到 90 分鐘之間。
  4. 完成時,選取儲存

在自動修復原則上設定修復動作

automaticRepairsPolicy 底下的 repairAction 設定可讓您指定為了回應狀況不良執行個體而執行的所需修復動作。 如果您要在現有的自動修復原則上更新修復動作,則必須先停用擴展集上的自動修復,並使用更新的修復動作來重新啟用。 下列範例說明此程序。

此範例示範如何使用現有的自動修復原則來更新擴展集上的修復動作。 請使用 API 2021-11-01 版或更高版本。

停用擴展集上現有的自動修復原則

PUT or PATCH on '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}?api-version=2021-11-01'
{
  "properties": {
    "automaticRepairsPolicy": {
            "enabled": "false"
        }
    }
}

使用所需的修復動作重新啟用自動修復原則

PUT or PATCH on '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}?api-version=2021-11-01'
{
  "properties": {
    "automaticRepairsPolicy": {
            "enabled": "true",
            "gracePeriod": "PT40M",
            "repairAction": "Reimage"
        }
    }
}

檢視和更新自動執行個體修復原則的服務狀態

針對虛擬機器擴展集使用具有 API 2019-12-01 版或更新版本的取得執行個體檢視,以在 orchestrationServices 屬性下方檢視適用於自動修復的 serviceState

GET '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/instanceView?api-version=2019-12-01'
{
  "orchestrationServices": [
    {
      "serviceName": "AutomaticRepairs",
      "serviceState": "Running"
    }
  ]
}

使用 [設定協調流程服務狀態] 來暫停或繼續 serviceState 進行自動修復。

POST '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/instanceView?api-version=2023-07-01'

{
  "serviceName": "AutomaticRepairs",
  "action": "Suspend"
}

疑難排解

無法啟用自動修復原則

如果您收到 'BadRequest' 錯誤,且訊息指出「在 'properties' 類型的物件上找不到成員 'automaticRepairsPolicy'」,則請檢查用於虛擬機器擴展集的 API 版本。 此功能需要 API 2018-10-01 版或更新版本。

即使已啟用原則,仍無法修復執行個體

該執行個體可能在寬限期內。 此期間是在執行修復之前,在執行個體上任何狀態變更之後等候的時間長度,這有助於避免任何過早或意外的修復。 在完成執行個體的寬限期之後,應會發生修復動作。

檢視擴展集執行個體的應用程式健全狀態

您可以針對虛擬機器擴展集中的執行個體,使用取得執行個體檢視 API 來檢視應用程式健全狀態。 透過 Azure PowerShell,您可以使用 Get-AzVmssVM Cmdlet 搭配 -InstanceView 旗標。 您可以在 vmHealth 屬性下方找到應用程式健全狀態。

您也可以在 Azure 入口網站中查看健全狀態。 移至現有的擴展集,從左側功能表選取 [執行個體],然後查看每個擴展集執行個體健全狀態的 [健全狀態] 資料行。

下一步

了解如何為擴展集設定應用程式健全狀況延伸模組負載平衡器健全狀態探查