本文說明代管執行個體群組 (MIG) 如何透過修復群組中失敗和不健康的 VM,確保應用程式提供高可用性。
MIG 會主動維持群組中執行中的 VM 數量,以便讓應用程式保持可用。如果群組中的 VM 停止運作,MIG 會修復 VM,方法是透過以下方式重新建立 VM,讓 VM 恢復服務:
- 自動修復失敗的 VM:如果 VM 發生故障,或遭到 MIG 以外的動作刪除,MIG 就會自動修復失敗的 VM。請參閱本文件的「自動修復失敗的 VM」一節。
- 根據應用程式健康狀態檢查修復 VM:這是一種可選方式,可透過修復不健康的 VM 進一步提高高可用性。如果您設定以應用程式為準的健康狀態檢查,而應用程式未通過健康狀態檢查,則 MIG 會將該 VM 標示為不健康,並進行修復。根據應用程式健康狀態檢查修復 VM 的動作也稱為自動修復。請參閱本文件中的「根據應用程式健康狀態檢查修復 VM」一節。
自動修復失敗的 VM
如果 MIG 中的 VM 發生故障,MIG 會自動重新建立故障的 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 的範本重新建立 VM 時,MIG 會以不同的方式處理不同類型的磁碟。某些磁碟設定可能會導致嘗試重新建立 VM 時修復失敗。
磁碟類型 | autodelete |
維修期間的行為 |
---|---|---|
新永久磁碟 | true |
系統會如執行個體範本所指定,重新建立磁碟。重新建立磁碟及其 VM 時,寫入該磁碟的任何資料都會遺失。 |
新永久磁碟 | false |
在 MIG 重新建立 VM 時,系統會保留並重新連結磁碟。 |
現有的永久磁碟 | true |
舊磁碟會遭到刪除。VM 重新建立作業失敗,因為 Compute Engine 無法將刪除的磁碟重新連結至 VM。不過,針對現有讀寫磁碟,MIG 最多只能擁有一個 VM,因為單一永久磁碟無法在讀寫模式下連結至多個 VM。 |
現有的永久磁碟 | false |
系統會如執行個體範本所指定,重新連結舊磁碟。磁碟中的資料會保留。不過,針對現有讀寫磁碟,MIG 最多只能擁有一個 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 中關閉修復功能」。