如何在每个EC2实例上运行多个应用程序来设置ELB运行状况检查?


11

在AWS,我们希望使用ELB对承载多个应用程序的EC2实例进行负载平衡。理想情况下,我们希望对应用程序进行健康检查。

但是,AWS Elastic Load Balancer当前仅允许您ping一个位置以进行运行状况检查。

考虑到每个EC2实例上部署的多个应用程序的状态,用ELB实施运行状况检查的最佳方法是什么?


4
一种方法是通过使脚本基于对两个应用程序的检查返回状态来实施自己的健康检查。
弥敦道

1
ELB是一项托管服务。使用自己的运行状况检查为第二个应用程序创建另一个ELB。大多数成本是每个请求的成本,因此操作2个ELB的成本几乎相同。
2014年

我认为@NathanC的答案是最好的解决方案。我有类似的情况,如果两个条件中的任何一个失败,则运行状况检查将失败。添加另一个ELB可以让您进行另一次健康检查,但是AFAIK仅一个ELB可以用于路由流量(或不可以)
Tom Harrison Jr

@Guy实际上,考虑到ELB小时的收费是与请求无关的,每月约20美元(取决于地区),因此,大部分费用仅在您每个月已经提供超过2.5 TB的数据时才按请求进行(售价为$ 0.008 / GB)
Josip Rodin's

Answers:


10

解决此问题的方法有两种:

第一种选择是在主机上添加另一个运行状况检查,以验证运行状况,如果逻辑表明您希望使主机保持在线状态,则将HTTP 200s返回到ELB。当然,逻辑取决于您。此处的缺点是,如果App 2在某些主机上成功部署,所有主机仍将保持“健康”状态并接收流量。

另一种选择是为每个应用程序使用一个附加的ELB。您可以将多个ELB指向相同的后端EC2实例,这样做的代价很小。这样,您可以对每个应用程序进行运行状况检查,并在每个应用程序级别(而不是全有或全无)的方式删除出现问题的主机。

编辑:请注意,这是一个较早的答案,并且特定于ELB而非ALB。ALB本机在一个主机上支持单独的目标。


7

每个应用程序使用一个ELB就是这里的方法。

首先,如果每个应用程序都在其自己的域上并且需要支持SSL,则无论如何都可能需要它们。Amazon ELB当前仅允许每个域使用一个SSL证书,而每个启用SSL的域都需要单独的ELB。(通配符SSL认证是一个例外)。

这里的挑战是,当前无法将ELB运行状况检查定向到EC2实例上托管的特定虚拟域。(不发送“主机:”头)。ELB运行状况ping总是进入默认域,就像您已在浏览器中加载EC2实例的IP地址一样。因此,需要一些胶水来接收默认域上的运行状况检查,然后回复特定应用程序的运行状况。

这是一个可以添加到Nginx server指令中的工作示例配置。它将被安装在每个负载均衡的EC2实例上。

    # This goes in the `server` block noted by 'default_server', often /etc/nginx/sites-enabled/default

    # All AWS Health Checks from the ELBs arrive at the default server.
    # Forward these requests on the appropriate configuration on this host.
    location /health-check/ {
      rewrite ^/health-check/(?<domain>[a-zA-Z0-9\.]+) /api/v1/status break;
      # Lie about incoming protocol, to avoid the backend issuing a 301 redirect from insecure->secure,
      #  which would not be considered successful.
      proxy_set_header X-Forwarded-Proto 'https';
      proxy_set_header "Host" $domain;
      proxy_pass http://127.0.0.1;
    }

在ELB的“ first-application.com”的“运行状况检查”设置中,选择“ HTTP”和端口80,然后输入如下路径:

/health-check/first-application.com

在主机上运行上述Nginx配置后,该请求将在默认域上接收,并将来自同一主机上Nginx配置的响应代理到https://first-application.com/api/v1/status

使用这种方法,Nginx中没有按应用程序配置。只要每个应用程序都有唯一的域名,您只需确保为每个应用程序正确设置了ELB。


3
谢谢。这似乎可以解决问题。我希望避免与此相关的多个负载平衡。
巡回演出

6

2016年8月11日,亚马逊推出了应用程序负载平衡器。这些使您可以指定多个目标组,每个目标组都有自己的健康检查类型。因此,现在可以使用单个负载均衡器!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.