负载均衡器

时间:2016-11-07 10:16:44

标签: ruby-on-rails ruby amazon-web-services amazon-ec2

我已启动并运行EC2实例。 我有一个负载均衡器,它与EC2实例相关联。

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

enter image description here 现在,实例显示为OutofService。 我甚至尝试改变监听端口和所有。事情一直在努力,直到重新启动我的EC2实例。 任何帮助都将受到高度赞赏。

仅供参考:我有在端口3001运行的rails应用程序,我有一个HTTP的监听器:80(loadbalancer)到HTTP:3001。

我还通过终端中的ssh检查了工作应用程序。

5 个答案:

答案 0 :(得分:2)

建议#1:

  

如果您的部分或全部实例的当前状态是OutOfService和   description字段显示Instance具有的消息   至少失败了健康检查的不健康阈值数   连续地,实例已经使负载均衡器健康失败   检查。

以下是要查找的问题,可能的原因以及您可以通过以下链接解决问题的步骤:Troubleshoot a Classic Load Balancer: Health Checks

建议#2:

chrisa_pm已针对此问题提出了一些建议:

  

如果您可以确认您的EC2实例可以访问,则可以删除   它来自您的Load Balancer并再次添加回来。负载均衡器   会在几分钟后认出来。

     

请记住,您需要确认您的健康状况   健康检查配置:

     
      
  1. 对于HTTP:80,您需要指定实际可访问的页面(如index.html)
  2.   
  3. 对于TCP:80,只需要访问80 TCP端口。
  4.   

建议#3:

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。这很有效。

     

我想它需要在为其创建的规则中允许ELB SG   个人实例的SG。希望有所帮助。

资源链接:

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

答案 1 :(得分:1)

您是否提供了健康检查端点并在EC2控制台中指定了它?类似的东西:

Health check snapshot

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

在rails应用中,创建一个类似的动作:

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

和路线:

get 'health_check/ping'

AWS负载均衡器将对其端点执行ping操作,如果响应时间200 OK足够{(1}},则会将实例视为&#34;健康&#34;。< / p>

答案 2 :(得分:1)

我发现您的ELB运行状况检查配置存在一些问题。现在,您已经配置了运行状况检查,以便在ELB发送请求之前每24秒检查一次实例10次。因此,需要

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

假设你的Unicorn开始更快&amp;运行后不会死亡,你应该减少内部和健康检查。健康的门槛

  • 将间隔减少到3-5秒。
  • 将健康阈值降低至2-5倍。

以上内容应该有助于ELB更快地使用“服务”实例。

这假设您的服务器配置已正确设置为从外部主机侦听/healthcheck端口3001。如果不是这样,请检查您的防火墙/安全组/服务器配置。

答案 3 :(得分:1)

  

问题是,在重新启动实例后,aws会分配 new ip   我没有注意到的EC2。

我正在通过ssh彻底登录到旧的ec2实例。 因此卷曲也从未失败过。

(我很好奇为什么这个IP地址仍然有效,而且我上次检查时它甚至在15天后仍然有效)

然而SkyWalker提供了很好的检查点(一般来说)。

最后我要做的事情:

使用新的ip,我的pem文件也搞砸了。因此创建了新的实例,新的pem文件,调整后的负载均衡器以指向此实例和安全组accorindgly。

PS:我不能再愚蠢了。

答案 4 :(得分:0)

确保应用服务器的安全组允许ELB安全组访问您在运行状况检查中指定的端口的运行状况检查端点。