在EC2中构建集群的正确方法

时间:2012-10-08 10:48:48

标签: architecture amazon-ec2 cluster-computing starcluster

我正在研究开源工具,它必须在EC2中的一个集群上运行,并在其中进行组织 “一个主人 - 几个奴隶”的态度。我需要一些关于如何以最简单,最可靠的方式正确组织事物的建议。

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

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

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

c)跟踪奴隶实例是否存活(例如通过简单地ping它们)

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

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

这一切看起来非常简单明了但我还有一些问题:

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

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

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

4)我的简单架构没有任何主节点故障保护。用户运行它,然后通过Web界面连接到它并运行集群,但如果主节点发生故障 - 一切都会被破坏。从站可以检查主节点是否存在,并在主节点发生故障时自行终止。这增加了一些保护,使其无法获得无头运行的耗费资金的群集,但这并不能解决优雅重启的问题。怎么解决这个问题?

5)在开始编写这个项目之前,还有其他要知道的东西或要阅读的重要资料吗?

提前谢谢!

2 个答案:

答案 0 :(得分:2)

你可能想看看亚马逊的自动缩放。显然,这仅处理EC2实例,但为您处理启动,停止和监视实例的大量复杂性。

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

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

您也可以拥有多个组,例如,您可能拥有一个与主节点相对应的组,该主节点始终具有1个实例(如果失败则ec2将替换它)和第二个组,其中第二个组将具有0个实例当有工作可用时,没有工作要做,有N个实例。

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

答案 1 :(得分:1)

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

  • 配置VM
  • 将应用程序代码部署到新VM
  • 监控虚拟机状态并启动新虚拟机以替换失败的虚拟机。
  • 自动缩放

您需要根据PaaS预期的格式定义您的应用程序并提交。其余的应该是自动化的。 这里有PaaS选项的良好比较:Looking for PaaS providers recommendations

免责声明:我为开源Paas Stack的开发人员GigaSpaces工作,Cloudify