LINUX伺服器集群系统

LINUX伺服器集群系统【LINUX伺服器集群系统】计算机技术已进入以网路为中心的计算时期 。由于客户/伺服器模型的简单性、易管理性和易维护性 , 客户/伺服器计算模式在网上被大量採用 。在九十年代中期 , 全球资讯网(World Wide Web)的出现以其简单操作方式将图文并茂的网上信息带给普通大众 , Web也正在从一种内容传送机製成为一种服务平台 , 大量的服务和套用(如新闻服务、网上银行、电子商务等)都是围绕着Web进行 。这促进Internet用户剧烈增长和Internet流量爆炸式地增长 , 下图显示了1995至2000年与Internet连线主机数的变化情况 , 可见增长趋势较以往更迅猛 。
基本介绍中文名:LINUX伺服器集群系统
时间:1985
类型:后端伺服器
国家:美国
背景

LINUX伺服器集群系统

文章插图
IP虚拟伺服器软体IPVS在调度器的实现技术中 , 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负载均衡技术 , 它们的大致原理如下:Virtual Server via Network Address Translation(VS/NAT)通过网路地址转换 , 调度器重写请求报文的目标地址 , 根据预设的调度算法 , 将请求分派给后端的真实伺服器;真实伺服器的回响报文通过调度器时 , 报文的源地址被重写 , 再返回给客户 , 完成整个负载调度过程 。Virtual Server via IP Tunneling(VS/TUN)採用NAT技术时 , 由于请求和回响报文都必须经过调度器地址重写 , 当客户请求越来越多时 , 调度器的处理能力将成为瓶颈 。为了解决这个问题 , 调度器把请求报文通过IP隧道转发至真实伺服器 , 而真实伺服器将回响直接返回给客户 , 所以调度器只处理请求报文 。由于一般网路服务应答比请求报文大许多 , 採用VS/TUN技术后 , 集群系统的最大吞吐量可以提高10倍 。Virtual Server via Direct Routing(VS/DR)VS/DR通过改写请求报文的MAC地址 , 将请求传送到真实伺服器 , 而真实伺服器将回响直接返回给客户 。同VS/TUN技术一样 , VS/DR技术可极大地提高集群系统的伸缩性 。这种方法没有IP隧道的开销 , 对集群中的真实伺服器也没有必须支持IP隧道协定的要求 , 但是要求调度器与真实伺服器都有一块网卡连在同一物理网段上 。针对不同的网路服务需求和伺服器配置 , IPVS调度器实现了如下八种负载调度算法:轮询(Round Robin)调度器通过"轮询"调度算法将外部请求按顺序轮流分配到集群中的真实伺服器上 , 它均等地对待每一台伺服器 , 而不管伺服器上实际的连线数和系统负载 。加权轮询(Weighted Round Robin)调度器通过"加权轮询"调度算法根据真实伺服器的不同处理能力来调度访问请求 。这样可以保证处理能力强的伺服器处理更多的访问流量 。调度器可以自动问询真实伺服器的负载情况 , 并动态地调整其权值 。最少连结(Least Connections)调度器通过"最少连线"调度算法动态地将网路请求调度到已建立的连结数最少的伺服器上 。如果集群系统的真实伺服器具有相近的系统性能 , 採用"最小连线"调度算法可以较好地均衡负载 。加权最少连结(Weighted Least Connections)在集群系统中的伺服器性能差异较大的情况下 , 调度器採用"加权最少连结"调度算法最佳化负载均衡性能 , 具有较高权值的伺服器将承受较大比例的活动连线负载 。调度器可以自动问询真实伺服器的负载情况 , 并动态地调整其权值 。基于局部性的最少连结(Locality-Based Least Connections)"基于局部性的最少连结" 调度算法是针对目标IP位址的负载均衡 , 目前主要用于Cache集群系统 。该算法根据请求的目标IP位址找出该目标IP位址最近使用的伺服器 , 若该伺服器是可用的且没有超载 , 将请求传送到该伺服器;若伺服器不存在 , 或者该伺服器超载且有伺服器处于一半的工作负载 , 则用"最少连结"的原则选出一个可用的伺服器 , 将请求传送到该伺服器 。带複製的基于局部性最少连结(Locality-Based Least Connections with Replication)"带複製的基于局部性最少连结"调度算法也是针对目标IP位址的负载均衡 , 目前主要用于Cache集群系统 。它与LBLC算法的不同之处是它要维护从一个目标IP位址到一组伺服器的映射 , 而LBLC算法维护从一个目标IP位址到一台伺服器的映射 。该算法根据请求的目标IP位址找出该目标IP位址对应的伺服器组 , 按"最小连线"原则从伺服器组中选出一台伺服器 , 若伺服器没有超载 , 将请求传送到该伺服器 , 若伺服器超载;则按"最小连线"原则从这个集群中选出一台伺服器 , 将该伺服器加入到伺服器组中 , 将请求传送到该伺服器 。同时 , 当该伺服器组有一段时间没有被修改 , 将最忙的伺服器从伺服器组中删除 , 以降低複製的程度 。目标地址散列(Destination Hashing)"目标地址散列"调度算法根据请求的目标IP位址 , 作为散列键(Hash Key)从静态分配的散列表找出对应的伺服器 , 若该伺服器是可用的且未超载 , 将请求传送到该伺服器 , 否则返回空 。源地址散列(Source Hashing)"源地址散列"调度算法根据请求的源IP位址 , 作为散列键(Hash Key)从静态分配的散列表找出对应的伺服器 , 若该伺服器是可用的且未超载 , 将请求传送到该伺服器 , 否则返回空 。核心Layer7交换机KTCPVS在基于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命中率 。一些研究表明WEB访问流中存在局部性 。Layer-7交换可以充分利用访问的局部性 , 将相同类型的请求传送到同一台伺服器 , 使得每台伺服器收到的请求具有更好的相似性 , 可进一步提高单台伺服器的Cache命中率 。后端伺服器可运行不同类型的服务 , 如文档服务 , 图片服务 , CGI服务和资料库服务等 。LVS集群的特点LVS集群的特点可以归结如下:功能有实现三种IP负载均衡技术和八种连线调度算法的IPVS软体 。在IPVS内部实现上 , 採用了高效的Hash函式和垃圾回收机制 , 能正确处理所调度报文相关的ICMP讯息(有些商品化的系统反而不能) 。虚拟服务的设定数目没有限制 , 每个虚拟服务有自己的伺服器集 。它支持持久的虚拟服务(如HTTP Cookie和HTTPS等需要该功能的支持) , 并提供详尽的统计数据 , 如连线的处理速率和报文的流量等 。针对大规模拒绝服务(Deny of Service)攻击 , 实现了三种防卫策略 。有基于内容请求分发的套用层交换软体KTCPVS , 它也是在Linux核心中实现 。有相关的集群管理软体对资源进行监测 , 能及时将故障禁止 , 实现系统的高可用性 。主、从调度器能周期性地进行状态同步 , 从而实现更高的可用性 。适用性</strong>后端伺服器可运行任何支持TCP/IP的作业系统 , 包括Linux , 各种Unix(如FreeBSD、Sun Solaris、HP Unix等) , Mac/OS和Windows NT/2000等 。负载调度器能够支持绝大多数的TCP和UDP协定:协定内容TCP , HTTP , FTP , PROXY , SMTP , POP3 , IMAP4 , DNS , LDAP , HTTPS , SSMTP等UDP , DNS , NTP , ICP , 视频、音频流播放协定等无需对客户机和伺服器作任何修改 , 可适用大多数Internet服务 。性能LVS伺服器集群系统具有良好的伸缩性 , 可支持几百万个并发连线 。配置100M网卡 , 採用VS/TUN或VS/DR调度技术 , 集群系统的吞吐量可高达1Gbits/s;如配置千兆网卡 , 则系统的最大吞吐量可接近10Gbits/s 。可靠性LVS伺服器集群软体已经在很多大型的、关键性的站点得到很好的套用 , 所以它的可靠性在真实套用得到很好的证实 。有很多调度器运行一年多 , 未作一次重启动 。软体许可证LVS集群软体是按GPL(GNU Public License)许可证发行的自由软体 , 这意味着可以得到软体的原始码 , 有权对其进行修改 , 但必须保证修改也是以GPL方式发行 。LVS集群的套用LVS项目从成立到现在为止 , 受到不少关注 , LVS集群系统已被套用于很多重负载的站点 , 系统已在美、英、德、澳等国的几十个站点上正式使用 。一些没有上百台机器和高速的网路来实际测试LVS的终极性能 , 所以举LVS的套用实例来说明LVS的高性能和稳定性 。所知的一些大型LVS套用实例如下:英国国家JANET Cache Service(wwwcache.ja.net)是为英国150所以上的大学提供Web Cache服务 。他们用28个结点的LVS集群代替了原有现50多台相互独立的Cache伺服器 , 用他们的话说现在速度就跟夏天一样 , 因为夏天是放假期间没有很多人使用网路 。Linux的门户站点(www.linux.com)用LVS将很多台VA Linux SMP伺服器组成高性能的WEB服务 , 已使用将近一年 。SourceForge(sourceforge.net)是在全球範围内为开发源码项目提供WEB、FTP、Mailing List和CVS等服务 , 他们也使用LVS将负载调度到十几台机器上 。世界上最大的PC製造商之一採用了两个LVS集群系统 , 一个在美洲 , 一个在欧洲 , 用于网上直销系统 。以RealPlayer提供音频视频服务而闻名的Real公司(www.real.com)使用由20台伺服器组成的LVS集群 , 为其全球用户提供音频视频服务 。在2000年3月时 , 整个集群系统已收到平均每秒20,000个连线的请求流 。NetWalk(www.netwalk.com)用多台伺服器构造LVS系统 , 提供1024个虚拟服务 , 其中本项目的一个美国镜像站点(www.us.linuxvirtualserver.org) 。RedHat(www.redhat.com)从其6.1发行版起已包含LVS代码 , 他们开发了一个LVS集群管理工具叫Piranha , 用于控制LVS集群 , 并提供了一个图形化的配置界面 。VA Linux(www.valinux.com)向客户提供基于LVS的伺服器集群系统 , 并且提供相关的服务和支持 。TurboLinux的"世界一流Linux集群产品"TurboCluster实际上是基于LVS的想法和代码的 , 只是他们在新闻发布和产品演示时忘了致谢 。红旗Linux和中软都提供基于LVS的集群解决方案 , 并在2000年9月召开的Linux World China 2000上展示 。在这里 , 再引用两位LVS用户的评论 , 来进一步说明LVS的性能和可靠性 。"We tried virtually all of the commercial load balancers, LVS beats them all for reliability, cost, manageability, you-name-it." — Jerry Glomph Black, Director, Internet & Technical Operations, Real Networks, Se attle Washington, USA ;m=95385809030794&amp;w=2"I can say without a doubt that lvs toasts F5/BigIP solutions, at least in our real world implementations. I wouldn't trade a good lvs box for a Cisco Local Director either." — Drew Streib, Information Architect, VA Linux Systems, USALVS项目的开发进展与感触LVS项目于1998年5月在网站上发布IPVS第一个版本源程式 , 一直得到了来自 Internet 的用户和开发者的鼓励和支持 。应该说 , 刚开始发布的程式是非常简单的 , 由于用户的使用、反馈和期望 , 这项工作的价值 , 并不断地化时间对该软体添加新功能和完善 , 其中也得到其他开发者的帮助 , 所以该软体逐渐发展成为功能较齐全、有用的系统 , 这远远超出当初成立项目时的想像 。目前 , 正在进行的 LVS项目开发工作包括:扩充IPVS对其他传输协定的支持 , 如AH(Authentication Header)和ESP(Encapsulating Security Payload )等 , 这样IPVS调度器将实现IPSec的伺服器集群 。提供一个统一的、功能较完善、更灵活的LVS集群管理软体 。扩充和改进KTCPVS的调度算法和多种协定的支持 , 使之功能较完备和系统更稳定 。在TCP粘合(TCP Splicing)和TCP转移(TCP Handoff)等方面 , 做一些尝试性工作 , 进一步改进LVS集群中的套用层调度 。开发者做自由软体开发的几点感触:一是通过自由软体方式可以使得软体具有顽强的生命力;以前也做过几个独立的系统 , 如在</em><em>SUN</em>上用 Common Lisp开发的知识库系统和基于C++的对象资料库系统 , 有些地方也是做得非常漂亮的(如元级反射机制和对象的关係处理) , 但因为种种原因这些软体没有以开放源码方式发布 , 现在它们在我导师的软体仓库里已无人问津 , 我也已经忘记里面的实现细节;而LVS项目是我做着玩的 , 一开始只是个很简单的程式 , 通过自由软体的发布和开发 , 它发展成一个有用的、功能较齐全的软体 , 体现了自由软体的强大生命力 。二是通过自由软体的集市开发 , 可以使得初始的想法不断地深入 , 可以学到很多东西 。三是做自由软体后时间会更有效率 , 由于用户的反馈和期待 , 会自觉不断地改进和完善系统 , 于是没有时间去玩游戏和网上聊天 。四是做自由软体会使得你有一点点成就感 , 每当收到用户的致谢和想到你的软体在实际系统中运行 , 会有一点满足 。所以 , 行动起来吧 , 花一些时间做自由软体 , 你会有意想不到的收穫 。LVS项目的网路资源如果对LVS项目感兴趣 , 请访问Linux Vritual Server项目的主页