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