2.2 什么是集群

SDS(软件定义存储)有很多优势可以利用,它能够帮我们打造易于伸缩且容错力较强的方案,而GlusterFS就是这样的一种软件,用来创建高伸缩力、高性能的存储集群。

在讲解这个具体的软件之前,首先要定义什么是集群,并说明为什么使用集群,以及它能够解决什么样的问题。

2.2.1 用集群处理计算任务

简单地说,集群是协同运作以处理同一套负载的一系列计算机(通常也称为节点)。集群会把总负载分配到每一台可用的计算机上以提升性能,这同时也使得该集群具备自我修复能力与高度的可用性。请注意,集群里的成员叫作节点(node),而不是服务器(server),因为任何计算机都可以加入集群,不一定非得是服务器。无论是简单的Raspberry Pi(树莓派),还是拥有许多CPU的服务器,都可以进入集群中构成只有两个节点的配置方案,或是多达上千个节点的数据中心。

图2-1描述了集群的结构。

图2-1

从理论上来说,要想提升集群的工作性能,可以添设资源特征相似的同类型服务器。最理想的情况是集群的所有节点都采用同一套硬件,这样的话就不会在性能上出现差异,同时也让维护工作变得相当有规律。要做到这一点,必须采用同一系列的CPU,并按照同一种方式来配置内存及软件。这种给集群添设节点的办法,是通过减少处理时间来提升工作效率。对于某些应用来说,工作效率有可能呈线性增长。

为了更好地理解集群的计算原理,我们想象有这样一个应用程序:它要接收从前的财务数据,收到数据后根据已经存储的信息,进行预测。如果集群里面只有一个节点,那么这个预报进程(集群里的进程,通常称为job(工作任务))大约要6天才能完成,因为它需要处理的数据高达数TB(TeraByte)。给集群添设一个特征相似的节点后,处理时间就可以降到4天;若是再添一个,则会降至3天。

请注意,计算资源变为原来的三倍,并不能保证处理时间会降为原来的三分之一。在上述例子中,我们只能把处理时间降到原来的大约二分之一。某些应用确实可以让速度随着节点数量呈线性增长也就是说,节点数变为原来的n倍,会让处理速度也提升到原来的n倍;或者说,会让处理时间降至原来的n分之一。——译注,但另一些应用则不行。对于后一类应用来说,添加节点所得到的增益越来越少,直至几乎为零。如果添设新资源所带来的增益很少,那么这样做就显得不够划算了。

根据上述内容,可以看出集群的几个作用:

❑可以用更多的计算资源,来降低处理时间。

❑可以进行垂直扩展及水平扩展。

❑可以实现冗余机制,也就是说,如果其中一个节点故障,那么本来应该由该节点负责的工作,可以交给其他节点负责。

❑可以给应用程序提供更多的资源。

❑是一套整合的资源池,而不是由许多台孤立的服务器拼凑起来的。

❑没有故障单点。

2.2.2 存储集群

上节告诉我们集群是如何处理计算任务的,接下来介绍集群的另外一种用途。

除了可以聚合计算资源以降低处理时间,集群还有一项功能是把可用的存储空间整合起来,以提升其利用率;同时提供某种形式的冗余机制。现在,越来越多的人要求用较低的成本存放大量的数据,同时又要求提升数据的可用性;而存储集群把许多存储节点整合成一个庞大的存储池,正可以解决这个问题。于是,我们不需要部署特别的专属硬件,就可以实现PB级别的存储系统。

例如,如果集群只有一个500TB节点的可用空间,就无法实现出带有冗余机制的1 PB(PetaByte,等于1024TB)存储系统。因为该节点在这种情况下会成为故障单点,只要它一故障,整个存储系统就无法提供数据,冗余得不到保证。此外,由于它的HDD(Hard Disk Drive,硬盘驱动器)只有500TB空余,因此存放不下1PB的数据。总之,只有一个节点是无法实现水平扩展的。

为了解决这个问题,我们可以给集群里再添加两个相同的节点,与现有的这个节点合起来实现出1PB的存储系统。有人会问,3个500TB合起来是1.5PB才对,为什么只说是1PB呢?这是因为要想确保该方案具备高可用性,需要让其中一个节点充当备份节点;如果另外两个节点里有某个节点发生故障,这个备份节点可以取代故障节点,从而保证集群与客户之间的通信不受影响。这种节点容错能力要靠SDS与存储集群来实现,下节我们就会讲解这样一种采用GlusterFS来实现存储集群的方式。