本文是《基于Linux的集群系统》系列《典型集群系统分析》的第二篇,作者将继续向我们介绍几个最典型的集群系统。
3. Linux Virtual Server
Linux虚拟服务器(Linux Virtual Server, LVS)建筑于实际的服务器集群之上,用户看不到提供服务的多台实际服务器,而只能看见一台作为负载平衡器的服务器。实际的服务器通过高速局域网或地理上分散的广域网连接。实际服务器的前端是一台负载平衡器,他将用户的请求调度到实际服务器上完成,这样看起来好像所有服务都是通过虚拟服务器来完成的。Linux虚拟服务器能够提供良好的可升级性、可靠性和可用性。用户可以透明地增加或减少一个节点,可以对实际服务器进行监测,如果发现有节点失败就重新配置系统。
Linux Virtual Server的结构如图3-1所示:
图3-1 Linux虚拟服务器结构图
3.1 调度算法
LVS提供了四种调度算法:轮转调度,加权轮转调度,最少连接调度,加权最少连接调度。
轮转调度(Round Robin Scheduling)
轮转调度不考虑服务器的连接数和响应时间,它将所有的服务器都看作是相同的。当以轮转的形式将连接分发到不同的服务器上。
加权轮转调度(Weighted Round Robin Scheduling)
根据每个机器的处理能力的不同给每个机器分配一个对应的权重,然后根据权重的大小以轮转的方式将请求分发到各台机器。这种调度算法的耗费比其它的动态调度算法小,但是当负载变化很频繁时,它会导致负载失衡,而且那些长请求会发到同一个服务器上。
最少连接调度(Least Connection Scheduling)
最少连接调度将用户请求发送到连接数最少的机器上。最少连接调度是一种动态调度方法,如果集群中各台服务器的处理能力相近,则当负载的变化很大时也不会导致负载失衡,因为它不会把长请求发送到同一台机器上。但是当处理器的处理能力差异较大时,最少连接调度就不能很好的发挥效能了。
加权最小连接调度(Weighted Least Connection Scheduling)
根据服务器的性能不同而给它们分配一个相应的权重,权重越大,获得一个连接的机会就越大。有如下的运算方法:(假设共有n台机器,每一台服务器i的权重为Wi (i=1,..,n),活跃连接数为Ci (i=1,..,n), 所有的连接数为Ci (i=1,..,n)的总和,下一个连接会发送给服务器j,服务器j满足以下的要求):
(Cj/ALL_CONNECTIONS)/Wj = min { (Ci/ALL_CONNECTIONS)/Wi } (i=1,..,n)
由于ALL_CONNECTIONS是一个常数,因此上面的式子可以优化为:
Cj/Wj = min { Ci/Wi } (i=1,..,n)
3.2 负载平衡方法
LVS提供了三种IP级的负载平衡方法:Virtual Server via NAT 、Virtual Server via IP Tunneling、Virtual Server via Direct Routing。
Virtual Server via NAT方法使用了报文双向重写的方法, Virtual Server via IP Tunneling采用的是报文单向重写的策略, Virtual Server via Direct Routing采用的是报文转发策略,这些策略将在以后的文章中详细描述。
4. MOSIX
MOSIX为Linux核心增添了集群计算的功能。它支持的操作系统平台有BSD/OS 和Linux,它允许任意多个基于X86/Pentium的服务器和工作站协同工作。在MOSIX集群环境中,用户无需对应用程序进行修改,或将应用程序与库连接起来,或将应用程序分配到不同的节点上运行。MOSIX会自动将这些工作透明地交给别的节点来执行。
MOSIX的核心是适应性的资源管理算法,它对各节点的负载进行监测并做出相应的回应,从而提高所有进程的整体性能。它使用抢先的进程迁移方法来在各节点中分配和再分配进程,从而充分利用所有的资源。适应性的资源管理算法具体上又包括适应性的负载平衡算法、内存引导算法和文件I/O的优化算法。这些算法都对集群中的资源使用情况的变化做出响应。如:节点上的不平衡的负载分布或由于内存不足而导致的过多的磁盘换入换出。在这种情况下,MOSIX将进程从一个节点迁移到另外一个节点上,从而来均衡负载或将进程迁移到有足够的内存空间的节点上。
由于MOSIX是在Linux的核心中实现的,因此它的操作对应用程序而言是完全透明的。可以用它来定义不同的集群类型,这些集群中的机器可以相同也可以不同。
与Turbocluster、Linux Virtual Server、Lsf等集群系统不同的是,MOSIX集群中的每个节点既是主节点又是服务节点,不存在主控节点。对于那些在本地节点创建的进程而言,该节点就是一个主节点;对于那些从远方节点迁移过来的进程而言,该节点就是服务节点。这意味着可以在任意时刻向集群中增加节点或从集群中删除节点,而不会对正在运行的进程产生不良的影响。MOSIX的另外一个特性就是它的监测算法能够监测每个节点的速度、负载、可用内存、IPC 以及I/O rate 。系统使用这些信息来决定将进程发送到哪个具体的节点上。当在某个节点上创建了一个进程以后,该进程就在这个节点上执行。当该节点的负载超过了一定的阀值以后,就将该进程透明地迁移到别的节点上继续执行。
MOSIX文件系统采用直接文件系统访问的方法,它可以允许迁移到别的节点的进程在本地进行I/O操作。这样就减少了需要进行I/O操作的进程与创建该进程的节点之间的通讯,从而允许这些进程更加自由地在集群中的节点中进行迁移。MOSIX文件系统使所有节点都可以像访问本地文件系统一样透明地访问其它节点上的所有目录和文件。
一个低端的MOSIX配置可以包含通过以太网连接起来的多台PC机。一个较大的配置可以包含通过快速以太网连接起来的多台工作站和服务器。高端的MOSIX配置可以包含通过Gigabit-Ethernet连接起来的多台SMP 或非SMP工作站和服务器。
5 EDDIE
Eddie的主要目的是提供一些供那些进行重要任务处理的网站使用的工具,从而使这些网站能够提供持续的高级服务。Eddie创建了一个真正的分布式web服务器结构,它支持分布于不同的物理地点的web服务器。它的结构如图5-1所示。
图5-1所示的分布式服务器包含两个集群,它们分别是site 1 和site 2。每个集群都包含着一台域名服务器和若干台运行web服务器软件的实际的服务器。当用户敲入一个域名时,首先在Local DNS上对这个域名进行解析,找出与其对应的IP地址。如果Local DNS无法对这个域名进行解析,就将此域名发送到Authoritative DNS上,Authoritative DNS返回应该访问的服务器的IP地址,然后用户就可以访问指定的服务器上的内容了。
图5-1 Eddie集群结构图
典型系统小结及评测标准
在本系列的前面几篇文章中,作者为我们介绍了几个最典型的集群系统。在本篇中,作者将就典型的集群系统做一个小节,并提出对集群系统的评测标准。
1. 典型集群系统小结
典型的集群共有的特点是:
集群都是将普通PC 工作站、工作站或服务器通过某种方式连接起来构成的多机系统。连接方式可以采取通过网络适配器和网络集线器,或通过将各个机器的RS-232串口直接连接起来,还可以通过内存通道卡和内存通道集线器的方式连接各台机器。
集群系统都具有良好的可用性。即它们都能够在集群的某部分资源出故障的情况下继续向用户提供持续的服务。几乎所有的典型集群都拥有灾难恢复功能。
集群系统有良好的可扩展性。只需很少的配置工作就可以方便地向集群中加入或删除工作节点。
典型的集群系统提供了良好的可管理性。管理人员通过简单的操作就可以对集群中的工作节点或控制节点进行配置工作。
集群系统一般都提供了负载平衡功能。负载平衡包括静态负载平衡和动态负载平衡,为了最大程度地利用集群中的一切资源,集群需要具有动态负载平衡功能,它能够通过监视集群中的实际节点的负载情况并动态地进行调度的改变。
大部分集群系统都有一个主控机,它能够对集群中的机器的运行状态进行监视,而且能够根据各机器的负载轻重进行任务的调度。
2. 评测标准
检验集群系统的主要指标是可靠性(reliability)、高可用性(availability)、可维护性(serviceablity)和其它相关特点和功能。
可靠性主要指集群中的软件、节点计算机和共享存储设备的可靠和稳定程度。
高可用性(High Availabity,HA)要求当硬件系统发生故障时,运行在该系统上的数据不会丢失,而且在尽可能短的时间内恢复应用系统的正常运行,能够满足上述要求的系统称为高可用性系统。
在美国D.H.Brown Association 公司的集群系统评测报告中,将集群系统的测试项目分为11个大项,即:
1.集群内备份与恢复:考察集群对故障和条件变化的检测和响应能力。
2.集群可配置性:考察集群硬件和软件配置的灵活性。
3.节点内故障恢复:考察独立节点硬件和软件故障条件下的恢复能力。
4.集群并行数据库可存取性:考察集群对并行数据库的支持程度和效率,即集群内各节点同时访问同一数据库的能力和效率。
5.集群内高可用性可管理能力:考察集群系统提供的集群管理工具和界面的易使用性和友好性。
6.集群单一系统映像:考察集群在分布式环境中对客户端提供的单一系统的形象。完美的情况就是为了管理和使用方便,集群提供分布式集群资源就像单机系统一样。
7.灾难恢复能力:考察集群在地理数据镜像、远程数据复制、远程自动故障处理等方面的能力,即集群在火灾、洪水和地震等条件下保持正常运行和自动故障恢复的能力。
8.硬件和软件RAID功能:考察集群对硬件和软件RAID(Redudant Array of Independent Disks)的支持程度,从而保证数据的安全性和可恢复性。
9.节点内故障预防:考察节点对故障的预警能力和节点内故障的易分辨性。
10.节点故障在线维护:考察节点在不停机条件下增加或更换部件的能力以及节点内软件的可管理性(如软件升级)。
11.节点维护特征:考察集群在重启动自动配置(在部分部件失效或增加冗余部件的情况下)、远程操作和远程故障通知等方面的能力。