(一)Linux虚拟服务器集群系统简介
在现有的集群技术解决方案中,Linux虚拟服务器集群系统得到了最为广泛的应用。该集群系统的常用硬件连接结构与一般的集群系统的连接结构差不多。
Linux虚拟服务器集群系统是由多台具体服务器,以及共享数据库与前置的负载均衡调度器通过一定的方式连接而成的整体。这个整体连接到网络中,并在为互联网上的客户服务的过程中相互配合,发挥着各自的功能,共同承担起用户所交予的任务。Linux虚拟服务器集群系统的内部组成结构对于用户来说是透明的,用户只需要知道该集群系统前端的负载均衡调度器所使用的IP地址就可以连接到集群系统。通过前置的负载均衡调度器,用户的连接请求被按照一定的比例在后台的具体服务器之间进行分配。而这个转发动作由集群系统自动完成,用户并不知道具体是哪台服务器在为其提供服务,甚至不知道他的连接请求被转发到了后台的服务器之上。Linux虚拟服务器集群系统的这种设计极大地方便了系统管理员对系统进行维护和扩展等工作。
Linux虚拟服务器集群系统具体由三部分组成,下面分别介绍这三部分具体所发挥的作用。
1.负载均衡调度器节点部分
负载均衡调度器处在网络用户和具体服务器之间,其主要作用是将收到的用户连接请求合理地、均匀地在集群系统的后台具体服务器之间进行分配。在负载均衡调度器上会预先由管理员配置好相关的算法,负载均衡调度器就是按照这些算法的计算结果来选择具体服务器以进行用户的连接请求分配的。
2.具体服务器节点部分
具体服务器节点部分是由多台协同工作的计算机组成的,起着真正接收用户连接、为用户提供服务的作用。Linux虚拟服务器集群系统对具体服务器所安装的操作系统并没有什么特殊的要求,使用Linux或Windows系统配置成的具体服务器都是被允 许的。
3.后台数据库服务器节点部分
后台数据库节点部分是Linux虚拟服务器集群系统共享数据的存储地方,它所起的作用正如单台服务器中的存储系统。这种设计方式避免了多台具有相同功能的具体服务器使用各自的存储系统来分配存储两份相同的数据,节约了系统的硬件配置成本,还能加快互联网用户常用数据的访问速度。
(二)Linux虚拟服务器集群系统软件核心
一般的Linux操作系统的内核代码就包含了Linux虚拟服务器集群功能的内核模块,名字为IPVS,即IP virtual server,也就是Linux虚拟服务器集群系统的软件核心。一旦在安装Linux操作系统时有指定要安装该内核模块,那么Linux系统在启动时就会连同该内核模块一起加载到所在的计算机上,就可以直接将该计算机配置为Linux虚拟服务器系统的负载均衡调度器。
虽然Linux虚拟服务器集群系统还处在不断的发展之中,但其软件核心IPVS的整体架构却始终保持不变。核心IPVS具体由四个基本部分组成,即IP网络数据包处理模块、负载均衡调度算法模块和性能配置管理软件模块三个功能模块以及常用的一些链表数据结构。核心IPVS也处理集群系统后台具体服务器所发送的相应数据包,在得到相应的处理后,将向网络目的用户端转发。这样,Linux虚拟服务器集群系统软件核心IPVS就实现了对互联网用户与具体服务器之间的通信数据进行接收、判断以及转发的 功能。
1.网络数据包处理模块
由于Linux虚拟服务器集群系统是在网络层对数据进行处理,所以网络数据包处理模块也经常被称为IP数据包处理模块,只是前者的名称比较正式。
我们知道,互联网用户发送给Linux虚拟服务器集群系统的数据包,以及具体服务器的任何响应数据包,都必须经过负载均衡调度器,让负载均衡调度器进行转发,而负载均衡调度器就是通过核心IPVS的网络数据包处理模块来完成这项任务的。当然,对于不合法的数据包,网络数据包处理模块在核实后也会立即将其丢弃。
用户连接请求数据包到达负载均衡调度器与广域网连接的网卡Eth0上,经过一定的处理流程后,就会进入网络数据包处理模块的PRE_ROUTING部分。在网络数据包处理模块中,经过一系列的处理之后,该数据包会被转发到负载均衡器用于与具体服务器连接的第二块网卡Eth1之上,以便该数据包被发送到集群系统后台的具体服务器。下面将具体说明互联网用户数据包在网络处理模块中可能经过的各个部分的主要功能。
PRE_ROUTING实现的主要功能是初步处理刚发送到负载均衡调度器上的因特网用户数据包。其主要的处理动作是,将这些收到的用户数据包的源IP地址更改为本负载均衡调度器与后台的具体服务器相连接的IP地址。
LOCAL_IN实现的主要功能是处理以本负载均衡调度器为目的的网络数据包。进入网络数据包处理模块的数据包,如果是以本负载均衡调度器为直接目的地,则该数据包会进入 LOCAL_IN之中,否则该数据包应该进入FORWARD。网络数据包在LOCAL_IN做初步的处理,主要是对合法性以及该数据包的目的进程的检查。如果该数据包通过了这些检查,那么接下来该数据包就会被转入所在系统的内核以做进一步的处理或直接转发给其目的进程。
FORWARD实现的主要功能是负责转发网络数据包。从前面可知,负载均衡调度器的主要任务是根据事先配置好的负载均衡调度算法,从集群系统的后台中选择一台其认为合适的具体服务器,并将所接收到的数据包转发到该具体服务器上。而FORWARD就是真正执行这一转发动作的核心程序。
POST_ROUTING实现的主要功能刚好与PRE_ROUTING的功能相对应,即对由FORWARD部分转发的网络数据包进行后处理。主要的处理动作是将对应的网络数据包的目的IP地址转换为其所要被转发的具体服务器的内部局域网IP地址。
2.负载均衡调度算法模块
负载均衡调度算法模块包含了Linux虚拟服务器集群系统内部已有的负载均衡算法的实现代码,并且还包含了管理和调用这些算法的函数、程序等的实现代码。在该集群系统中,主要实现了四种负载均衡算法,即简单轮询负载均衡算法、加权轮询负载均衡算法、简单最小连接算法、加权最小连接算法。这四种算法与其对应的实现代码所在文件的对应关系如下:ip_vs_rr.c文件实现了简单的轮询负载均衡算法;ip_vs_wrr.c文件实现了加权轮询负载均衡算法;ip_vs_lc.c文件实现了简单最小连接算法;ip_vs_wcl.c文件实现了加权最小连接算法。这四个算法的具体设计思想和实现流程分别介绍如下。(www.xing528.com)
(1)简单轮询负载均衡算法
简单轮询负载均衡算法,就是按照依次、轮转的方式把网络用户连接请求分发到Linux虚拟服务器集群系统后台的选定的具体服务器之上。轮询负载均衡算法的原理比较简单,实现起来也很方便,并且不必对后台具体服务器的实时状态做出任何的记录或判断。所以,轮询负载均衡算法是一种无状态的负载均衡算法。轮询负载均衡算法能够进行正确的负载均衡算法的前提是,后台中的具体服务器具有相同的处理能力,而正是这个前提制约了该负载均衡算法的应用范围。所以,该算法不能很好地实现运行中的大部分集群系统的负载均衡。
(2)加权轮询负载均衡算法
加权轮询负载均衡算法,指负载均衡调度器就以顺序的方式并依据这些具体服务器在初始时被赋予的权重值的比例关系来进行用户连接请求的分配。在此之中,权重值代表各个具体服务器的实际性能大小。权重值越大,代表该具体服务器的综合性能越好;反之,则代表对应的具体服务器的性能越差。因此,该算法考虑到了集群系统中后台具体服务器的性能的不同,并且对于那些后台具体服务器性能互不相同的集群系统,该算法的负载均衡效果要好于简单轮询负载均衡算法。
但是,加权负载均衡算法依旧没有考虑到实际运行中Linux虚拟服务器集群系统的实际负载情况。比如,由于各个不同的用户连接所要求的任务的运行时间各不相同,导致运行一段时间后的集群系统后台的各台具体服务器的实际运行的性能状况已与初始状态有明显不同。所以,该算法还不能很好地实现Linux虚拟服务器集群系统的负载均衡。
(3)最小连接负载均衡算法
最小连接负载均衡算法将Linux虚拟服务器集群系统中后台各台具体服务器运行的用户连接数作为一个重要的负载参考因素,并在系统的运行过程中将所接收到的用户连接请求,总是发送给后台正在运行的用户连接进程数最少的那台具体服务器。
由于最小连接负载均衡算法考虑到了系统中后台具体服务器的实时运行的负载状况,因此该算法属于一种动态负载均衡算法。对于那些具体服务器的性能差异不大的集群系统,并且在运行过程中负载较轻的集群系统来说,最小连接负载均衡算法仍然可以很好地将用户的连接请求较为均匀地分配到后台的具体服务器之上,并很好地实现这种情形下的Linux虚拟服务器集群系统的负载均衡。
最小连接负载均衡算法的缺陷也很明显,即该算法虽然考虑到各个具体服务器的实时负载状况,但没有考虑到各台具体服务器性能可能会有很大不同。因此,该算法也可能会导致系统中各台具体服务器的负载不平衡。
(4)加权最小连接调度算法
加权最小连接负载均衡算法为集群系统中后台各台具体服务器分配一个权重值,以对最小连接算法进行改进。如同前面的加权轮询负载均衡算法,权重值同样代表各台具体服务器的实际性能大小。该算法的基本思想是,将负载均衡调度器所接收到的用户连接请求总是分配给集群系统后台中实时运行的连接数除去其权重值所得数值最小的那台具体服务器。该算法不仅考虑到了系统后台具体服务器的实时负载状况,还同时考虑到了各个具体服务器的性能可能存在的差异。所以,该算法的性能较之前面所提出的几种算法都有所改善。
虽然加权最小连接调度算法考虑到了集群系统中后台具体服务器的实时负载水平的不同以及具体服务器性能水平的不同这两个重要的因素,但是仅仅以连接数来代表对应的具体服务器的负载程度,并以一个权重值来代表具体服务器的性能水平,明显是将问题过于简单化了。因为这种简单的解决方法没有考虑到一些实际的情况,简言之,不同的用户连接所要服务器执行的任务所占用计算机资源或是所需计算量是千差万别的。比如说,同一个进程或是相同的几个用户连接在某台具体计算机上所生成的进程,可能很顺畅地就能运行起来,但要是在性能较差的具体服务器上,可能就会直接导致该台具体服务器的崩溃。因此,加权最小连接负载均衡算法确实在算法的设计时考虑到了多方面的因素,但是所使用的解决方法令人并不十分满意。对于负载较重或者是负载水平变化较大的Linux虚拟服务器集群系统,加权最小连接算法还是不能很好地实现具体服务器间的负载平衡。
3.重要的数据结构
核心IPVS中所用到的数据结构有很多,主要的实现文件是ip_vs.h。这里重点研究三个重要的数据结构,它们分别是ip_vs_service、ip_vs_dest和ip_vs_rule_user。
(1)ip_vs_service数据结构
ip_vs_service链表数据结构的每一元素代表一个Linux虚拟服务器集群系统的虚拟服务对象,经常也被认为是用户在网络上所能见到的负载均衡调度器。在这个数据结构中,包含了Linux虚拟服务器集群系统虚拟服务对象所使用的虚拟IP地址、端口号、协议族、负载均衡算法,以及负载均衡调度器所连接的具体服务器信息。
(2)ip_vs_dest数据结构
ip_vs_dest链表数据结构的每一个元素代表一个集群系统后台的一台具体服务器。在每一个元素里面包含了这台具体服务器所使用的协议族、IP地址、端口号,并且还记录了这台服务器实时运行的一些相关信息,如连接数等。
(3)ip_vs_rule_user数据结构
ip_vs_rule_user链表数据结构是Linux虚拟服务器集群系统专用配置工具Ipvsadm用于与核心IPVS进行通信的数据结构。如果用户编写的任何PCW负载均衡调度算法或者是PCW负载均衡调度算法想要与核心IPVS进行通信,也必须通过ip_vs_rule_user数据结构。
需要注意的是,这些数据结构都是链表结构。它们是Linux虚拟服务器集群系统软件核心IPVS三个重要的数据结构,尤其是在调度用户连接请求的过程中,这三个链表数据结构会经常被调用到。
以上就是组成Linux虚拟服务器集群系统软件核心IPVS的组成部分,它们相互配合,实现了集群系统所应有的功能。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。