本文說明代管執行個體群組 (MIG) 如何修復群組中失敗和不正常的 VM,確保應用程式的高可用性。
代管執行個體群組會主動維持群組中運作中的 VM 數量,確保應用程式正常運作且可用。如果群組中的 VM 停止運作,MIG 會以以下方式重新建立 VM,藉此修復 VM,讓 VM 恢復運作:
- 自動修復故障的 VM:如果 VM 故障或因 MIG 未啟動的動作而遭刪除,MIG 會自動修復故障的 VM。請參閱本文的「自動修復失敗的 VM」。
- 根據應用程式健康狀態檢查修復 VM:您可以選擇修復健康狀態不良的 VM,進一步提升高可用性。如果您設定以應用程式為準的健康狀態檢查,且應用程式未通過健康狀態檢查,MIG 就會將該 VM 標示為健康狀態不良並進行修復。根據應用程式健康狀態檢查結果修復 VM 也稱為自動修復。請參閱本文的「根據應用程式健康狀態檢查結果修復 VM」一節。
自動修復失敗的 VM
如果 MIG 中的 VM 發生故障,MIG 會自動重新建立該 VM,藉此修復故障的 VM。VM 失敗的原因可能如下:
- 硬體故障等非預期原因。
- 並非由 MIG 啟動的動作,例如:
- Spot VM 遭到搶占。
- VM 執行個體未設為即時遷移時的基礎架構維護事件。
- 使用 VM 執行個體控制台頁面、
instances
gcloud CLI 指令或instances
API 資源,直接在 VM 上執行的動作。舉例來說,使用instances.stop
方法或gcloud compute instances stop
指令停止群組中的 VM,會觸發修復作業。
如果 MIG 刻意停止 VM (例如自動配置器刪除 VM 時),MIG 就不會修復該 VM。
根據應用程式健康狀態檢查修復 VM
除了自動修復失敗的 VM 之外,如果 VM 上執行的應用程式停止運作、當機或記憶體耗盡,您可能也想修復 VM。如要確保應用程式回應正常,可以設定以應用程式為基礎的健康狀態檢查。
以應用程式為準的健康狀態檢查會定期驗證 MIG 中每個 VM 上的應用程式是否如預期回應。如果 VM 上的應用程式沒有回應,MIG 就會將該 VM 標為健康狀態不良。MIG 接著會修復健康狀態不良的 VM。根據應用程式健康狀態檢查結果修復 VM 的程序稱為自動修復。
為確保 MIG 持續執行部分 VM,群組絕不會同時自動修復所有 VM。舉例來說,如果健康狀態檢查不正確,導致系統觸發不必要的修復作業;防火牆規則設定有誤,導致健康狀態檢查無法探查 VM;或者存在網路連線或基礎架構問題,導致系統將健康狀態良好的 VM 誤判為健康狀態不良,這時您就可以使用這項功能。但是,如果區域 MIG 只有一個 VM,或地區 MIG 中的每個區域只有一個 VM,MIG 會在這些 VM 變為健康狀態不良時自動修復。
自動修復政策
每個 MIG 都有自動修復政策,您可以在其中設定健康狀態檢查,以及設定初始延遲時間。初始延遲時間是指新 VM 初始化並執行開機指令碼所需的時間。當 MIG 將 VM 的 currentAction
欄位變更為 VERIFYING
時,初始延遲計時器會啟動。在 VM 的初始延遲期間,MIG 會忽略未通過的健康狀態檢查,因為 VM 可能正在啟動。這樣可避免 MIG 過早重新建立 VM。如果健康狀態檢查在初始延遲期間收到健康狀態良好的回應,表示啟動程序已完成,且 VM 已準備就緒。
如要進一步瞭解如何設定自動修復政策,請參閱設定應用程式健康狀態檢查和自動修復。
監控應用程式健康狀態變化
如果您在 MIG 中設定了以應用程式為準的健康狀態檢查,可以檢查 MIG 中每個 VM 的健康狀態。詳情請參閱檢查 VM 是否正常運作。
您也可以監控 VM 健康狀態的變化。 詳情請參閱「監控健康狀態變化」。
定價
設定以應用程式為基礎的健康狀態檢查時,Compute Engine 預設會在代管執行個體的健康狀態變更時,寫入記錄項目。 Cloud Logging 每個月都會提供免費配額,超過配額後,系統會依據資料量計費。如要避免產生費用,可以停用健康狀態變更記錄。
維修期間的行為
以下各節說明自動修復和根據應用程式健康狀態檢查進行修復時的行為。
維修進度更新
根據預設,MIG 在修復期間會使用原本建立 VM 時的執行個體範本,重新建立 VM。舉例來說,如果 VM 是使用 instance-template-a
建立,然後您將 MIG 更新為在 OPPORTUNISTIC
模式下使用 instance-template-b
,則 MIG 仍會使用 instance-template-a
重新建立 VM。
如要讓 MIG 在修復 VM 時使用最新的執行個體範本和個別執行個體設定,可以將群組設定為在修復期間套用設定更新。
磁碟處理
在修復期間,根據範本重新建立 VM 時,MIG 會以不同的方式處理不同類型的磁碟。一些磁碟設定可能會導致修復作業在嘗試重新建立 VM 時失敗。
磁碟類型 | autodelete |
維修期間的行為 |
---|---|---|
新永久磁碟 | true |
系統會如執行個體範本所指定,重新建立磁碟。重新建立磁碟及其 VM 時,寫入該磁碟的任何資料都會遺失。 |
新永久磁碟 | false |
在 MIG 重新建立 VM 時,系統會保留並重新連結磁碟。 |
現有的永久磁碟 | true |
舊磁碟會遭到刪除。VM 重新建立作業會失敗,因為 Compute Engine 無法將刪除的磁碟重新連結到 VM。但是,針對現有讀寫磁碟,代管執行個體群組最多只能擁有一個 VM,因為在讀寫模式下,單一永久磁碟無法連結至多個 VM。 |
現有的永久磁碟 | false |
系統會如執行個體範本所指定,重新連結舊磁碟。磁碟中的資料會保留。但是,針對現有讀寫磁碟,代管執行個體群組最多只能擁有一個 VM,因為在讀寫模式下,單一永久磁碟無法連結至多個 VM。 |
新的本機 SSD | 不適用 | 系統會如執行個體範本所指定,重新建立磁碟。重新建立或刪除 VM 時,本機 SSD 中的資料會遺失。 |
如果磁碟未在執行個體範本或每個執行個體的設定中指定,MIG 就不會重新連結,例如建立 VM 後手動連結至 VM 的磁碟。
如要保留寫入磁碟的重要資料,請採取預防措施,例如:
如果 VM 有您要保留的重要設定,Google 也建議您在執行個體範本中使用自訂映像檔。自訂映像檔包含您需要的任何自訂設定。當您在執行個體範本中指定自訂映像檔時,MIG 會使用自訂映像檔 (其中含有您所需要的自訂設定項目) 來重新建立 VM。
關閉修復功能
您可以關閉 MIG 自動執行的修復作業。在 MIG 中關閉修復功能後,系統會停用失敗 VM 的修復作業,以及根據應用程式健康狀態檢查進行的修復作業。您也可以單獨關閉根據應用程式健康狀態檢查進行的修復作業。
在下列情況中,您可能需要關閉 MIG 中的修復功能:
- 調查或偵錯失敗的 VM,避免自動修復作業中斷。
- 手動修復 VM 或實作自己的修復邏輯。
- 防止在批次工作進行期間重新建立 VM。
- 觀察應用程式健康狀態,但不修復健康狀態不良的 VM。
- 微調健康狀態檢查設定,避免意外觸發修復作業。
關閉修復功能後,如果群組中的 VM 故障或健康狀態不良,MIG 就不會採取任何動作。失敗和健康狀態不良的 VM 會繼續留在群組中,且 MIG 中執行的 VM 目標數量 (targetSize
) 維持不變。不過,如果您已為 VM 設定時間限制,當故障和不良健康狀態的 VM 達到時間限制時,MIG 就會自動刪除這些 VM,且 targetSize
會減少。
如果 MIG 的更新類型設為 proactive
,且有新的執行個體範本可用,MIG 就會使用新的範本重新建立失敗和不正常的 VM,藉此更新這些 VM。如不想更新失敗和不正常的 VM,請將更新類型設為 opportunistic
。
如果您已設定以應用程式為準的健康狀態檢查,關閉修復功能不會影響健康狀態檢查的運作。健康狀態檢查會持續探測應用程式,並提供 VM 健康狀態。這樣一來,您就能監控應用程式健康狀態,同時防止 MIG 修復健康狀態不良的 VM。
如果 MIG 是負載平衡器的後端服務之一,且您在 MIG 中關閉修復功能,則任何未修復的失敗和健康狀態不良 VM 都不會回應負載平衡器健康狀態檢查。如果 MIG 中這類失敗或健康狀態不良的 VM 數量增加,負載平衡器可能會減少導向該 MIG 的流量,或切換至另一個後端 (如有設定)。當失敗的 VM 再次可用時,負載平衡器會恢復將流量導向 MIG。
詳情請參閱「在 MIG 中關閉修復功能」。