And*_*anu 11 healthcheck amazon-web-services amazon-elb
在 AWS,我们希望使用 ELB 来对承载多个应用程序的 EC2 实例进行负载平衡。理想情况下,我们希望对应用程序进行健康检查。
但是,AWS Elastic Load Balancer 目前只允许您 ping 一个位置进行运行状况检查。
使用 ELB 实施健康检查的最佳方法是什么,以考虑部署在每个 EC2 实例上的多个应用程序的状态?
Nat*_*n V 10
这里有两种方法可以解决这个问题;
第一个选项是在主机上添加另一个运行状况检查,以验证运行状况并将 HTTP 200 返回到 ELB,如果逻辑表明您希望主机保持在线。当然,其中的逻辑取决于您。这里的缺点是,如果 App 2 在某些主机上成功部署,所有主机仍将“健康”并接收流量。
另一种选择是为每个应用程序使用一个额外的 ELB。您可以将多个 ELB 指向同一个后端 EC2 实例,这样做的成本非常低。通过这种方式,您可以检查每个应用程序的健康状况,并在每个应用程序级别删除存在问题的主机,而不是采用全有或全无的方法。
编辑:请注意这是一个较旧的答案,并且特定于 ELB 而不是 ALB。ALB 原生支持一台主机上的单独目标。
每个应用程序使用一个 ELB 是一种方法。
首先,如果每个应用程序都在其自己的域中并且您需要支持 SSL,则无论如何您都可能需要它们。Amazon ELB 目前只允许每个域使用一个 SSL 证书,因此每个启用 SSL 的域都需要单独的 ELB。(通配符 SSL 认证是一个例外)。
这里的挑战是 ELB 运行状况检查目前无法定向到托管在 EC2 实例上的特定虚拟域。(不发送“主机:”标头)。ELB 运行状况 ping 始终转到默认域,就像您已在浏览器中加载 EC2 实例的 IP 地址一样。所以需要一些胶水来接收默认域上的健康检查,然后回复特定应用程序的健康状态。
这是一个可以添加到 Nginxserver
指令的工作示例配置。它将安装在每个负载平衡的 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;
}
Run Code Online (Sandbox Code Playgroud)
在“first-application.com”的ELB的“健康检查”设置中,您将选择“HTTP”和端口80并输入如下路径:
/health-check/first-application.com
在主机上运行上述 Nginx 配置后,将在默认域上接收请求并代理来自同一主机上的 Nginx 配置的响应https://first-application.com/api/v1/status
使用这种方法,Nginx 中没有每个应用程序的配置。只要每个应用程序都有一个唯一的域名,您只需要确保为每个应用程序适当地设置一个 ELB。
归档时间: |
|
查看次数: |
11132 次 |
最近记录: |