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



我正在开发开源工具,该工具必须在EC2中的集群上运行,组织在"一主多奴"的态度。我需要一些关于如何以最简单但可靠的方式正确组织事情的建议。

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

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

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

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

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

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

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

1) 现成的解决方案。首先我看了一眼动物园管理员,但我被它的复杂性吓坏了。对于我需要的这么简单的东西来说,这似乎太过分了。我发现的另一件事是StarCluster,它也在Python中,这很好(我的工具也是在Python中),但我不确定它是否能满足我的需求(跟踪,重新运行实例)。我的问题是:有没有我不知道的简单工具、库和框架?

2) 另一条路是自己去实施。这里的问题是:我的问题中有没有我没有意识到的陷阱?这一切看起来很简单:几个对API的调用加上一些常规ping,但可能我在这里看不到什么,所以使用已经编写好的工具真的是正确的吗?

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

4) 我的简单体系结构对主节点故障没有任何保护。用户运行它,然后通过web接口连接到它并运行集群,但如果主节点出现故障,一切都会中断。从节点可以检查主节点的存在,并在主节点出现故障时自行终止。这增加了一些保护,避免了无头运行的耗电集群,但这并不能解决优雅重启的问题。如何解决这个问题?

5) 在开始编写这个项目的代码之前,是否还有其他我应该熟悉的事情或重要的材料需要阅读?

提前谢谢!

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

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

您可以使用api来更改所需节点的数量(如果当时不需要任何实例,则可以将其设置为0),也可以基于cloudwatch度量进行设置。例如,如果您使用SQS将作业分配给从属服务器,则可以配置自动缩放,以便在有作业可用时将组大小从0增加到所需数量,并在队列变空时将组尺寸返回到0。

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

我自己没有使用过python中的EC2 api,但我听说boto在处理这方面做得很好。

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

  • 配置虚拟机
  • 将应用程序代码部署到新的虚拟机
  • 监控虚拟机状态并启动新的虚拟机以替换出现故障的虚拟机
  • 自动缩放

您需要根据PaaS所期望的格式定义您的应用程序并提交它。其余的应该是自动化的。这里有一个很好的PaaS选项比较:寻找PaaS提供商的建议

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

相关内容

最新更新