如果我错误地使用了这些术语,请原谅我。
我想知道是否有任何软件可以让我的两台计算机“连接”在一起,这样集群不感知的应用程序就可以利用它们的组合计算资源?“集群不感知”是指不设计为跨多个服务共享工作的应用程序。我的理解是,集群是由特定应用程序通过其架构启用的,这样与应用程序的多个实例的消息传递就可以协调工作共享。相反,我正在寻找可以在操作系统或虚拟化级别启用集群的东西,这样任何应用程序基本上都可以集群化。
除此之外,我还在考虑以下场景:我们有 3 个不同的应用程序,分别称为 A、B 和 C。我们有 2 台单核计算机。在任何时候,这些应用程序的任何组合都会占用大量 CPU。如果只有 2 个应用程序非常活跃,请将其中一个移至另一台服务器。简而言之,就是对应用程序的负载进行某种动态自动调整。
我听说过虚拟机可以在运行期间跨物理机迁移,但我想知道这是否可以根据应用程序或虚拟机的 CPU 活动自动完成?
答案1
您可以虚拟化整个操作系统映像,并在这些不同的虚拟化操作系统中运行您的应用程序,并移动这些操作系统以适合您的负载。这是 ESX/虚拟化模型。它可能可以追溯到 IBM 大型机操作系统,它们虚拟化了机器,而不是制作可以同时运行多个程序的操作系统。
硬件到硬件的迁移并不是非常快,并且您将在每个虚拟实例上的操作系统内存等方面消耗大量的开销。
另一种选择是使用向客户端程序呈现单个操作系统映像但实际上同时在多台计算机上运行的东西。此模型的一个例子是莫西克斯。Mosix 扩展了 Linux,使得正在运行的程序在某些情况下可以从一个硬件移动到另一个硬件。程序本身并不会意识到这一点(就像它通常不关心在具有 2 个 CPU 的普通计算机中是否从一个 CPU 移动到另一个 CPU 一样)。这样做会产生一些开销,但可能值得研究。
答案2
如果你将每个应用程序安装在不同的虚拟机上,那么可以使用任何给定的企业级虚拟机技术进行实时迁移
如果您正在寻找故障转移群集,那么非群集软件的群集是可能的。要么使用虚拟机,如果主机死机,则将虚拟机迁移到另一台主机,要么使用 XOsoft WANsync、NeverFail、DoubleTake 等软件。
资源共享有点棘手,并且软件通常必须具有集群感知能力,更重要的是 - 它应该能够在负载平衡集群中工作,而不仅仅是故障转移。
答案3
由于 MOSIX 似乎与 MPI 相关联,因此有必要提及一种名为 PVM(并行虚拟机)的竞争技术。探索是否有任何基于 PVM 设计的类似 MOSIX 的集群操作系统可能很有用。我曾使用 PVM 并行运行 C++ 任务,使用多个 Linux 服务器作为单个集群硬件。例如,在巨大的 RDBMS 行上运行 SQL 查询可以进行分区。
PVM除了提供消息传递接口外,还使网络通信透明化,并支持异构集群系统中灵活的并行计算。
如果您使用 Myrinet 交换机硬件,则可以使用 PVM 的优化版本;请参阅http://www.huaxiaspace.net/research/wed930.pdf。
我见过一些幻灯片暗示 Mosix 可以与 MPI 或 PVM 技术一起使用,但不确定。