關於 Auto Scaling 群組的運作狀態檢查 - Amazon EC2 Auto Scaling

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

關於 Auto Scaling 群組的運作狀態檢查

本主題提供可用運作狀態檢查類型的概觀,並說明將 Amazon EC2 Auto Scaling 運作狀態檢查與您的應用程式整合的主要考量。

運作狀態檢查類型

Amazon EC2 Auto Scaling 可以使用下列一或多個運作狀態檢查來判斷InService執行個體的運作狀態:

運作狀態檢查類型 它檢查的服務項目

Amazon EC2 狀態檢查和排程事件

  • 檢查執行個體是否正在執行。

  • 檢查可能會損害執行個體的基礎硬體或軟體問題。

這是 Auto Scaling 群組的預設運作狀態檢查類型。

Elastic Load Balancing 運作狀態檢查

  • 檢查負載平衡器是否將執行個體報告為狀況良好,以確認執行個體是否可用於處理要求。

若要執行此健康狀態檢查類型,您必須為 Auto Scaling 群組開啟此類型。

VPC Lattice 運作狀態檢查

  • 檢查 VPC Landis 是否將執行個體報告為狀況良好,以確認執行個體是否可用於處理請求。

若要執行此健康狀態檢查類型,您必須為 Auto Scaling 群組開啟此類型。

自訂運作狀態檢查

  • 根據您的自訂運作狀態檢查,檢查是否有其他可能指出執行個體健康狀態問題的問題。

Amazon EC2 運作狀態檢查

在執行個體啟動後,該執行個體會連接至 Auto Scaling 群組,並進入 InService 狀態。如需 Auto Scaling 群組中執行個體不同生命週期的詳細資訊,請參閱 Amazon EC2 Auto Scaling 執行個體生命週期

Amazon EC2 Auto Scaling 會定期檢查 Auto Scaling 群組內所有執行個體的運作狀態,藉此確認執行個體是否正在執行且狀態良好。

狀態檢查

Amazon EC2 Auto Scaling 使用 Amazon EC2 執行個體狀態檢查和系統狀態檢查的結果來判斷執行個體的運作狀態。如果執行個體的狀態是 running 以外的任何 Amazon EC2 狀態,或是狀態檢查的狀態變為 impaired,則 Amazon EC2 Auto Scaling 會認定此執行個體運作狀態不佳,並將其取代。這包括執行個體具有下列任何狀態時:

  • stopping

  • stopped

  • shutting-down

  • terminated

Amazon EC2 狀態檢查不需要任何特殊組態,並且會永遠啟用。如需詳細資訊,請參閱 Amazon EC2 使用者指南的狀態檢查類型

重要

Amazon EC2 Auto Scaling 允許狀態檢查偶爾失敗,而不採取任何動作。狀態檢查失敗時,Amazon EC2 Auto Scaling 會等待幾分鐘 AWS 以修正此問題。當執行個體狀態檢查的狀態變為 impaired 時,其不會立即將執行個體標示為 Unhealthy

然而,如果 Amazon EC2 Auto Scaling 偵測到執行個體不再處於 running 狀態,但是,此情況可視為立即失敗。在這種情況下,它會立即將實例標記為Unhealthy並將其替換。

排程事件

Amazon EC2 偶爾可以將您執行個體上的事件安排在特定時間戳之後執行。如需詳細資訊,請參閱 Amazon EC2 使用者指南中的執行個體排定事件

若您其中一個執行個體受到排程事件影響,Amazon EC2 Auto Scaling 會認定此執行個體運作狀態不佳,並會進行取代。在達到時間戳記中指定的日期和時間之前,執行個體不會開始關閉。

Elastic Load Balancing 運作狀態檢查

當您為 Auto Scaling 群組開啟 Elastic Load Balancing 運作狀態檢查時,Amazon EC2 Auto Scaling 可以使用這些運作狀態檢查的結果來判斷執行個體的運作狀態。

在為 Auto Scaling 群組開啟 Elastic Load Balancing 運作狀態檢查之前,您必須先設定 Elastic Load Balancing 器,並為其設定健康狀態檢查,以判斷執行個體是否健全狀況。如需詳細資訊,請參閱 準備連接 Elastic Load Balancing 負載平衡器

將負載平衡器連接至 Auto Scaling 群組後,會發生下列情況:

  • Amazon EC2 Auto Scaling 會向負載平衡器註冊 Auto Scaling 群組中的執行個體。

  • 在執行個體完成註冊後,其會進入 InService 狀態,並可與負載平衡器搭配使用。

預設情況下,Amazon EC2 Auto Scaling 會忽略 Elastic Load Balancing 運作狀態檢查的結果。為 Auto Scaling 群組開啟這些運作狀態檢查後,當 Elastic Load Balancing 將已註冊的執行個體報告為時Unhealthy,Amazon EC2 Auto Scaling 會Unhealthy在下一次定期運作狀態檢查中標記該執行個體並加以取代。

如果為負載平衡器啟用連接耗盡 (取消註冊的延遲),Amazon EC2 Auto Scaling 會等待傳送中的請求完成或最長逾時過期 (兩者擇一),再終止運作狀態不佳的執行個體。

注意

如需如何為 Auto Scaling 群組連接負載平衡器並開啟 Elastic Load Balancing 健康狀態檢查的指示,請參閱將 Elastic Load Balancing 負載平衡器連接至您的 Auto Scaling 群組

當您為群組開啟 Elastic Load Balancing 運作狀態檢查時,Amazon EC2 Auto Scaling 可以取代 Elastic Load Balancing 報告為運作狀態不良的執行個體,但只有在負載平衡器處於InService狀態之後。如需詳細資訊,請參閱 確認負載平衡器的連接狀態

VPC Lattice 運作狀態檢查

預設情況下,Amazon EC2 Auto Scaling 會忽略 VPC Lattice 運作狀態檢查的結果。您可以選擇性地為 Auto Scaling 群組開啟這些健康狀態檢查。之後,當 VPC Lattice 將註冊的執行個體報告為 Unhealthy,Amazon EC2 Auto Scaling 會在下次定期執行運作狀態檢查時將執行個體標示為 Unhealthy 並將其取代。註冊執行個體然後檢查其健康狀態的程序,與 Elastic Load Balancing 運作狀態檢查的程序相同。

注意

如需如何連接 VPC 萊迪思目標群組,並為 Auto Scaling 群組開啟 VPC 萊迪思健康狀態檢查的說明,請參閱。將 VPC Lattice 目標群組連接到 Auto Scaling 群組

當您為群組開啟 VPC 萊迪思運作狀態檢查時,Amazon EC2 Auto Scaling 可以取代 VPC Latds 報告為運作狀態不良的執行個體,但只有在目標群組處於狀態之後。InService如需詳細資訊,請參閱 確認 VPC Lattice 目標群組的連接狀態

Amazon EC2 Auto Scaling 如何將停機時間降至最低

根據預設,新執行個體會在終止現有執行個體的同時佈建,這可能會防止接受新的要求,直到新執行個體完全運作為止。

如果 Amazon EC2 Auto Scaling 判斷任何執行個體不再執行 (或已標示設定執行個Unhealthy體運作狀態命令),則會立即取代它們。但是,如果發現其他執行個體運作狀態不佳,Amazon EC2 Auto Scaling 會使用下列方法來從失敗中復原。此方法最大限度地減少因臨時問題或設定錯誤的運作狀態檢查而可能導致的停機時間。

  • 如果擴展活動正在進行中,而您的 Auto Scaling 群組少於其所需容量 10% 或更多,Amazon EC2 Auto Scaling 會等待進行中的擴展活動,然後再更換運作狀態不良的執行個體。

  • 在橫向擴展時,Amazon EC2 Auto Scaling 會等待執行個體通過初始運作狀態檢查。它還會等待預設執行個體完成暖機,以確保新的執行個體準備就緒。

  • 在執行個體完成預熱後,群組已升至其所需容量的 90% 以上之後,Amazon EC2 Auto Scaling 會取代運作狀態不良的執行個體,如下所示:

    • Amazon EC2 Auto Scaling 最高一次僅取代該群組所需容量的 10%。它會執行此操作,直到所有運作狀態不佳的執行個體完成替換。

    • 取代執行個體時,它會等待新執行個體傳遞初始運作狀態檢查。它還會等待預設執行個體完成暖機,然後再繼續作業。

注意

如果自動擴展群組的大小足夠小,產生的 10% 值小於 1,Amazon EC2 Auto Scaling 會改為一次取代運作狀態不良的執行個體。這可能會導致群組產生一些停機時間。

此外,如果 Auto Scaling 群組中的所有執行個體都由 Elastic Load Balancing 運作狀態檢查報告為運作狀態不佳,且負載均衡器處於 InService 狀態,Amazon EC2 Auto Scaling 可能會一次把較少的執行個體標示為運作狀態不佳。這可能導致一次替換的執行個體比在其他案例中套用的 10% 少得多。如此可讓您有時間修正問題,而不需要 Amazon EC2 Auto Scaling 就會自動終止整個群組。

暖池中執行個體的 Health 狀態檢查

Amazon EC2 Auto Scaling 也會對溫暖集區中的執行個體執行運作狀態檢查。如需詳細資訊,請參閱 檢視運作狀態檢查狀態和運作狀態檢查失敗的原因

運作狀態檢查注意事項

以下是使用 Amazon EC2 Auto Scaling 運作狀態檢查時的考量事項。

  • 如果您需要對正在終止的執行個體或正在啟動的執行個體做些什麼,可以使用 lifecycle hook。使用這些掛鉤,您可以執行自訂動作,如 Amazon EC2 Auto Scaling 啟動或終止執行個體。如需詳細資訊,請參閱 Amazon EC2 Auto Scaling lifecycle hook

  • Amazon EC2 Auto Scaling 不提供從運作狀態檢查中移除 Amazon EC2 狀態檢查和排程事件的方法。如果不想要取代執行個體,建議您暫停任何個別 Auto Scaling 群組的 ReplaceUnhealthyHealthCheck 程序。如需詳細資訊,請參閱 暫停和恢復 Amazon EC2 Auto Scaling 程序

  • 若要手動將運作不佳的執行個體的運作狀態設回 Healthy,您可以試著使用 set-instance-health 命令。如果您看見錯誤,這可能是因為執行個體已終止。通常,使用 set-instance-health 命令將執行個體的運作狀態設回 Healthy 的作法,只適用於 ReplaceUnhealthy 程序或 Terminate 程序已暫停處理的情況。

  • 如果您需要在不受健康狀態檢查干擾的情況下對執行個體進行疑難排解,可以將例證置於Standby狀態。Amazon EC2 Auto Scaling 不會對處於該狀態的執行個體執行運作Standby狀態檢查,直到您將執行個體重新啟用為止。如需詳細資訊,請參閱 從 Auto Scaling 群組暫時移除執行個體

  • 當您的執行個體終止後,所有與彈性 IP 地址相關聯的設定,都會解除,且不會自動關聯到新的執行個體。您必須手動將這些彈性 IP 地址關聯到新的執行個體,或使用 lifecycle hook 型解決方案自動進行。如需詳細資訊,請參閱《Amazon EC2 使用者指南》中的彈性 IP 地址

  • 同樣地,當您的執行個體終止後,其連接的 EBS 磁碟區會分開 (或刪除,具體取決於磁碟區的 DeleteOnTermination 屬性)。您必須手動將這些 EBS 磁碟區連接到新的執行個體,或使用 lifecycle hook 型解決方案自動進行。如需詳細資訊,請參閱 Amazon EBS 使用者指南中的將 Amazon EBS 磁碟區連接至執行個體

自訂運作狀態檢查

您可以選擇在 Auto Scaling 群組中的執行個體上執行自訂運作狀態偵測任務,並在任務失敗時將執行個體的運作狀態設定為 Unhealthy。如此可透過自訂運作狀態檢查、Amazon EC2 狀態檢查和 Elastic Load Balancing 運作狀態檢查 (若已啟用) 的組合來延伸您的運作狀態檢查。

您可以使用 AWS CLI 或開發套件,將執行個體的運作狀態資訊直接傳送到 Amazon EC2 Auto Scaling。下列範例說明如何使用設 AWS CLI 定執行個體的健全狀態,然後驗證執行個體的健全狀態。

使用以下 set-instance-health 命令將指定的執行個體的運作狀態設定為 Unhealthy

aws autoscaling set-instance-health --instance-id i-1234567890abcdef0 --health-status Unhealthy

根據預設,此指令遵循運作狀態檢查寬限期。但是,您可以覆寫這個行為,藉由納入 --no-should-respect-grace-period 選項而不遵守寬限期。

使用以下 describe-auto-scaling-groups 命令驗證該執行個體的運作狀態為 Unhealthy

aws autoscaling describe-auto-scaling-groups --auto-scaling-group-names my-asg

以下是範例的回應,其顯示執行個體的運作狀態為 Unhealthy 且執行個體正在終止。

{ "AutoScalingGroups": [ { .... "Instances": [ { "ProtectedFromScaleIn": false, "AvailabilityZone": "us-west-2a", "LaunchTemplate": { "LaunchTemplateName": "my-launch-template", "Version": "1", "LaunchTemplateId": "lt-1234567890abcdef0" }, "InstanceId": "i-1234567890abcdef0", "InstanceType": "t2.micro", "HealthStatus": "Unhealthy", "LifecycleState": "Terminating" }, ... ] } ] }