我们在AWS的US-WEST-2地区拥有我们的Web服务器集群,可以在同一地区读写Postgres RDS。 根据AWS的SLA,一个地区可能会在一个月内下降22分钟。
为了减轻22分钟的这种停机时间,当它发生时。 我正在用自己的RDS在US-EAST-1地区build立另一个集群。
为了使两个群集同步,我希望将PUT请求中继到US-WEST-2和US-EAST-1中的两个群集。 有没有可以帮助我的Web代理/ AWS服务?
在架构上,您似乎决定的解决scheme很难实现,通常不是处理问题的最佳方式。
一个更好的方法是经常有多个不在同一build筑物中的一组/多个Web服务器,并保持数据库的同步。
可用区域
最简单的方法是利用可用区域(AZs)。 AZ是同一地区的独立数据中心,它们之间的延迟非常低,每个AZ都有独立的networking和电源。 多个AZ一次失败是罕见的,但可能发生 – 我的感觉是可能每两年发生一次。
使用AZ的优势在于AWS可以轻松地在单个区域内使用AZ来提高应用程序的可靠性。 您可以使用负载均衡器,并将stream量分配到多个AZ中的Web /应用程序服务器,每个服务器都提供stream量。 RDS在一个区域内的AZ中有同步副本,所以任何写入AZ A的数据都立即应用到AZ B. 如果AZ A失败,AZ B中的RDS实例在几秒到几分钟之间出现。
多区域
多区域架构比较困难。 您使用Route53进行负载平衡或故障切换,这意味着负载可以分布式或可以故障切换。
您不能在跨区域使用RDS同步复制副本。 您可以在不同地区执行只读副本 ,并且可以根据需要手动提升数据库的主数据。 一旦中断解决了让原来的configuration重新运行可能会有问题,因为旧的主数据库与新的主configuration不同步。 如果你想要跨多个区域的多主数据库,我怀疑你必须自己在EC2实例上运行它们。
TLDR
使用AZ来提高标准故障的可靠性。 如果您需要特殊的可用性,则可以使用另一个区域作为热点或冷点,具体取决于您的RTO(恢复时间目标)。