摘要
在之前的三篇文章中,我们介绍了集群的分布式体系结构,各大要素以及考量、设计集群的一些要点。其实仅有这些理论基础知识还远远不够。集群技术的任何一点都足以写出几本书来。重要的是,通过全面的介绍,我们能够为接下来的案例讨论打好基础
摘要
??在之前的三篇文章中,我们介绍了集群的分布式体系结构,各大要素以及考量、设计集群的一些要点。其实仅有这些理论基础知识还远远不够。集群技术的任何一点都足以写出几本书来。重要的是,通过全面的介绍,我们能够为接下来的案例讨论打好基础。
??我们将在随后的篇幅里,主要介绍广泛使用的Linux下的集群技术??IPVS(based IP Virtual Server)也叫做LVS(Linux Virtual Server)。通过对LVS的具体分析,了解LVS在体系结构设计,技术实现细节和应用中可能遇到的一些问题的详细分析讨论,逐步掌握在Linux下实现集群系统的基本知识。
LVS体系结构介绍
??Linux Virtual Server项目是由章文嵩博士主持的著名开放源码项目,一个实现“三高”系统的解决方案。LVS旨在解决高速发展的Web商务中日益凸现的问题:如何在有限资金投入的情况下,最大幅度的提高Web站点的潜在服务性能。
??LVS是一个Linux平台下的软件工具。通过LVS,你可以快捷方便的组建一个带有第四层负载均衡功能的集群系统。并且,借助第三方的工具包,还可以实现对LVS集群进行可用性支持的扩展。首先让我们来看一下LVS的体系结构示意图:
图一:LVS的三层体系结构示意图
??从上图我们看出,LVS的抽象体系结构分为三个层次。第一层是负载均衡器,这是集群的唯一入口。从客户端的角度看,集群通过这层的服务体现为一个基于IP地址的单一系统映像(SSI),整个集群共用这个虚拟地址,通过它客户端可以把整个集群看作一个独立的具有合法ip地址的主机系统,客户端的所有访问都发往这个虚拟IP地址。
??但我们也发现,如果仅有一台负载均衡器,容易造成负载均衡器成为集群的单点失效,使其成为集群中最脆弱的环节。因此,有必要提供容错机制,能够在负载均衡器失效的时候进行自动检测并平滑替换,也就是常说的HA技术。在上图的结构中,有一个以备份均衡身份运行的结点实时地监控负载均衡器的运行状态,并根据检测到的状态作出响应:报警、接管、恢复。具体细节将在HA章节讨论。
??第二层是提供实际服务的服务器群。客户端发出的服务请求经过均衡器处理以后,转交到服务池由具体的服务器响应请求并返回数据。通常我们会在服务结点池上提供Web服务、Ftp服务或者视频点播服务。由于单一系统无法应付高峰值得数据访问,那么通过多台服务器分担这些负载就比较经济可行了。
??服务器结点也有可能出现暂时失效的情况,特别是在结点提供多种服务的时候,系统的随机故障或外部环境的突变都可能造成该节点的某个服务暂时不可用。因此,由负载均衡扩展出的容错机制要能够识别这种错误,及时进行处理。同样,当错误排除后,集群能够自动识别恢复事件,把好的结点重新纳入集群继续运行。
??第三层是存储服务系统,为整个集群内部运行提供稳定、一致的文件存取服务。这一层作为LVS集群的扩展,可以为集群节点池提供单一的文件系统入口,即在每一台服务结点上都共用同一个根(/);并且自动完成不同结点访问文件系统所引发的文件锁定、负载均衡、容错、内容一致、读写事务等底层功能,对应用层提供一个透明的文件访问层。
??LVS集群属于松耦合集群系统。由于LVS在IP层上实现了SSI,因此不需要在集群中部署特殊的中间件层或者OS扩展,对服务器结点OS的兼容性比较好。对于部署LVS的内部结点而言,基本上可以兼容多数的IP应用,不需要做复杂的移植和安装工作,每个内部结点可以看成相对独立的服务器系统。即使在负载均衡器上,IPVS的核心功能也是透明的提供给用户空间,不影响本机的正常的网络应用。
LVS的IP负载均衡技术
??根本上将,LVS的实现基础是IP交换,也就是前面提到的接入协议交换技术。但LVS的体系结构具备一定的可扩展性,可以实现高性能、高可扩展性、易管理性等诸多特点,成为一个以负载均衡为核心的真正意义的集群系统。
??首先我们了解一下LVS的负载均衡模型,共有三种:地址转换(NAT)、IP隧道(IP Tunneling)和直接路由(DR)模型。
◆地址转换模式NAT
NAT结构图与NAT包处理流程
??我们看到,NAT的网络结构呈现为一种类似防火墙的私有网结构,中间的虚线表示网络隔离带。通过内部IP地址,将服务结点池同互联网隔离开来。服务结点无法和客户端直接通信,不论是请求数据还是应答数据,都需要经过负载均衡器进行IP包处理工作。
??NAT中主要的工作就是改写IP包的源、目的地址信息,使得发向VIP的请求数据经过改写后重新指向内部主机;同样内部的应答数据经过负载均衡器改写后,以VIP作为源地址发至请求者。这样的模式也称作网络地址转换(也有叫做IP地址伪装),我们在代理服务器、Iptables、透明网关等应用中,都使用到这种模型,可以说这是一件比较成熟的技术。
??由于使用NAT方式,要对进入和流出集群的网络包进行改写包头地址的工作,在负荷比较重的时候会影响整个集群的性能,负载均衡器容易成为瓶颈。
◆IP隧道模式 IPIP
IPIP结构图与IPIP包处理流程
??IPIP模式采用的是开放的网络结构,服务结点拥有合法的互联网IP地址,可以通过路由路径将应答包直接返回给客户端。因此,负载均衡器仅仅处理进入集群的请求数据包,而返回包不经过路由器。因此,这种模式称作单工连接模式(单方向连接工作模式)。负载均衡器和服务结点的连接可以是LAN,也可以在不同的网络上,只需要保证负载均衡器能够将IP包发送至服务结点即可。
??负载均衡器收到客户端的请求包后,通过IPIP协议为该IP包重新处理,形成以选定的服务结点为目的IP的新的IP包,原有的IP包数据则封装在新的IP包里。服务结点收到均衡器发来的IPIP数据后,将该包解开,根据其内的客户端地址(源地址)将处理结果直接返回给客户端,而应答包的源地址则成为集群的虚拟地址VIP。
??IPIP模式的技术在其他领域也有体现,因为对IP进行重新封装,整个过程对应用层仍然是透明的。PPTP协议就是对IP隧道协议的一种应用。不过目前IPIP仅仅在Linux系统上实现。该协议必须在Kernel中打开设备选项支持,通过tunel设备绑定VIP,服务结点在返回应答数据时,可以以VIP作为源地址构筑应答包。
◆直接路由模式 DR
DR结构图与DR包处理流程
??和IPIP模式一样,DR模式也是采用单工的连接方式,应答数据不再经过均衡器而直接返回给客户端。服务结点也必须拥有能够到达客户端的合法IP地址。而且,DR模式中,负载均衡器和服务结点必须位于同一个网段。
??负载均衡器接收到客户端请求后,选择合适的服务结点,然后改写该请求包的MAC地址部分,使之成为目的服务结点的MAC地址,再将此包广播到均衡器所在的网段。由于每个服务结点都拥有一个虚拟的网括设备(可以是dummy0或者lo:0),这些设备上绑定了和均衡器一样的VIP,只是该设备并不响应对VIP的RAP解析,不会和均衡器的Vip地址冲突。负载均衡器收到符合自身MAC的IP包后,经过处理后直接将应答数据返回给客户,而此时的源地址仍然是VIP。这样,在客户端看来,访问的和接受响应的始终是集群的VIP地址了。
综合比较
??虽然LVS支持三种负载均衡模式,但是从上面的分析我们发现,根据负载均衡器处理IP包的进出方式,LVS实际上包含了两种模型:单工处理和双工(双向连接工作模式)处理。显然,NAT地址转换模式属于双工连接处理,在这种模式下,负载均衡器不但需要处理进入集群的IP包,而且还要处理集群内部节点返回的应答IP包,一个用户从发出访问请求到接受响应,都要经过集群的核心负载均衡器的处理,因此称之为双工连接处理。而其他两种模式中,负载均衡器仅仅处理进入集群的IP请求包,而集群内部结点的响应数据则不再通过负载均衡器返回客户端,而是通过节点到客户端的路由通道直接发送到目的地。由于均衡器仅处理一次完整连接的IP请求部分,而对IP的应答数据则不处理,所以称之为单工连接模式。
??二者比较,有什么有缺点呢。要知道,在现今的Web世界中,大多数的网络请求比较小,无非是一些URL页面请求,GET或者POST表单,在么就是某些指令等等,这些数据基本上在几百到几K个字节。对这样的IP数据包进行处理是比较轻松的事。而相反,Web中的应答数据通常很大,一个普通的Web页面也要几十K,更何况返回的如果是视频、音频流了,加上日益疯狂的网络下载,即使再强劲的处理器也无法承受这样大量的IP包处理工作。
??因此,在IP负载均衡中,如果使用双工模式(NAT),不仅要对进入集群的请求做出处理(改写IP包的源、目的地址),还要对服务结点返回的大量数据做同样的工作。那么,随着集群服务节点池规模的增长,负载均衡器的处理能力很快就会达到饱和,也大大影响了LVS集群的规模可扩展性。而使用IPIP或者DR模式,负载均衡器只需要处理相对很少的IP数据包,对于大量的返回数据,都由服务节点通过路由器、交换机等设备直接返回给客户端。因此在规模可扩展性这一点