我们的 Web 服务器集群位于 AWS 的 US-WEST-2 区域,可读取/写入同一区域的 Postgres RDS。根据 AWS 的 SLA,一个区域在一个月内最多可停机 22 分钟。
为了减少每次发生 22 分钟的停机时间。我正在 US-EAST-1 区域设置另一个集群,并拥有自己的 RDS。
为了使两个集群同步,我希望将 PUT 请求中继到 US-WEST-2 和 US-EAST-1 中的两个集群。有没有可以帮助我的 Web 代理/AWS 服务?
答案1
从架构上看,您似乎决定的解决方案很难实施,而且通常不是解决问题的最佳方法。
更好的方法通常是拥有不在同一栋建筑物中的多组/集群 Web 服务器,并保持数据库同步。
可用区域
实现此目标的最简单方法是利用可用区 (AZ)。可用区是位于同一区域的独立数据中心,它们之间的延迟非常低,每个可用区都有独立的网络和电源。多个可用区同时发生故障的情况很少见,但确实会发生 - 我的感觉是每隔几年就会发生一次。
使用可用区的优势在于,AWS 可以轻松使用单个区域内的可用区来提高应用程序的可靠性。您可以使用负载均衡器并将流量分配到多个可用区中的 Web/应用程序服务器,每个服务器都提供流量。RDS 在一个区域内的可用区之间具有同步副本,因此在可用区 A 中写入的任何数据都会立即应用于可用区 B。如果可用区 A 发生故障,可用区 B 中的 RDS 实例将在几秒到几分钟内恢复。
多区域
多区域架构更加困难。您可以使用 Route53 进行负载平衡或故障转移,这意味着负载可以分散或可以进行故障转移。
您无法跨区域使用 RDS 进行同步副本。您可以这样做跨区域读取副本,如果需要,您可以手动将数据库提升为主数据库。一旦中断解决,让事情恢复到原始配置可能会有问题,因为旧的主数据库与新的主数据库不同步。如果您想要跨区域的多主数据库,我怀疑您必须在 EC2 实例上自己运行它们。
结论
使用可用区来提高标准故障的可靠性。如果您需要卓越的可用性,那么您可以将另一个区域用作热站点或冷站点,具体取决于您的 RTO(恢复时间目标)。