资源描述
Error! Reference source not found.
关键词:
摘 要:
对LB开源代码haporxy、nginx、LVS、Squid、SLB、DNS动态解析,以及部分商业负载均衡解决方案等的分析
缩略语清单:
缩略语
英文全名
中文解释
LB
Loading Balance
负载均衡
LVS
Linux Virtual Server
Linux虚拟服务器
LDAP
Light-weight Directory Access Protocol
轻量级目录访问协议,是目录服务在TCP/IP上的实现
NCSA
National Center for Supercomputer Applications
国家超级计算机应用中心
AS
autonomous system
BGP
border gateway protocol;
边界网关协议: 在自治系统之间交换选路信息的协议, 也可以用于自治系统内部
A10
1 Introduction 简介
1.1 目的
对LB开源代码haporxy、nginx、LVS、Squid、SLB、DNS动态解析,以及部分商业负载均衡解决方案等的分析,为应用加速项目设计提供思路,避免"闭门造车"。
1.2 LVS
LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统。本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一。目前有三种IP负载均衡技术(VS/NAT、VS/TUN和VS/DR),八种调度算法(rr,wrr,lc,wlc,lblc,lblcr,dh,sh)。章文嵩博士目前工作于中国国家并行与分布式处理重点实验室,主要从事集群技术、操作系统、对象存储与数据库的研究。
1.3 KeepAlived
keepalived是一个类似于layer3, 4 & 5交换机制的软件,也就是我们平时说的第3层、第4层和第5层交换。Keepalived的作用是检测web服务器的状态,如果有一台web服务器死机,或工作出现故障,Keepalived将检测到,并将有故障的web服务器从系统中剔除,当web服务器工作正常后Keepalived自动将web服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的web服务器。
1.4 HAPorxy
参考网页:
HAProxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。HAProxy特别适用于那些负载特大的web站点, 这些站点通常又需要会话保持或七层处理。HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中, 同时可以保护你的web服务器不被暴露到网络上。
关键词:
(1)基于TCP和HTTP应用代理的负载均衡
(2)特别适用于web服务器负载均衡
1.5 Nginx
参考网页:
Nginx(发音同 engine x)是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。由俄罗斯的程序设计师Igor Sysoev所开发,最初供俄国大型的入口网站及搜寻引擎Rambler(俄文:Рамблер)使用。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页伺服器中表现较好.目前中国大陆使用nginx网站用户有:新浪、网易、 腾讯,另外知名的微网志Plurk也使用nginx。
作为邮件代理服务器:Nginx 同时也是一个非常优秀的邮件代理服务器(最早开发这个产品的目的之一也是作为邮件代理服务器),Last.fm 描述了成功并且美妙的使用经验。、
Nginx作为负载均衡服务器:Nginx 既可以在内部直接支持 Rails 和 PHP 程序对外进行服务,也可以支持作为 HTTP代理服务器对外进行服务。Nginx采用C进行编写,不论是系统资源开销还是CPU使用效率都比 Perlbal 要好很多。
关键词:
(1)轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。
(2)占有内存少,并发能力强。
(3)可为负载均衡服务器
(4)Nginx是Apache服务器不错的替代品
1.6 Squid
参考网页:
Squid cache(简称为Squid)是一个流行的自由软件(GNU通用公共许可证)的代理服务器和Web缓存服务器。Squid有广泛的用途,从作为网页服务器的前置cache服务器缓存相关请求来提高Web服务器的速度,到为一组人共享网络资源而缓存万维网,域名系统和其他网络搜索,到通过过滤流量帮助网络安全,到局域网通过代理上网。Squid主要设计用于在Linux一类系统运行。
关键词:
(1)Web缓存服务器。
(2)缓存万维网,域名系统和其他网络搜索。
(3)代理上网
1.7 Pen
参考网页:
Pen 是一个简单的负载平衡器,支持基础协议的TCP如HTTP或SMTP 。它允许多个服务器上显示为一个外部和自动检测服务器上,以减少现有服务器和客户之间的开销。这使高可用性和可扩展的性能。
该负载平衡算法跟踪客户,并尝试将它们发送回服务器,他们的最后一次访问。客户端表有若干插槽(默认2048 ,设置通过命令行参数) 。当表已满,则最近使用的人会被处理掉,以腾出空间给新的。
这是一个简单的优势轮询算法,该算法发出了一个客户端连接到不同的服务器反复。这样做的时候休息,应用,维护国家之间的连接的服务器,其中包括最先进的Web应用程序。
当 Pen 检测到服务器不可用,它会扫描再从该服务器后,最近使用过的一个。这样,我们得到的负载平衡和“公平”故障是免费的。
关键词:
(1)简单的负载平衡器。
(2)简单的优势轮询算法。
1.8 mod_backhand
参考网页:
mod_backhand 是一个Apache 的负载平衡模块 。它定义了每个请求的HTTP重定向在一个异构的Apache服务器群集。每个请求的处理,并贯穿了一套“候选人的职能” ,以确定哪些服务器是最适合的回应。请求然后代理到该服务器。设施已到位,让你写您自己的动态加载决策算法。一切有关的要求和当前可用的资源可用于决策过程
关键词:
(1)HTTP重定向功能。
(2)动态加载决策算法。
1.9 Galera Load Balancer
参考网页:
GLB (Galera Load Balancer) 是一个与 Pen 类似的 TCP 负载均衡器,它功能没有 Pen 那么强大,其主要的目的是做一个非常快速的 TCP 协议代理。通过利用多核CPU的优势,GLB 的速度有显著的提升。
关键词:
(1)快速的TCP协议代理。
(2)利用多核CPU的优势。
1.10 DNS动态解析软件Bind
BIND(Berkeley Internet Name Daemon)是现今互联网上最常使用的DNS服务器软件,使用BIND作为服务器软件的DNS服务器约占所有DNS服务器的九成[2]。BIND现在由互联网系统协会(Internet Systems Consortium)负责开发与维护。
BIND的历史:20世纪80年代,柏克莱加州大学计算机系统研究小组的四个研究生Douglas B Terry、Mark Painter、David W.Riggle和周松年(Songnian Zhou)一同编写了BIND的第一个版本,并随4.3BSD发布。
2 LVS分析
2.1 LVS介绍
2.1.1 LVS简介
参考网页:
http://www.LinuxVirtualServer.org/
http://www.linux-vs.org/
http://zh.linuxvirtualserver.org/
LVS是Linux Virtual Server的简写,意即Linux虚拟服务器,是一个虚拟的服务器集群系统。本项目在1998年5月由章文嵩博士成立,是中国国内最早出现的自由软件项目之一。目前有三种IP负载均衡技术(VS/NAT、VS/TUN和VS/DR),八种调度算法(rr,wrr,lc,wlc,lblc,lblcr,dh,sh)。章文嵩博士目前工作于中国国家并行与分布式处理重点实验室,主要从事集群技术、操作系统、对象存储与数据库的研究。
关键词:
(1) 服务器集群系统。
(2) 三种IP负载均衡技术(VS/NAT、VS/TUN和VS/DR)。
(3) 八种调度算法(rr,wrr,lc,wlc,lblc,lblcr,dh,sh)。
(4) 基于IP层负载均衡犯技术
(5) 基于内容请求分发技术
(6) 将一组服务器构成一个实现可伸缩的、高可用网络服务的虚拟服务器
(7) 负载调度器,负载调度技术。
2.1.2 LVS的架构
目前,LVS项目已提供了一个实现可伸缩网络服务的Linux Virtual Server框架,如图所示。在LVS框架中,提供了含有三种IP负载均衡技术的IP虚拟服务器软件IPVS、基于内容请求分发的内核Layer-7交 换机KTCPVS和集群管理软件。可以利用LVS框架实现高可伸缩的、高可用的Web、Cache、Mail和Media等网络服务;在此基础上,可以开 发支持庞大用户数的、高可伸缩的、高可用的电子商务应用。
2.1.2.1 IP虚拟服务器软件IPVS
1. 三种IP负载均衡技术
在调度器的实现技术中,IP负载均衡技术是效率最高的。在已有的IP负载均衡技术中有通过网络地址转换(Network Address Translation)将一组服务器构成一个高性能的、高可用的虚拟服务器,我们称之为VS/NAT技术(Virtual Server via Network Address Translation),大多数商品化的IP负载均衡调度器产品都是使用此方法,如Cisco的LocalDirector、F5的Big/IP和 Alteon的ACEDirector。在分析VS/NAT的缺点和网络服务的非对称性的基础上,我们提出通过IP隧道实现虚拟服务器的方法VS/TUN(Virtual Server via IP Tunneling),和通过直接路由实现虚拟服务器的方法VS/DR(Virtual Server via Direct Routing),它们可以极大地提高系统的伸缩性。所以,IPVS软件实现了这三种IP负载均衡技术:
[1] Virtual Server via Network Address Translation(VS/NAT)
通过网络地址转换,调度器重写请求报文的目标地址,根据预设的调度算法,将请求分派给后端的真实服务器;真实服务器的响应报文通过调度器时,报文的源地址被重写,再返回给客户,完成整个负载调度过程。
[2] Virtual Server via IP Tunneling(VS/TUN)
采用NAT技术时,由于请求和响应报文都必须经过调度器地址重写,当客户请求越来越多时,调度器的处理能力将成为瓶颈。为了解决这个问题,调度器把请求报 文通过IP隧道转发至真实服务器,而真实服务器将响应直接返回给客户,所以调度器只处理请求报文。由于一般网络服务应答比请求报文大许多,采用 VS/TUN技术后,集群系统的最大吞吐量可以提高10倍。
[3] Virtual Server via Direct Routing(VS/DR)
VS/DR通过改写请求报文的MAC地址,将请求发送到真实服务器,而真实服务器将响应直接返回给客户。同VS/TUN技术一样,VS/DR技术可极大地 提高集群系统的伸缩性。这种方法没有IP隧道的开销,对集群中的真实服务器也没有必须支持IP隧道协议的要求,但是要求调度器与真实服务器都有一块网卡连 在同一物理网段上。
2. 8种IP负载均衡技术
rr,wrr,lc,wlc,lblc,lblcr,dh,sh
[1] 轮叫(Round Robin)--rr
调度器通过"轮叫"调度算法将外部请求按顺序轮流分配到集群中的真实服务器上,它均等地对待每一台服务器,而不管服务器上实际的连接数和系统负载。
[2] 加权轮叫(Weighted Round Robin)--wrr
调度器通过"加权轮叫"调度算法根据真实服务器的不同处理能力来调度访问请求。这样可以保证处理能力强的服务器处理更多的访问流量。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。
[3] 最少链接(Least Connections)--lc
调度器通过"最少连接"调度算法动态地将网络请求调度到已建立的链接数最少的服务器上。如果集群系统的真实服务器具有相近的系统性能,采用"最小连接"调度算法可以较好地均衡负载。
[4] 加权最少链接(Weighted Least Connections)--wlc
在集群系统中的服务器性能差异较大的情况下,调度器采用"加权最少链接"调度算法优化负载均衡性能,具有较高权值的服务器将承受较大比例的活动连接负载。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。
[5] 基于局部性的最少链接(Locality-Based Least Connections)--lblc
"基于局部性的最少链接" 调度算法是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。该算法根据请求的目标IP地址找出该目标IP地址最近使用的服务器,若该服务器 是可用的且没有超载,将请求发送到该服务器;若服务器不存在,或者该服务器超载且有服务器处于一半的工作负载,则用"最少链接"的原则选出一个可用的服务 器,将请求发送到该服务器。
[6] 带复制的基于局部性最少链接(Locality-Based Least Connections with Replication)
"带复制的基于局部性最少链接"调度算法也是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。它与LBLC算法的不同之处是它要维护从一个 目标IP地址到一组服务器的映射,而LBLC算法维护从一个目标IP地址到一台服务器的映射。该算法根据请求的目标IP地址找出该目标IP地址对应的服务 器组,按"最小连接"原则从服务器组中选出一台服务器,若服务器没有超载,将请求发送到该服务器,若服务器超载;则按"最小连接"原则从这个集群中选出一 台服务器,将该服务器加入到服务器组中,将请求发送到该服务器。同时,当该服务器组有一段时间没有被修改,将最忙的服务器从服务器组中删除,以降低复制的 程度。
[7] 目标地址散列(Destination Hashing)--dh
"目标地址散列"调度算法根据请求的目标IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。
[8] 源地址散列(Source Hashing)--sh
"源地址散列"调度算法根据请求的源IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。
3. 其他技术
[1] 调度器
它是整个集群对外面的前端机,负责将客户的请求发送到一组服务器上执行,而客户认为服务是来自一个IP地址(我们可称之为虚拟IP地址)上的。
调度器具有很好的吞吐率,将请求均衡地转移到不同的服务器上执行,且调度器自动屏蔽掉服 务器的故障,从而将一组服务器构成一个高性能的、高可用的虚拟服务器。整个服务器集群的结构对客户是透明的,而且无需修改客户端和服务器端的程序。
调度器是服务器集群系统的唯一入口点(Single Entry Point),它可以采用IP负载均衡技术、基于内容请求分发技术或者两者相结合。在IP负载均衡技术中,需要服务器池拥有相同的内容提供相同的服务。当 客户请求到达时,调度器只根据服务器负载情况和设定的调度算法从服务器池中选出一个服务器,将该请求转发到选出的服务器,并记录这个调度;当这个请求的其 他报文到达,也会被转发到前面选出的服务器。在基于内容请求分发技术中,服务器可以提供不同的服务,当客户请求到达时,调度器可根据请求的内容选择服务器 执行请求。因为所有的操作都是在Linux操作系统核心空间中将完成的,它的调度开销很小,所以它具有很高的吞吐率。
[2] 虚拟服务
虚拟服务的设置数目没有限制,每个虚拟服务有自己的服务器集。它支持持久的虚拟服务(如HTTP Cookie和HTTPS等需要该功能的支持),并提供详尽的统计数据,如连接的处理速率和报文的流量等。
[3] 服务器池
服务器池(server pool),是一组真正执行客户请求的服务器,执行的服务有WEB、MAIL、FTP和DNS等。
服务器池的结点数目是可变的。当整个系统收到的负载超过目前所有结点的处理能力时,可以在服务器池中增加服务器来满足不断增长的请求负载。对大多数 网络服务来说,请求间不存在很强的相关性,请求可以在不同的结点上并行执行,所以整个系统的性能基本上可以随着服务器池的结点数目增加而线性增长
[4] 共享存储
共享存储(shared storage),它为服务器池提供一个共享的存储区,这样很容易使得服务器池拥有相同的内容,提供相同的服务。
共享存储通常是数据库、网络文件系统或者分布式文件系统。服务器结点需要动态更新的数据一般存储在数据库系统中,同时数据库会保证并发访问时数据的一致性。静态的数据可以存储在网络文件系统(如NFS/CIFS)中,但网络文件系统的伸缩能力有限,一般来说,NFS/CIFS服务器只能 支持3~6个繁忙的服务器结点。
对于规模较大的集群系统,可以考虑用分布式文件系统,如AFS[1]、GFS[2.3]、Coda[4]和 Intermezzo[5]等。分布式文件系统可为各服务器提供共享的存储区,它们访问分布式文件系统就像访问本地文件系统一样,同时分布式文件系统可提供良好的伸缩性和可用性。此外,当不同服务器上的应用程序同时读写访问分布式文件系统上同一资源时,应用程序的访问冲突需要消解才能使得资源处于一致状 态。这需要一个分布式锁管理器(Distributed Lock Manager),它可能是分布式文件系统内部提供的,也可能是外部的。开发者在写应用程序时,可以使用分布式锁管理器来保证应用程序在不同结点上并发访 问的一致性。
关键词:网络文件系统、分布式文件系统、数据的一致性、分布式锁管理器。
存储共享相关技术:
存储区域网(Storage Area Networks)技术解决了集群的每个结点可以直接连接/共享一个庞大的硬盘阵列。
硬件厂商也提供多种硬盘共享技术,如光纤通道(Fiber Channel)、共享SCSI(Shared SCSI)。
InfiniBand:绝大多数硬件厂商支持,是一个通用的高性能I/O规范,使得存储区域网中以更低的延时传输I/O消息和集群通讯消息,并且提供很好的伸缩性。
[5] 相关ICMP消息处理
在IPVS内部实现上,采用了高效的Hash函数和垃圾回收机制,能正确处理所调度报文相 关的ICMP消息(有些商品化的系统反而不能)。
[6] 大规模拒绝服务
针对大规模拒绝服务(Deny of Service)攻击,实现了三种防卫策略。
2.1.2.2 内核Layer-7交换机KTCPVS
1. IPVS根据4层信息进行调度(选择服务器)。
2. IPVS无法检根据请求的内容进行调度(选择服务器)。
3. 在内核中实现Layer-7交换,称之为KTCPVS(Kernel TCP Virtual Server)。
4. 需要基于内容进行调度(Content-based Schedule)。
5. 根据局部性原理,提高单台服务器的Cache命中率
在基于IP负载调度技术中,当一个TCP连接的初始SYN报文到达时,调度器就选择一台服务器,将报文转发给它。此后通过查发报文的IP和TCP报文头地 址,保证此连接的后继报文被转发到该服务器。这样,IPVS无法检查到请求的内容再选择服务器,这就要求后端服务器组提供相同的服务,不管请求被发送到哪 一台服务器,返回结果都是一样的。但是,在有些应用中后端服务器功能不一,有的提供HTML文档,有的提供图片,有的提供CGI,这就需要基于内容的调度 (Content-Based Scheduling)。
由于用户空间TCP Gateway的开销太大,我们提出在操作系统的内核中实现Layer-7交换方法,来避免用户空间与核心空间的切换和内存复制的开销。在Linux操作系统的内核中,我们实现了Layer-7交换,称之为KTCPVS(Kernel TCP Virtual Server)。目前,KTCPVS已经能对HTTP请求进行基于内容的调度,但它还不很成熟,在其调度算法和各种协议的功能支持等方面,有大量的工作需要做。
虽然应用层交换处理复杂,它的伸缩性有限,但应用层交换带来以下好处:
相同页面的请求被发送到同一服务器,可以提高单台服务器的Cache命中率。
一些研究[5]表明WEB访问流中存在局部性。Layer-7交换可以充分利用访问的局部性,将相同类型的请求发送到同一台服务器,使得每台服务器收到的请求具有更好的相似性,可进一步提高单台服务器的Cache命中率。
后端服务器可运行不同类型的服务,如文档服务,图片服务,CGI服务和数据库服务等
2.1.2.3 集群管理软件
有相关的集群管理软件对资源进行监测,能及时将故障屏蔽,实现系统的高可用性。主、从调度器能周期性地进行状态同步,从而实现更高的可用性。
2.1.2.4 通用网络服务
可以利用LVS框架实现高可伸缩的、高可用的Web、Cache、Mail和Media等网络服务。
2.1.2.5 电子商务
在LVS框架的基础上,可以开 发支持庞大用户数的、高可伸缩的、高可用的电子商务应用。
2.1.3 LVS的高可靠性
集群系统的特点是它在软硬件上都有冗余。系统的高可用性可以通过检测节点或服务进程故障和正确地重置系统来实现,使得系统收到的请求能被存活的结点处理。
2.1.3.1 服务器失效管理
服务器失效管理【服务器健康探测】
通常,我们在调度器上有资源监测进程来时刻监视各个服务器结点的健康状况。当服务器对ICMP ping不可达时或者探测她的网络服务在指定的时间没有响应时,资源监测进程通知操作系统内核将该服务器从调度列表中删除或者失效。这样,新的服务请求就 不会被调度到坏的结点。资源监测进程能通过电子邮件或传呼机向管理员报告故障。一旦监测进程到服务器恢复工作,通知调度器将其加入调度列表进行调度。另外,通过系统提供的管理程序,管理员可发命令随时可以将新机器加入服务来提高系统的处理性能,也可以将已有的服务器切出服务,以便对服务器进行系统维护。
2.1.3.2 调度器失效管理
调度器失效管理【Heartbeat双机热备】
现在前端的调度器有可能成为系统的单一失效点(Single Point of Failure)。一般来说,调度器的可靠性较高,因为调度器上运行的程序较少而且大部分程序早已经遍历过,但我们不能排除硬件老化、网络线路或者人为误 操作等主要故障。为了避免调度器失效而导致整个系统不能工作,我们需要设立一个从调度器作为主调度器的备份。两个心跳(Heartbeat)进程[6]分别在主、从调度器上运行,它们通过串口线和UDP等心跳线来相互定时地汇报各自的健康状况。当从调度器不能听得主调度器的心跳时,从调度器通过ARP欺骗 (Gratuitous ARP)来接管集群对外的Virtual IP Address,同时接管主调度器的工作来提供负载调度服务。当主调度器恢复时,这里有两种方法,一是主调度器自动变成从调度器,二是从调度器释放Virtual IP Address,主调度器收回Virtual IP Address并提供负载调度服务。这里,多条心跳线可以使得因心跳线故障导致误判(即从调度器认为主调度器已经失效,其实主调度器还在正常工作)的概论 降到最低。
通常,当主调度器失效时,主调度器上所有已建立连接的状态信息将丢失,已有的连接会中断。客户需要向重新连接,从调度器才会将新连接调 度到各个服务器上,这对客户会造成一定的不便。为此,IPVS调度器在Linux 内核中实现一种高效状态同步机制,将主调度器的状态信息及时地同步到从调度器。当从调度器接管时,绝大部分已建立的连接会持续下去。
2.1.4 LVS的应用场景
2.1.4.1 WEB服务器负载均衡
1. 三层结构
第一层是负载调度器,一般采用IP负载均衡技术[未限定负载均衡方式];
第二层是Web服务器池,每个结点上可以分别运行HTTP服务或HTTPS服务、或两者都运行;
第三层是共享存储,可以是数据库,网络文件系统或分布 式文件系统,或三者混合;
2. 数据存储:数据库、网络文件系统或分布式文件系统
动态页面,其动态数据存储在数据库中,如PHP、JSP和ASP等。
静态页面,可以存储在网络文件系统或分布式文件系统中,如HTML文档和图片等。
其中的Webmaster可以看到统一的文档存储空间,维护和更新页面比较方便,对共享存储中页面的修改对所 有的服务器都有效。
3. 保持性需求
使用HTTP Cookie后连接必须被发送到同一Web服务器
有些Web服务可能用到HTTP Cookie,它是将数据存储在客户的浏览器来追踪和标识客户的机制。使用HTTP Cookie后,来同一客户的不同连接存在相关性,这些连接必须被发送到同一Web服务器。
SSL Key的生命周期内连接必须被发送到同一Web服务器
一些Web服务使用安全的HTTPS协议,它是HTTP协议加 SSL(Secure Socket Layer)协议。另有些Web服务可能使用安全的HTTPS协议,它是HTTP协议加SSL协议。当客户访问HTTPS服务(HTTPS的缺省端口为 443)时,会先建立一个SSL连接,来交换对称公钥加密的证书并协商一个SSL Key,来加密以后的会话。在SSL Key的生命周期内,后续的所有HTTPS连接都使用这个SSL Key,所以同一客户的不同HTTPS连接也存在相关性。
针对这些需要,IPVS调度器提供了持久服务的功能,它可以使得在设定的时间内,来自同一IP地 址的不同连接会被发送到集群中同一个服务器结点,可以很好地解决客户连接的相关性问题。
2.1.4.2 多媒体服务器负载均衡
1. 三层结构
第一层是负载调度器,一般采用IP负载均衡技术;直接路由VS/DR方法。
第二层是 Web服务器池,在每个结点上可以运行相应的媒体服务。
第三层是共享存储,通过网络文件系统/分布式文件系统存储媒体节目。
2. 保持性需求
同一客户的媒体TCP和UDP连接必须被发送到同一媒体服务器
流媒体服务都会使用一个TCP连接(如RTSP协议:Real-Time Streaming Protocol)进行带宽的协商和流速的控制,通过UDP将流数据返回客户。这里,IPVS调度器提供功能将TCP和UDP集中考虑,保证来自同一客户 的媒体TCP和UDP连接会被转发到集群中同一台媒体服务器,使得媒体服务准确无误地进行。
2.1.4.3 Cache服务器负载均衡
1. 两层结构
第一层是负载调度器,一般采用IP负载均衡技术;使用IP隧道方法。
第二层是Cache服务器池,一般Cache服务器放置在接近主干Internet连接处,它们可以分布在不同的网络中。
2. IP隧道方法
IPVS负载调度器一般使用IP隧道方法(即VS/TUN方法,将在以后文章中详细叙述),来架构Cache集群系统,因为Cache服务器可能被 放置不同的地方(例如在接近主干Internet连接处),而调度器与Cache服务器池可能不在同一个物理网络中。采用VS/TUN方法,调度器只调度Web Cache请求,而Cache服务器将响应数据直接返回给客户。在请求对象不能在本地命中的情况下,Cache服务器要向源服务器发请求,将结果取回,最 后将结果返回给客户;若采用NAT技术的商品化调度器,需要四次进出调度器,完成这个请求。而用VS/TUN方法(或者VS/DR方法),调度器只调度一 次请求,其他三次都由Cache服务器直接访问Internet完成。所以,这种方法对Cache集群系统特别有效。
3. Cache服务器
Cache服务器采用本地硬盘来存储可缓存的对象,因为存储可缓存的对象是写操作,且占有一定的比例,通过本地硬盘可以提高I/O的访 问速度。Cache服务器间有专用的多播通道(Multicast Channel),通过ICP协议(Internet Cache Protocol)来交互信息。当一台Cache服务器在本地硬盘中未命中当前请求时,它可以通过ICP查询其他Cache服务器是否有请求对象的副本, 若存在,则从邻近的Cache服务器取该对象的副本,这样可以进一步提高Cache服务的命中率。
2.1.4.4 邮件服务器负载均衡
1. 三层结构
第一层是一个采用IP负载均衡技术的负载调度器;
第二层是服务器池,有LDAP目录服务器和一组邮件服务器。
第三层是数据存储,通过分布式文件系统来存储用户的邮件。
2. 邮件服务介绍
LDAP服务器:
LDAP服务器中存储用户的信息如用户名、口令、主目录和邮件容量限额等,可以通过HTTPS让管理员进行用户管理。
邮件服务器:
各个邮件服务 器上运行SMTP(Simple Mail Transfer Protocol)、POP3(Post Office Protocol version 3)、IMAP4(Internet Message Access Protocol version 4)和HTTP/HTTPS服务。
SMTP服务器:
SMTP接受和转发用户的邮件,SMTP服务进程查询LDAP服务器获得用户信息,再存储邮件。
POP3和IMAP4服务器:
POP3和IMAP4通过LDAP服务器获得用户信息,口令验证后,处理用户的邮件访问请求。这里,需要有机制避免不同服务器上的SMTP、POP3和IMAP4服务进程对用户邮件的读写冲突。
HTTP/HTTPS服务:
HTTP/HTTPS服务是让用户通过浏览器可以访问邮件。
3. 性能瓶颈
系统中可能的瓶颈是LDAP服务器,对LDAP服务中B+树的参数进行优化,再结合高端的服务器,可以获得较高的性能。若分布式文件系统没有多个存储结点间的负载均衡机制,则需要相应的邮件迁移机制来避免邮件访问的倾斜。
2.1.4.5 地理分布LVS集群的体系结构
由于互联网用户分布在世界各地,通过地理分布的服务器让用户访问就近的服务器,来节省网络流量和提高响应速度。以下,我们给出地理分布的LVS集群系统,通过BGP路由插入使得用户访问离他们最近的服务器集群,并提供服务器集群之间的负载平衡。
Ø 体系结构
Ø 基于BGP的地理分布服务器集群调度
Ø 服务器集群间的负载均衡
1. 体系结构
地理分布LVS集群的体系结构如图所示:
图:地理分布LVS集群的体系结构
有三个LVS集群系统分布在Internet上,他们一般放置在不同区域的Internet数据中心(InternetDataCenter)中,例如他们分别放在中国、美国和德国的三个不同的IDC中。三个LVS集群系统都有自己的分布式文件系统,它们的内容是相互复制的,提供相同的网络服务。它们共享一个VirtualIPAddress来提供网络服务。当用户通过VirtualIP Address访问网络服务,离用户最近的LVS集群提供服务。例如,中国的用户访问在中国的LVS集群系统,美国的用户使用美国的LVS集群系统,这一切对用户来说是透明的。
地理分布LVS集群系统可以带来以下好处:
使得用户访问离他们最近的系统,对用户来说体验到更快的响应速度,对服务提供商来说节约网络带宽,降低成本。避免灾难导致系统中止服务。当一个地点发生地震、火灾等使得系统或者网络连接瘫痪时,所有的用户访问可以很快由其他地点的LVS集群来提供。除了已建立的连接中断以外,这一切对用户来说都是透明的。
2. 基于BGP的地理分布服务器集群调度
BGP(BorderGatewayProtocol)是用于自治系统(AutonomousSystems)之间交换路由信息的协议,BGP可以设置路由策略,如政策、安全和经济上的考虑。我们可以利用BGP协议在Internet的BGP路由器插入到VirtualIPAddress的路由信息。在不同区域的LVS集群向它附近的BGP路由器广播到VirtualIPAddress的路由信息,这样就存在多条到VirtualIPAddress的路径,Internet的BGP路由器会根据评价函数选出最近的一条路径。这样,我们可以使得用户访问离他们最近的LVS集群。当一个LVS集群系统失效时,它的路由信息自然不会在Internet的BGP路由器中交换,BGP路由器会选择其他到VirtualIPAddress的路径。这样,可以做到抗灾害性(DisasterTolerance)。
图2.6:基于BGP的地理分布服务器集群调度例子
下面我们举一个基于BGP的地理分布服务器集群调度例子,它也是我们在实验室中测试的。测试的例子如图2.6所示,R11、R22分别在不同自治系统AS1和AS2中的Internet服务提供商(InternetServiceProvider),R31和R32表示在自治系统AS3中两个ISP。两个LVS集群系统分别放置在两个不同数据中心IDC1和IDC2中,LB1和LB2分别是两个LVS集群系统的负载调度器,它们对外提供网络服务的IP地址为10.101.4.1。
在第一个集群中,请求被调度到服务器10.101.5.11和10.101.5.12执行。
在第二个集群中,请求被调度到服务器10.101.6.11和10.101.6.12
10.101.4.1是在自治系统AS5的网络10.101.4.0/24中。
LB1上的BGP服务进程将网络10.101.4.0/24的路由信息广播到邻近的AS1,LB2上的BGP服务进程将网络10.101.4.0/24的路由信息广播到邻近的AS2中。我们在R31端口10.101.3.1相连的BGP路由器上查到AS5的自治系统路
展开阅读全文