【问题标题】:Common AWS failures - Handling AZ failover常见 AWS 故障 - 处理 AZ 故障转移
【发布时间】:2017-08-26 04:24:45
【问题描述】:

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

  1. 有路由 53 可以解析一些 ELB 的 ip。
  2. 有一个公共子网有 ELB,它将流量路由到 Web 服务器到私有 VPC;
  3. 在私有子网中,流量流向:Web 服务器 -> ELB-> 应用服务器;
  4. 应用服务器将数据写入多可用区 RDS。

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

两个问题:

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

关于这种方法的 HA 的注意事项:

  1. RDS。来自 AWS 文档:“如果您的数据库实例发生计划内或计划外中断,如果您启用了多可用区,Amazon RDS 会自动切换到另一个可用区中的备用副本。所花费的时间......”。因此,AWS 会自动更改 RDS Master。
  2. 活动/非活动 AZ。可以将不同的健康检查添加到 Route53 并基本上使 Active 成为另一个 AWS AZ。但是如何让它与RDS同步(只有当RDS成为另一个AZ的master后才能激活这个AZ)?

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

【问题讨论】:

    标签: amazon-web-services amazon-ec2 amazon-rds high-availability aws-vpc


    【解决方案1】:

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

    对于 RDS,当 master 失败或 master 所在的 AZ 关闭时,RDS 服务会将备用提升为 master 并更新 RDS 端点的 DNS,以便端点将指向新的 master。

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

    【讨论】:

    • “基于 IP”的粘性到底是什么意思?
    • 来自特定客户端 IP(不基于 cookie)的请求会发送到同一个应用服务器实例。
    • 您如何使用 ELB 实现 IP 粘性?你绕过ELB了吗?每个 ELB 只有一个 EC2 实例吗?
    • 您为什么还要关心 IP 粘性?您想确保共享 Internet 连接的所有用户始终使用相同的应用服务器吗?为什么 cookie 粘性不是一种选择?如果您想在云中实现适当的故障转移支持,我认为您需要重新考虑您的会话处理。
    • 也许您应该跨服务器复制会话而不是使用粘性会话?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-28
    • 2019-10-14
    • 2016-01-04
    • 2018-02-02
    • 1970-01-01
    相关资源
    最近更新 更多