我正在构建一个需要高可用性的应用程序。我们目前运行:4 个 Web 服务器、2 个 Varnish 服务器(均使用 Pound 进行 SSL 代理)、3 个 Cassandra 节点。
varnish 服务器是系统的入口点。我们希望配置一切,使 Varnish A 始终正常工作,直到发生故障,然后 Varnish B 应接收请求并将其分发到 Web 服务器。
由于 Varnish A 和 Varnish B 不在同一个 DC 中,并且我们公司还有一些其他需求,因此无法使用类似 Heartbeat 的系统来使用虚拟 IP。
我们决定用我们网站的 CNAME 记录来解决这个问题。
我们现在有这样的内容:
hac.domain.com CNAME hac1.domain.com(TTL = 60 秒)
hac1.domain.com A 12.34.56.78 (TTL = 86400 秒)
hac2.domain.com A 22.33.44.55 (TTL = 86400 秒)
我们的想法是,在检测到故障时交换 hac.domain.com CNAME 记录。这给我们带来了大约 2 分钟的最大停机时间(如果没有 DNS 缓存仍然重定向到错误的服务器)。对于我们的用例来说是可以接受的。
主要问题:如何以冗余的方式检测故障并防止误报?
答案1
我开始将 Route 53 与 Amazon 的 CouldWatch 结合使用,以提供我所需的服务级别。这正是我所需要的!
答案2
您可以使用心跳检测故障并运行脚本来更改 DNS。您需要为心跳使用专用连接。