EC2 Amazon 高可用性永远在线

EC2 Amazon High Availability Always On

我在 AWS EC2 中使用 Web 和数据库实例,我想让它们具有高可用性,这样如果一台服务器(主服务器)出现故障,那么另一台服务器将打开(辅助服务器)。

我找到了很多关于 RDS 高可用性的信息,但没有找到非 RDS 的 EC2 实例的信息。

  1. 能否请您提供一些链接,以便我更好地指导如何操作?
  2. 能否请您用一些话告诉我为了实现高可用性我应该执行哪些过程?

谢谢。

使用 EC2 实现 HA 有多种可能性:

  • 创建一个最小容量为 1 且最大容量为 1 的自动缩放组。因此,每当您的实例失败时,自动缩放组都会创建一个新实例。自动缩放组是免费提供的,因此这不是一个糟糕的解决方案,具体取决于您的 SLA。
  • 通过创建一个 cloudwatch 警报来使用 ec2 auto-recovery 功能,该警报将在失败时替换您的实例。
  • 创建两个 EC2 实例并使用 Route 53 DNS 故障转移解析为健康实例
  • 最后但同样重要的是:最好的解决方案肯定是跨多个可用区创建多个实例,并使用弹性负载均衡器来分配流量。这样,即使一个实例失败,您也可以使用其他实例。 AWS 推荐此解决方案,因为他们在 AZ 中的实例的 SLA 为 99.95%。通过放置几个可用区,您可以获得 100% 的可用性

编辑:添加有关 EC2 没有此类本机功能的信息。

与 RDS 相比,EC2 中没有原生 HA 功能,因为当 RDS 更多是 PaaS 时,EC2 是纯 IaaS。因此,对于 RDS,当您 select HA 时,它实际上在幕后在另一个可用区中生成一个从属数据库并复制您的主数据库。每当 master 发生故障时,您都会自动 DNS 故障转移到从属数据库,该数据库被选为 master,并创建一个新的从属数据库。

使用Elastic Beanstalk怎么样(官方文档见here)?

本质上,它在使用详细配置 here 时利用了许多 AWS 服务。

其主要目的是更轻松地为 运行 您的应用程序创建多组环境,同时监控应用程序的运行状况和负载并启动实例来分配负载。

然而,可以将您的环境配置为单个实例(请参阅 Environment Types 部分下的主要文档)。这意味着您可以利用运行状况监控,而 AWS 将负责可用性。

更具体地回答你的问题: 1) 官方 AWS 文档非常详细,应该可以帮助您入门。有几个视频资源解释了基本设置

2) 您可以组合不同区域的多个 EBS 实例,以使您的服务器靠近您的流量。

您应该问的问题是 - 我如何在 AWS 上使我的应用程序高可用性,而不是如何使 EC2 高可用性。简短的回答是,您必须先告诉 AWS 您如何定义和部署您的应用程序。

对于RDS,应用程序是什么是非常清楚的——它是您选择的数据库服务器。在最基本的情况下,AWS 可以使用默认设置设置 RDS 的 HA 实例,而无需您进行太多输入。

但是,对于您的申请,您需要向 AWS 提供更多详细信息。有几种方法可以做到这一点:

  • 创建一个 ELB 在不同的可用性区域中使用一堆 EC2 实例
  • 创建一个带有 auto-scaling group which will lead you down the path of creating an AMI and a launch configuration 的 ELB;在这种模式下,您甚至可以告诉 ASG 使用 ELB 健康检查来确定 EC2 实例何时不再健康
  • 您没有提到您的应用程序是什么,但您可能希望 CodeDeploy 参与进来告诉 AWS 如何将最新代码部署到新启动的 EC2 实例; CodeDeploy 与 ELB 和 ASG 协同工作
  • 您可以将它们一起定义在一个 Elastic Beanstalk 中,而不是单独定义上述组件;这是您必须自己做出的决定 - 您是否希望通过自己定义各个组件来获得更大的灵活性,是否应该简化事情并使用 EB?
  • 最后,如果您使用 Docker 并且您可以对您的应用程序或同一应用程序的不同组件进行 docker 化,AWS 支持 EB multi-container docker

无论您决定采用哪种方式,AWS CloudFormation 模板都是将所有内容联系在一起并定义堆栈的好方法。这样做的一个好处是,每当您需要更改堆栈时,您将更改 CloudFormation 模板,应用更改并让 AWS 确定依赖项是什么、更新它们的顺序以及方式。