【问题标题】:EC2 Amazon High Availability Always OnEC2 Amazon 高可用性始终开启
【发布时间】:2016-08-11 03:02:21
【问题描述】:
我在 AWS EC2 中使用 Web 和数据库实例,我想让它们具有高可用性,这样如果一台服务器发生故障(主服务器),那么另一台服务器会打开(辅助服务器)。
我找到了很多关于 RDS 高可用性的信息,但没有找到关于不是 RDS 的 EC2 实例的信息。
- 能否为我提供一些链接,以获得如何操作的良好指南?
- 能否请您简单地告诉我,为了实现高可用性,我应该执行哪些流程?
谢谢。
【问题讨论】:
标签:
amazon-ec2
amazon
high-availability
【解决方案1】:
使用 EC2 实现 HA 有多种可能性:
- 创建一个最小容量=1 和最大容量=1 的自动缩放组。因此,每当您的实例失败时,自动缩放组将创建一个新的。自动扩缩组是免费提供的,因此这不是一个糟糕的解决方案,具体取决于您的 SLA。
- 使用 ec2 auto-recovery 功能,创建一个 cloudwatch 警报,如果失败将替换您的实例。
- 创建两个 EC2 实例并使用 Route 53 DNS 故障转移来解析为健康的实例
- 最后但同样重要的是:最好的解决方案肯定是跨多个可用区创建多个实例,并使用弹性负载均衡器来分配流量。这样,即使一个实例失败,您也已经有了其他可用的实例。 AWS 推荐此解决方案,因为他们在 AZ 中的实例具有 99.95% 的 SLA。通过放置多个可用区,您可以获得 100% 的可用性
编辑:添加信息为什么 EC2 没有这样的本机功能。
与 RDS 相比,EC2 没有原生 HA 功能,因为当 RDS 更多的是 PaaS 时,EC2 是纯 IaaS。因此,对于 RDS,当您选择 HA 时,它实际上会在另一个可用区域中生成一个从数据库并复制您的主数据库。每当主数据库发生故障时,您都会自动将 DNS 故障转移到从数据库,该数据库被选为主数据库,并且正在创建一个新的从数据库。
【解决方案2】:
您应该问的问题是 - 我如何在 AWS 上使我的应用程序 HA,而不是如何使 EC2 HA。简短的回答是,您必须首先告诉 AWS 您如何定义和部署您的应用程序。
对于 RDS,应用程序是什么非常清楚 - 它是您选择的数据库服务器。在最基本的情况下,AWS 可以使用默认设置设置 RDS 的 HA 实例,而无需您提供太多输入。
但是,对于您的应用程序,您需要向 AWS 提供更多详细信息。有几种方法可以做到这一点:
无论您决定采用哪种方式,AWS CloudFormation 模板都是将所有内容联系在一起并定义您的堆栈的好方法。这样做的一个好处是,当您需要对堆栈进行更改时,您将更改 CloudFormation 模板、应用更改并让 AWS 确定依赖项是什么、更新它们的顺序以及更新方式。
【解决方案3】:
如何使用 Elastic Beanstalk(有关官方文档,请参阅 here)?
本质上它在使用详细配置here时使用了许多AWS服务。
其主要目的是更轻松地创建多组环境来运行您的应用,同时监控应用的运行状况和负载,并启动实例来分配负载。
但是,可以将您的环境配置为单个实例(请参阅Environment Types 部分下的主要文档)。这意味着您可以利用运行状况监控,而 AWS 将负责可用性。
更具体地回答您的问题:
1) 官方 AWS 文档非常详细,应该可以帮助您入门。有几个视频资源解释了基本设置
2) 您可以组合不同区域的多个 EBS 实例,以使您的服务器靠近您的流量。