常见的 AWS 故障 - 处理 AZ 故障转移

Common AWS failures - Handling AZ failover

具体来说,我有一个问题,在 AWS 环境中组织 AZ 故障转移的推荐方法是什么。此外,为了组织应用程序 HA(高可用性),了解典型的 AWS 故障也会很好。 因此,应用程序架构(AWS 服务使用)如下: 它是 AWSmore/less 中典型的 Web 应用程序架构

  1. 有路由53解析了某ELB的ip
  2. 有 public 个具有 ELB 的子网,它将到 Web 服务器的流量路由到私有 VPC;
  3. 在私有子网中,流量为:Web 服务器 -> ELB-> 应用程序服务器;
  4. 应用程序服务器将数据写入多可用区 RDS。

这种部署的主要缺点是服务在一个 AZ 中处于活动状态,因为在多 AZ 部署中,Amazon RDS 会自动在不同的可用区中配置和维护同步备用副本。所以,master只在一个AZ,另一个AZ的服务是不允许写RDS的,因为它是standby。

两个问题:

  1. 为此类部署实施 HA 的更好方法是什么?
  2. 常见的 AWS 故障是什么(如果一个 AZ 不可用,是否经常只发生在某些服务上(例如 VPC/EC2/EBS 其他问题?)或者通常是整个 AZ 特定服务不可用)?

这种方法的 HA 考虑因素:

  1. RDS。来自 AWS 文档:"In the event of a planned or unplanned outage of your DB instance, Amazon RDS automatically switches to a standby replica in another Availability Zone if you have enabled Multi-AZ. The time it takes ....."。所以,AWS 会自动更改 RDS Master。
  2. Active/Not 有效可用区。可以向 Route53 添加不同的健康检查,基本上使 Active 成为另一个 AWS AZ。但是如何让它与RDS同步(只有当RDS在另一个AZ成为master后才能激活这个AZ)?

更新 保持一个主动和一个被动 AZ 的另一个原因是我们的应用程序服务器应该支持设备 IP 地址的粘性(例如,它根据用户或设备的 IP 保持会话)。我们在维护它的每个 AZ 中都有 1 个 EC2 Web 服务器实例(我们不允许向不同的 AZ 发送请求)。

我认为您误解了可用性区域的工作原理。一个AZ中的服务可以连接到不同AZ中的RDS master。您应该在至少 2 个 AZ 中拥有所有服务 运行。

对于RDS,当master发生故障或master所在的AZ宕机时,RDS服务会将standby提升为主,并更新RDS端点的DNS,使端点指向新的master .

为了处理 RDS 故障转移,您的代码需要做的就是通过重试优雅地处理突然的数据库断开连接。