2.1. 关于集群的非常非常简短的介绍

大多数时候,您的计算机都很空闲。启动一个像 xload 或 top 这样的程序来监控您的系统使用情况,您可能会发现您的处理器负载甚至没有达到 1.0 的标记。如果您有两台或更多计算机,很可能在任何给定时间,至少其中一台什么都没做。不幸的是,当您真的需要 CPU power 时 - 例如在 C++ 编译或编码 Ogg Vorbis 音乐文件期间 - 您需要一次性的大量 CPU power。集群背后的想法是将这些负载分散到所有可用的计算机上,利用其他机器上的空闲资源。

集群的基本单元是一台单独的计算机,也称为“节点”。集群可以通过添加更多机器来扩大规模 - 它们可以“扩展”。 作为一个整体,集群的性能将随着单台计算机的速度和它们的连接速度的加快而变得更强大。 此外,集群的操作系统必须充分利用可用的硬件来响应不断变化的条件。 如果集群由不同类型的硬件(“异构”集群)组成,如果集群的配置不可预测地变化(机器加入和离开集群),并且负载无法提前预测,这将变得更具挑战性。

2.1.1. 关于集群的非常非常简短的介绍

2.1.1.1. HPC vs 故障转移 vs 负载均衡

基本上有 3 种类型的集群,故障转移、负载均衡和高性能计算。最常用的可能是故障转移集群和负载均衡集群。

  • 故障转移集群 由 2 台或多台通过网络连接的计算机组成,并且在 2 台主机之间具有单独的心跳连接。 2 台机器之间的心跳连接用于监控所有服务是否仍在运行:一旦一台机器上的服务发生故障,其他机器就会尝试接管。

  • 对于负载均衡集群,其概念是当收到例如 Web 服务器的请求时,集群会检查哪台机器最不忙,然后将请求发送到该机器。 实际上,大多数时候,负载均衡集群也是故障转移集群,但具有额外的负载均衡功能,并且通常具有更多节点。

  • 集群的最后一种变体是高性能计算集群:机器经过特殊配置,以满足需要极致性能的数据中心的需求。 Beowulfs 的开发尤其旨在为研究机构提供他们所需的计算速度。 这类集群也具有一些负载均衡功能; 它们尝试将不同的进程分散到更多机器上,以提高性能。 但在这种情况下,主要归结为进程正在并行化,并且可以单独运行的例程将被分散在不同的机器上,而不是必须等到它们一个接一个地完成。

负载均衡和故障转移集群最常见的已知示例是 Web 服务器集群、数据库或防火墙。 人们希望他们的服务具有 99.99999% 的正常运行时间,互联网是 24/24 7/7/ 365/365 开放的,这与过去办公室关门时可以关闭服务器的情况不同。

需要 cpu 周期的人通常可以安排其环境的停机时间,只要他们可以在需要时使用其机器的最大功率即可。

2.1.1.2. 超级计算机 vs. 集群

传统上,超级计算机仅由少数选定的供应商构建:需要这种机器性能的公司或组织必须有巨额预算才能购买超级计算机。 许多大学自己无法负担超级计算机的成本,因此他们正在研究其他替代方案。 当人们第一次尝试将不同的作业分散到更多计算机上,然后收集回这些作业产生的数据时,集群的概念就诞生了。 随着更便宜和更常见的硬件可供所有人使用,在最初几年,与真正的超级计算机相似的结果只能是梦想,但随着 PC 平台的进一步发展,超级计算机和多台个人计算机组成的集群之间的性能差距变得越来越小。

2.1.1.3. 集群模型 [(N)UMA, PVM/MPI]

有不同的并行处理方法:(N)UMA、DSM、PVM 和 MPI 都是不同类型的并行处理方案。 其中一些在硬件中实现,另一些在软件中实现,另一些在两者中都实现。

(N)UMA ((非)统一内存访问),例如机器可以共享访问它们可以执行代码的内存。 在 Linux 内核中,有一个 NUMA 实现,它可以改变不同内存区域的内存访问时间。 然后内核的任务是使用离它正在使用的 CPU 最近的内存。

DSM 也称为分布式共享内存,已在软件和硬件中实现,其概念是为物理分布式内存提供一个抽象层。

当人们谈论基于 GNU/Linux 的 Beowulfs 时,PVM 和 MPI 是最常用的工具。

MPI 代表消息传递接口。 它是消息传递库的开放标准规范。 MPICH 是 MPI 最常用的实现之一。 除了 MPICH,您还可以找到 LAM,它是 MPI 的另一个实现,基于库的免费参考实现。

PVM 或并行虚拟机是 MPI 的另一个“表亲”,它也经常被用作创建 Beowulf 的工具。 PVM 存在于用户空间中,因此不需要特殊的内核修改:基本上每个具有足够权限的用户都可以运行 PVM。

2.1.1.4. openMosix 的作用

openMosix 软件包将运行 GNU/Linux 的联网计算机变成一个集群。 它自动平衡集群不同节点之间的负载,节点可以加入或离开正在运行的集群,而不会中断服务。 负载根据节点的连接速度和 CPU 速度在节点之间分散。

由于 openMosix 是内核的一部分,并与 Linux 保持完全兼容,因此用户的程序、文件和其他资源都将像以前一样工作,而无需任何进一步的更改。 普通用户不会注意到 Linux 系统和 openMosix 系统之间的区别。 对她来说,整个集群将作为一个(快速)GNU/Linux 系统运行。

openMosix 是一个 Linux 内核补丁,它为 IA32 兼容平台提供与标准 Linux 的完全兼容性。 内部负载均衡算法透明地将进程迁移到其他集群成员。 优点是节点之间更好的负载共享。 集群本身会尝试在任何时候优化利用率(当然,系统管理员可以在运行时通过手动配置来影响自动负载均衡)。

这种透明的进程迁移功能使整个集群看起来像一个大型 SMP 系统,其处理器数量与可用集群节点一样多(当然,对于双/四核系统等 X 处理器系统,还要乘以 X)。 openMosix 还为 HPC 应用程序提供了一个强大的优化文件系统 (oMFS),与 NFS 不同,它提供缓存、时间戳和链接一致性。