簡體   English   中英

EC2實例在loadbalancer中無法使用

[英]EC2 instance is out of service in loadbalancer

我有一個EC2實例正在運行。 我有一個負載均衡器,它與EC2實例相關聯。

Ping Target         : HTTP:3001/healthCheck
Timeout             : 5 seconds
Interval            : 24 seconds
Unhealthy threshold : 2
Healthy threshold   : 10

在此輸入圖像描述 現在,實例顯示為OutofService。 我甚至嘗試改變監聽端口和所有。 事情一直在努力,直到重新啟動我的EC2實例。 任何幫助將非常感激。

僅供參考:我有在端口3001運行的rails應用程序,我有一個HTTP的監聽器:80(loadbalancer)到HTTP:3001。

我也通過終端中的ssh檢查了工作應用程序。

建議1:

如果您的部分或全部實例的當前狀態為OutOfService,並且說明字段顯示實例至少連續運行不健康閾值運行狀況檢查失敗的消息,則實例的負載均衡器運行狀況檢查失敗。

以下是要查找的問題,可能的原因以及通過以下鏈接解決問題可采取的步驟: 對經典負載均衡器進行故障排除:運行狀況檢查

建議2:

chrisa_pm對此問題提出了一些建議:

如果您可以確認您的EC2實例是可訪問的,則可以將其從Load Balancer中刪除並再次添加。 盡管如此,Load Balancer會在幾分鍾后識別它。

請記住,您需要確認健康檢查配置中設置的健康狀況:

  1. 對於HTTP:80,您需要指定實際可訪問的頁面(如index.html)
  2. 對於TCP:80,只需要訪問80 TCP端口。

建議三:

qh2通過以下方式解決問題

在啟動時創建服務以取消注冊並再次注冊您的實例。

示例:文件awsloadbalancer

#!/bin/sh
chkconfig: 2345 95 20

當意圖停止時,錯過了負載平衡器。 這個重建負載均衡器

case "$1" in
start)
aws --region eu-west-1 elb deregister-instances-from-load-balancer --load-balancer-name test --instances i-3c339b7c
aws --region eu-west-1 elb register-instances-with-load-balancer --load-balancer-name test --instances i-3c339b7c
;;
stop)
echo "stopping aws instances"
;;
restart)
echo "Restarting aws, nothing to do"
;;
*)
echo "Usage: $0 {start|stop|restart}"
exit 1
;;
esac

之后在/etc/init.d/創建文件,注冊為服務。

建議4:

Kenneth Snyder還針對特定的ELB問題解決了這個問題。

我也有類似的問題,但我能夠解決這個問題。

我為ELB創建了一個安全組,它接受端口80上的請求並轉發到端口80上的EC2。之前為EC2創建的安全組還具有端口80和RDP的入站規則。

實際情況仍然顯示為ELB下的OutOfService。 后來我試圖在EC2的安全組中添加另一個入站規則,以允許為ELB創建的SG的端口80。 那很有效。

我想它需要在為單個實例的SG創建的規則中允許ELB SG。 希望有所幫助。

資源鏈接:

https://forums.aws.amazon.com/thread.jspa?messageID=733153

您是否提供了健康檢查端點並在EC2控制台中指定了它? 就像是:

健康檢查快照

請注意端口80和有效路由。 您可能沒有在nginx / apache配置中設置端口3001

在rails應用程序中,創建一個這樣的動作:

class HealthCheckController < ActionController::Base
  def ping
    head :ok
  end
end

和路線:

get 'health_check/ping'

AWS負載均衡器將ping他的端點,如果響應足夠200 OK次(根據Healthy threshold ,它會將實例視為“健康”)。

我看到你的ELB健康檢查配置存在一些問題。 現在,您已經配置了運行狀況檢查,以便在ELB發送請求之前每24秒檢查一次實例10次。 因此,它需要

24seconds x 10 = 240secs # 4mins after reboot

假設您的Unicorn啟動速度更快並且在運行后不會死亡,您應該減少健康檢查內部和健康閾值。

  • 將間隔減少到3-5秒。
  • 將健康閾值降低至2-5倍。

以上內容應該有助於ELB更快地使用“服務”實例。

這假設您的服務器配置已正確設置為從外部主機偵聽/healthcheck端口3001 如果不是這樣,請檢查您的防火牆/安全組/服務器配置。

問題是,在重新啟動實例后,aws將新ip分配給EC2,我沒有注意到。

我正在使用徹底的ssh到舊的ec2實例。 因此卷曲也從未失敗過。

(我很好奇為什么這個IP地址仍然有效,當我上次檢查時它甚至在15天后仍然有效)

然而, SkyWalker提供了很好的檢查點(一般而言)。

最后,我不得不:

有了新的ip,我的pem文件也搞砸了。 因此創建了新實例,新的pem文件,調整后的負載均衡器指向此實例和安全組accorindgly。

PS:我不能再愚蠢了。

確保appserver的安全組允許ELB安全組訪問您在運行狀況檢查中指定的端口的運行狀況檢查端點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM