1

我已經編寫了自定義發行腳本來管理EC2自動擴展應用程序的發行版。處理工作就像這樣...註銷ec2實例時ELB後端連接錯誤

  1. 創建基於應用程序git標籤的AMI。
  2. 創建啓動配置。
  3. 配置ASG使用新的啓動配置。
  4. 查找ASG的當前所需容量。
  5. 將所需容量設置爲2x之前的容量。
  6. 通過查詢ELB等待新實例健康。
  7. 將所需容量設置回以前的值。

這一切都運行得很好,除非我運行這個,ELB的監控顯示了很多後端連接錯誤。

我不知道這是爲什麼會發生,因爲它應該(根據我的理解)仍然服務當前連接,如果ELB(它是)啓用「連接排水」選項。

我想也許ASG在連接完成之前就終止了實例,所以我改變了我的腳本,首先從ELB註銷實例,然後等待一段時間,然後在ASG上更改所需的容量。然而這並沒有什麼區別。只要實例從ELB註銷(即使它們仍在運行且健康),後端連接錯誤也會發生。

看起來好像忽略了連接耗盡選項,並且只要實例已註銷就簡單地刪除連接。

這是我使用註銷實例命令

aws elb deregister-instances-from-load-balancer --load-balancer-name $elb_name --instances $old_instances 

有來自ASG刪除它們之前,優雅地除去從ELB實例一些優選的方法是什麼?

+0

您是否啓用了連接耗盡? – hellomichibye

+0

是的,我已啓用連接排空。實際上,我似乎對後端連接錯誤做出了錯誤的假設。這不是舊的實例,而是新的沒有準備好處理負載。 – user1751825

+1

下一個問題:您是否啓用了健康檢查? – hellomichibye

回答

2

進一步的調查表明,後端連接錯誤的發生是因爲當舊實例從ELB中刪除時,新實例還沒有準備好承擔全部負載。他們很健康,但似乎需要更多的變暖。

我正在調整運行狀況檢查設置,讓實例在開始嘗試提供請求之前多花點時間。我可能還需要更改apache2設置以使其更快準備就緒。

+2

在應用程序更新之外進行擴展的提示:在您的自動調節組中,有一個名爲[Health Check Grace Period]的設置(http://docs.aws.amazon.com/autoscaling/latest/userguide/healthcheck.html#health-檢查寬限期),其將基於新實例的ELB健康檢查處理任何縮放事件之前等待寬限期過去;無論您最終推遲自動化以適應新的實例升溫,考慮將健康檢查寬限期設置爲相同的值。 –