Linux虚拟服务器的结构、调度算法综述

jqh 2009-04-03

Linux虚拟服务器(Linux Virtual Server, LVS)建筑于实际的服务器集群之上,用户看不到提供服务的多台实际服务器,而只能看见一台作为负载平衡器的服务器。实际的服务器通过高速局域网或地理上分散的广域网连接。实际服务器的前端是一台负载平衡器,他将用户的请求调度到实际服务器上完成,这样看起来好像所有服务都是通过虚拟服务器来完成的。Linux虚拟服务器能够提供良好的可升级性、可靠性和可用性。用户可以透明地增加或减少一个节点,可以对实际服务器进行监测,如果发现有节点失败就重新配置系统。  

结构  

Linux Virtual Server的结构如图1所示。

Linux虚拟服务器的结构、调度算法综述

    图1:Linux虚拟服务器结构图

调度算法  

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)  

负载平衡方法  

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采用的是报文转发策略,这些策略将在以后的文章中详细描述。  

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工作站和服务器。 

相关推荐