【问题标题】:AWS load balancer and maintenance pageAWS 负载均衡器和维护页面
【发布时间】:2015-11-27 08:53:21
【问题描述】:

我正在使用带有 3 个 EC2 服务器的 AWS 负载均衡器,并且我正在尝试在站点进行维护时提供维护页面。

此页面需要返回 503 HTTP 代码,因为它是维护模式的正确代码,并且可以防止 SEO 可能出现的问题。

当我从任何服务器返回 503 代码时,负载均衡器将其设为“未服务”,当所有服务器返回 503 时,网站返回空白页面(因为所有服务器都已断开连接)。

我的问题是:

1) 如果没有健康的服务器,是否有任何方法可以为来自负载均衡器的访问者提供带有消息的自定义静态页面?

2)或者如何配置负载均衡器的健康检查,它不会将503作为将服务器标记为“不健康”的原因?

谢谢!

【问题讨论】:

  • @BMW 我认为这是一个很好的答案,但对于另一个问题(您如何提供失败的鲸鱼页面)。它似乎不符合此处对 503 响应的要求,并且据称会导致 SEO 问题。
  • 我无法使用其他 DNS 服务,我已经使用了我的 CDN 中的那个。
  • Rackspace 允许您在成员服务器停止运行时显示您选择的 HTML 页面。如果 AWS 不能做到这一点,那就是一个很大的失败

标签: amazon-web-services amazon-ec2 load-balancing maintenance-mode


【解决方案1】:

我一直在寻找一种快速的方法来做到这一点。我们需要在数据库升级期间向世界返回一个 503 错误,但将一些开发者的 IP 列入白名单,以便他们可以在开放备份之前对其进行测试。

找到了一个单一的解决方案:: 转到 EC2 中的 Loader Balancer 并选择您要定位的负载均衡器。在下面,您应该看到 Listeners。单击侦听器,然后编辑规则。创建这样的规则:

现在每个人都会得到一个漂亮的维护页面,返回一个 503 错误代码,并且第一条规则中只有两个 IP 地址可以浏览到该站点。顺序很重要,两个 IP 例外在顶部,然后在列表中。默认情况下,最后一项始终存在。

应用程序负载均衡器的侦听器规则: https://docs.aws.amazon.com/elasticloadbalancing/latest/application/listener-update-rules.html

【讨论】:

  • 对我来说这比从 EC2 处理要好。我希望解放双手来进行任何类型的升级,包括 DB/EC2 等。感谢分享。 ??
  • 这是一个很好的解决方案。但它不会刷新浏览器中的页面。它卡在最后一页,仅向控制台生成 503 作为服务器的响应。它仅在您刷新页面时才有效:(
【解决方案2】:

你可以在你的应用服务器中实现一个额外的路由,比如 /hcm(用于健康检查维护),它总是响应 200 OK。当需要维护时,您可以通过编程方式修改 ELB 运行状况检查以使用返回 200 OK 的 /hcm 目标,而不是返回 503 Service Unavailable 的 / 或 /index.html。退出维护时恢复这些更改。

【讨论】:

  • 另一个选项是让健康检查使用 TCP 而不是 HTTP。这比自定义特殊路由更容易,这意味着负载均衡器会认为实例可用,只要它可以连接到正确的端口。可能不适用于所有情况,但对于我来说只有两台固定服务器是完美的。
  • 我无法使用 TCP 进行健康检查,我只能使用 HTTP 和 HTTPS。
【解决方案3】:

可能无法满足您的 503 要求,但一个不错的选择是使用 s3 和 dns 故障转移:https://aws.amazon.com/blogs/aws/create-a-backup-website-using-route-53-dns-failover-and-s3-website-hosting/

【讨论】:

  • 我不能使用 Route 53,我必须使用不同的 DNS 服务
【解决方案4】:

当您后面不再有任何健康的服务器时,负载均衡器将为您提供503,因此您不应该做任何特别的事情。

如果您在运行状况检查中返回 200 以外的任何内容,ELB 将在机器未通过配置的运行状况检查次数后将其从负载均衡器中取出。

回顾一下,您可以在维护期间从您的应用程序中提供503,但您必须始终返回200 以进行健康检查。如果您不关心页面的内容,您可以简单地将机器从负载均衡器中移除(或未通过健康检查),LB 会为您做正确的事情。

【讨论】:

  • LB 返回带有 503 代码的空白页面,但我需要在维护模式期间向访问者显示自定义消息。如何配置LB返回?
猜你喜欢
  • 2010-10-30
  • 2020-08-19
  • 2014-12-18
  • 2018-04-14
  • 2017-07-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-07
相关资源
最近更新 更多