我有一个网站,我们在几台机器上进行负载平衡。负载平衡器(一个 Brocade ServerIron ADX)在本地网络上。我知道它有能力配置一个“备份”IP地址作为“真实”使用,但它需要在本地网络上。当我的整个环境可能由于 FW、LB 或多服务器故障而离线时,我如何向我的用户提供“失败的鲸鱼”和状态更新消息?由于 DNS 无法提供加权 A 记录备份(如 SRV 记录),我有什么选择?
理想情况下,该解决方案应该能够在我的网站无法访问时自动介入,并通知我的用户我们的响应团队正在解决该问题。
我有一个网站,我们在几台机器上进行负载平衡。负载平衡器(一个 Brocade ServerIron ADX)在本地网络上。我知道它有能力配置一个“备份”IP地址作为“真实”使用,但它需要在本地网络上。当我的整个环境可能由于 FW、LB 或多服务器故障而离线时,我如何向我的用户提供“失败的鲸鱼”和状态更新消息?由于 DNS 无法提供加权 A 记录备份(如 SRV 记录),我有什么选择?
理想情况下,该解决方案应该能够在我的网站无法访问时自动介入,并通知我的用户我们的响应团队正在解决该问题。
Twitter 的 Fail Whale 比看起来更复杂。众所周知,Twitter 应用程序堆栈(Stacks——Twitter 基础设施中有很多层)非常复杂。Twitter 拥有数千台机器、用各种语言编写的价值多年的代码、十几种不同风格的胶水,以及数百个(如果不是数千个)应用程序可能会出错的地方。您的要求(两台服务器和一个故障页面)要简单得多。
我只是碰巧在看一个类似的功能——如果所有主要的网络服务器都失败了,我想使用一个备份网络服务器。请注意,这只会在某些故障情况下有所帮助,如果负载均衡器的公共网络出现问题,则无济于事。
ServerIron ADX 服务器负载平衡指南,第 2 章:“主服务器和备份服务器”部分说:
你让网页设计师制作一个看起来像你想要的文档。
然后配置负载平衡器以针对 HTTP 500、502、503 和 504 错误提供此文档。具体怎么做会有所不同;检查你的文档。
一些负载平衡器只是“哑巴”TCP 平衡器,它们转发 TCP 连接并且在第 7 层什么也不做。其他人可以充当完全反向代理(例如 nginx)并且这些能够做你需要的事情。
从Brocade ServerIron ADX 文档的快速扫描来看,它似乎无法在 HTTP 请求上提供错误文档。虽然它肯定比典型的“哑巴”TCP 转发器更聪明,但它可能不会在这里执行您想要的操作。
像 nginx 这样的反向代理可以做到这一点,但如果你设置了它,你也可以只替换负载平衡器(因为 nginx 也可以做 HTTP/HTTPS 负载平衡)。
Twitter 的“失败鲸鱼”并不代表任何这些灾难性的失败,而且它们的创建绝非易事。我能想到的最好的办法是为你的域设置一个低 DNS TTL,一个额外的互联网连接和单独的 IP 空间,只为失败的鲸鱼服务,以及某种在失败时更新你的 A 记录的监控工具。
现在,除非您计划非常频繁地发生灾难性故障,否则这就太过分了。而且,如果您确实打算经常使用它们,那么您可能做错了:)
CloudFront 或 Akamai 等 CDN 可以用失败鲸鱼代替错误响应,或者您可以在本地部署一个轻量级代理层来做同样的事情。如果您的网络连接中断,本地解决方案将无济于事,只有 CDN 或远程托管的 DNS 服务器+healthchecker 可以处理。