我正在开发开源工具,它必须在 EC2 的集群上运行,以“一个主 - 几个从”的方式组织。我需要一些关于如何以最简单但可靠的方式正确组织事物的建议。
我基本上需要的是一个将在主实例(用户手动运行)上运行并执行以下操作的代码:
a) 运行 N 个从属实例(N 个来自用户)
b)在每个实例启动并运行后 - 通过 SSH 连接并启动一些东西。
c) 跟踪从属实例是否处于活动状态(例如通过简单地 ping 它们)
d) 如果从属实例失败 - 确保它已终止,运行另一个实例并重复步骤 b)
e) 通过来自用户的信号 - 关闭从属实例。
所有这些看起来都非常简单明了,但我有一些问题:
1)现成的解决方案。首先我看了一下Zookeeper,但我被它的复杂性吓到了。对于我需要的这么简单的事情来说,这似乎有点过头了。我发现的另一件事是StarCluster,它也在 Python 中,这很好(我的工具也在 Python 中),但我不确定它是否能满足我的需要(跟踪、重新运行实例)。我的问题是:是否有我不知道的简单工具、库、框架?
2)另一种方法是自己实现。这里的问题是:我的问题中是否有我不知道的陷阱?这一切看起来都很简单:对 API 的多次调用加上一些常规 ping,但可能我在这里看不到任何东西,所以使用已经编写的工具真的是正确的吗?
3)如果我自己编码,问题是:是否使用 CloudWatch。它真的对管理内部计算集群有什么不同吗?或者它只是更好地帮助处理高负载站点等?
4) 我的简单架构对主节点故障没有任何保护。用户运行它,然后通过 Web 界面连接到它并运行集群,但如果主节点出现故障 - 一切都会被破坏。从属节点可以检查主节点的存在,并在主节点出现故障时自行终止。这增加了一些防止无头运行的耗钱集群的保护,但这并不能解决优雅重启的问题。如何解决这个问题?
5) 在开始编写这个项目之前,是否还有其他需要了解的内容或需要阅读的重要资料?
先感谢您!