1

我正在开发开源工具,它必须在 EC2 的集群上运行,以“一个主 - 几个从”的方式组织。我需要一些关于如何以最简单但可靠的方式正确组织事物的建议。

我基本上需要的是一个将在主实例(用户手动运行)上运行并执行以下操作的代码:

a) 运行 N 个从属实例(N 个来自用户)

b)在每个实例启动并运行后 - 通过 SSH 连接并启动一些东西。

c) 跟踪从属实例是否处于活动状态(例如通过简单地 ping 它们)

d) 如果从属实例失败 - 确保它已终止,运行另一个实例并重复步骤 b)

e) 通过来自用户的信号 - 关闭从属实例。

所有这些看起来都非常简单明了,但我有一些问题:

1)现成的解决方案。首先我看了一下Zookeeper,但我被它的复杂性吓到了。对于我需要的这么简单的事情来说,这似乎有点过头了。我发现的另一件事是StarCluster,它也在 Python 中,这很好(我的工具也在 Python 中),但我不确定它是否能满足我的需要(跟踪、重新运行实例)。我的问题是:是否有我不知道的简单工具、库、框架?

2)另一种方法是自己实现。这里的问题是:我的问题中是否有我不知道的陷阱?这一切看起来都很简单:对 API 的多次调用加上一些常规 ping,但可能我在这里看不到任何东西,所以使用已经编写的工具真的是正确的吗?

3)如果我自己编码,问题是:是否使用 CloudWatch。它真的对管理内部计算集群有什么不同吗?或者它只是更好地帮助处理高负载站点等?

4) 我的简单架构对主节点故障没有任何保护。用户运行它,然后通过 Web 界面连接到它并运行集群,但如果主节点出现故障 - 一切都会被破坏。从属节点可以检查主节点的存在,并在主节点出现故障时自行终止。这增加了一些防止无头运行的耗钱集群的保护,但这并不能解决优雅重启的问题。如何解决这个问题?

5) 在开始编写这个项目之前,是否还有其他需要了解的内容或需要阅读的重要资料?

先感谢您!

4

2 回答 2

2

你可能想看看亚马逊的自动缩放。显然,这只处理 EC2 实例,但为您处理启动、停止和监控实例的许多复杂性。

使用 AutoScaling,您可以创建一个或多个组。您告诉亚马逊如何在您的组中创建更多实例(AMI、userData、实例类型等)以及您希望在组中创建多少个实例。亚马逊将根据需要启动尽可能多的实例,并在它们失败时替换它们。

您可以使用 api 更改所需节点的数量(如果您当时不需要任何实例,可以将其设置为 0),或者您可以根据 cloudwatch 指标拥有它。例如,如果您使用 SQS 将作业分发到您的从属服务器,您可以配置自动缩放以在有可用作业时将组大小从 0 增加到所需的数量,并在队列变空时将组大小返回到 0。

您还可以有多个组,例如,您可能有一个与主节点相对应的组,该组始终具有 1 个实例(如果失败,ec2 将替换它)和第二个从属组,当没有实例时将具有 0 个实例待完成的工作和有可用工作时的 N 个实例。

我自己没有使用过 python 的 EC2 api,但我听说 boto 可以很好地为你处理这个问题。

于 2012-10-08T15:43:41.737 回答
1

一种可能的方法是使用 PaaS(平台即服务)来处理您需要的大量管道。PaaS 通常至少会处理:

  • 供应虚拟机
  • 将应用程序代码部署到新 VM
  • 监控虚拟机状态并启动新虚拟机以替换故障虚拟机。
  • 自动缩放

您需要根据 PaaS 预期的格式定义您的应用程序并提交。其余的应该是自动化的。这里对 PaaS 选项进行了很好的比较:寻找 PaaS 提供商建议

免责声明:我为GigaSpaces工作,他是Cloudify开源 Paas 堆栈的开发人员

于 2012-11-28T13:21:05.890 回答