6

我们在单个 EC2 服务器实例上运行一个轻量级 Web 应用程序,这可以满足我们的需求,但我们想知道是否监控它并在它出现故障时重新启动它。

我们有一个单独的非亚马逊服务器,我们想用它来监控 EC2 并在必要时启动一个新实例并关闭旧实例。我们所有的用户数据都在 Elastic Storage 上,所以我们不太担心丢失任何东西。

我想知道是否有人有以这种方式使用 EC2 的经验,特别是自动化启动新实例的过程?我们从头开始创建东西没有问题,但它似乎应该是一个已解决的问题,所以我想知道是否有人有任何提示、链接、脚本、教程等要分享。

谢谢。

4

5 回答 5

6

您应该看看puppet及其对AWS的支持。我还会查看RightScale AWS 库以及这篇关于使用 RightScale 脚本启动服务器的文章。您可能还会发现这篇关于使用 EC2 提供 Web 服务的文章很有用。我做了类似的事情,但没有外部监控,节点监控自己并在不再需要时关闭,然后当有更多工作要做时会启动一个新节点。

于 2008-10-30T15:19:44.973 回答
2

几点:

您必须必须备份您的 Amazon EBS 卷。

他们声称“更好”的可靠性,但不是 100%,而且它比 S3 的“12 9”耐用性低了几个数量级。S3 耐用性 >> EBS 耐用性。这是事实。EBS 支持“快照”功能,该功能可以高效且增量地备份您的存储到 S3。此外,使用 EBS 快照,您只需为压缩增量付费,这通常远小于分配的卷大小。在另一种生活中,我向像您这样“认为”EBS 是“耐用”并信任它的任务关键型数据库的唯一副本的小型客户发送了丢失量的电子邮件……这令人心碎。

您的问题:自动启动新实例

您提到的设计路径相对未走;这就是为什么...许多公司运行冗余的“热备用”实例,其中第二个实例已启动并运行。这允许在“故障”(可能是硬件或软件)的情况下快速故障转移(秒)。“冷备用”的问题在于,很难让机器保持最新状态并准备好从旧盒子停止的地方拿起。更重要的是,验证备件是否能够成功恢复您的生产服务是很棘手的。硬件比未经测试的软件系统更可靠。测试测试测试。如果你没有测试你的故障转移,它就不起作用。

启动新 EBS 实例的简单自动化很容易,几乎是微不足道的。它只是一个调用EC2 命令行工具的单行 bash 脚本。棘手的是最重要的一切。这样的解决方案几乎意味着完全 100% 自动化的部署过程。这都是特定于您的应用程序的。您的应用程序能否拉取运行所需的所有数据(可能存储在 S3 中?)。您今天可以杀死您的实例并使用 0.000 个手动设置/安装步骤启动一个新实例吗?

或者,您可能正在谈论我称之为“重新实例化 EBS 卷”的场景:

  1. EC2 盒死机(根卷为 EBS)
  2. 强制分离 EBS 卷
  3. 使用 EBS 卷启动新的 EC2 实例

...这主要是有效的。问题:

  • 不能防止 EBS 故障,无论是总卷丢失还是可用性丢失
  • 假设一切正常,恢复时间为 O(分钟)
  • 您的服务需要配置为自动重启。如果 Nginx 没有运行,把盒子拿回来是没有好处的。
  • 您的 DNS 路由或其他服务或任何需要更改 IP 地址的东西。这可以通过 ElasticIP 解决。
  • 您的主机 SSH 密钥是如何处理的?同名,新主机密钥在收到主机密钥更改的强烈警告时可能会破坏基于 SSH 的自动化。
  • 我没有这方面的证据(除了看到它发生一次),但我相信 EC2/EBS _already_does_this_ 自动用于从 EBS 实例启动

同样,这里的困难部分在你的盘子上。您今天可以停止生产服务并在新实例上可靠地启动它吗?如果是这样,故事的 EC2 部分真的很简单

于 2013-04-02T22:12:18.797 回答
1

作为一个侧面:

我们所有的用户数据都在 Elastic Storage 上,所以我们不太担心丢失任何东西。

如果您还没有这样做,我强烈建议您定期将 EBS(弹性块存储)快照到 S3。

于 2009-01-15T12:42:46.877 回答
0

您可以使用最小/最大/所需数量为 1 的自动缩放组。将实例放在 ELB 后面,并让自动缩放组由 ELB 健康节点计数触发。这允许您通过 cloudwatch 和 ELB 健康检查进行内置监控。每当出现问题时,实例都会被自动缩放服务替换。

于 2013-12-29T04:15:00.383 回答
0
  1. 如果您没有选中“防止意外终止”,您可能想要这样做。
  2. 即使您为您的实例禁用了“详细监控”,您仍然应该看到您的实例的“StatusCheckFailed”指标,您可以在该指标上配置警报(在 CloudWatch 仪表板中)
  3. 您的应用程序(托管在不同的服务器中)应该收到警报并使用 AWS API(或 CLI)启动实例

由于您已防止意外终止,因此您永远不需要生成新实例。

于 2017-03-16T05:23:09.647 回答