具有自动服务启动功能的冷备用高可用性负载平衡

具有自动服务启动功能的冷备用高可用性负载平衡

我正在尝试在 AWS 中为正在运行的应用程序设置高可用性集群。该应用程序位于 Oracle RDS 前面的 EC2 实例上。如果我使用传统的负载平衡并同时运行两个实例,则数据库会损坏,因为这两个实例将对数据库进行更改但彼此不知道,所以我需要进行主动/被动负载平衡。

我遇到的问题是,如果被动实例正在运行应用程序,即使没有流量进入,它仍然会在大约 0.1% 的时间内对数据库进行更改。这意味着我需要确保当主节点正常运行时,应用程序服务不在备份节点上运行。

我的理想情况是拥有一个可以运行主动/被动故障转移的程序,它可以执行以下操作:

  1. 检查主节点的健康
  2. 如果主节点健康,则将流量转发到主节点
  3. 如果主节点不健康,则运行启动服务的脚本,然后将流量转发到辅助节点

我一直在研究 HAProxy,但我还没有找到一种方法可以让 HAProxy 在主节点发生故障时在备份服务器上运行任意脚本。

我看过一些关于使用 keepalived 的讨论。我建议的方法在 keepalived 中可行吗?还有其他方法可以做到这一点吗?

答案1

您可以使用 Route53 运行主动-被动故障转移(而不是使用 ALB 进行负载平衡,它会均匀分配流量,但这不是您想要的)。

使用主动-被动故障转移,您可以拥有一个主活动服务,以及一个(或多个)冷备用辅助服务。如果主服务的健康检查失败,它将重定向到辅助服务,所有这些都使用 DNS。这不一定能为您提供 HAProxy 的稳健性,但它基本上可以实现您的目标(取决于故障转移延迟的关键性和无缝性 - 虽然您可以拥有更快的检查间隔,这可能会将切换延迟缩短至 60 秒)。

AWS 的本指南涵盖了 Route53 DNS 故障转移:

主动-主动和主动-被动故障转移

相关内容