我試圖讓AutoScalingRollingUpdate
在我的自動縮放組的工作,通過將在線新實例,然後只有一次的新實例(一個或多個)正在接受交通,終止舊的實例。看起來像AutoScalingRollingUpdate是爲此目的而設計的。AWS AutoScalingGroup HealthCheckType「ELB」認爲實例「在職」過早
我將AutoScalingGroup的HealthCheckType設置爲'ELB'。我也對ELB集健康檢查要求:
- 3成功的請求/爲「健康」
- 10個不成功的請求/爲「不健康」
- 沒有寬限期(零,0)
現在,從ELB的角度來看,當新實例上線時,它們不是幾分鐘的InService,這正是我所期望的。但是,從AutoScalingGroup的角度來看,它們幾乎立即被視爲InService,因此,我的AutoScalingGroup在新實例準備好接收流量之前將正常運行的實例退出服務。我很困惑,爲什麼ASG在ELB之前認爲這些實例是健康的,當時HealthCheckType被明確設置爲'ELB'。
我試過設置一個寬限期,但這並沒有改變任何東西。事實上,我刪除了300秒的寬限期,因爲我認爲在寬限期內實例可能隱式地爲「InService」或其他內容。
我知道我可以設置滾動更新政策PauseTime,但那是脆弱的,因爲有時故障發生時的實例聯機,他們得到核爆,取而代之,他們曾經完成部署之前,所以有時,在PauseTime窗口可能會超出。另外,我想盡量減少我的應用程序同時運行兩個不同版本的時間。
... ELB stuff ...
"HealthCheck": {
"HealthyThreshold": "3",
"UnhealthyThreshold": "10",
"Interval": "30",
"Timeout": "15",
"Target": {
"Fn::Join": [
"",
[
{"Fn::Join": [":", ["HTTP", {"Ref": "hostPort"}]]},
{"Ref": "healthCheckPath"}
]
]
}
},
... ASG Stuff ...
{
... snip ...
"HealthCheckType": "ELB",
"HealthCheckGracePeriod": "0",
"Cooldown": "300"
},
"UpdatePolicy" : {
"AutoScalingRollingUpdate" : {
"MinInstancesInService" : "1",
"MaxBatchSize" : "1"
}
}
評論你的代碼,我認爲這個問題是不是在ASG'AutoScalingGroup'設置,它是在你ELB setting.'「HealthCheckGracePeriod」:「0」,'讓我奇怪的感覺,你可以改變' 300'。之後,ELB將負責處理可用性,而不是ASG。 ASG將根據ELB狀態進行升級和降級。 – BMW 2014-11-28 07:23:04
即使在寬限期內,ASG在ELB執行之前也會考慮實例InService。這看起來像是CloudFormation中的一個bug。爲了解決這個問題,我實際上把時間設置爲零。 – d11wtq 2014-12-01 01:13:34
您確定Load Balancer報告實例是「不健康的」嗎?你在哪裏看到這個狀態?有時控制檯不會立即更新。 AWS CLI是否給予您相同的狀態?您的應用在啓動時的HTTP狀態碼是什麼?它返回HTTP 200好嗎?您可以使用'curl -I ...'來檢查此問題。 – 2014-12-08 15:56:19