负载均衡软件实现与硬件实现专项方案.doc
该文档是wordword兼容版软件、硬件负载均衡布置方案目录1、硬件负载均衡之F5布置方案21.1网络拓扑构造21.2反向代理布置方式32软件负载均衡方案52.1负载均衡软件实现方式之一 - URL重定向方式52.2负载均衡软件实现方式之二 - 基于DNS62.3负载均衡软件实现方式之三 - LVS82.4负载均衡软件实现方式之四 - 专业负载均衡软件16总结:171、硬件负载均衡之F5布置方案对于所有对外服务服务器,均可以在BIG-IP上配备Virtual Server实现负载均衡,同步BIG-IP可持续检查服务器健康状态,一旦发现故障服务器,则将其从负载均衡组中摘除。BIG-IP运用虚拟IP地址(VIP由IP地址和TCP/UDP应用端口构成,它是一种地址)来为顾客一种或各种目的服务器(称为节点:目的服务器IP地址和TCP/UDP应用端口构成,它可以是internet私网地址)提供服务。因而,它可觉得大量基于TCP/IP网络应用提供服务器负载均衡服务。依照服务类型不同分别定义服务器群组,可以依照不同服务端口将流量导向到相应服务器。BIG-IP持续地对目的服务器进行L4到L7合理性检查,当顾客通过VIP祈求目的服务器服务时,BIG-IP根椐目的服务器之间性能和网络健康状况,选取性能最佳服务器响应顾客祈求。如果可以充分运用所有服务器资源,将所有流量均衡分派到各个服务器,咱们就可以有效地避免“不平衡”现象发生。运用UIE+iRules可以将TCP/UDP数据包打开,并搜索其中特性数据,之后依照搜索到特性数据作相应规则解决。因而可以依照顾客访问内容不同将流量导向到相应服务器,例如:依照顾客访问祈求URL将流量导向到相应服务器。1.1网络拓扑构造网络拓扑构造如图所示:网络拓扑构造1.2反向代理布置方式下图为集群服务器硬件负载均衡详细架构图,由一台F5虚拟机分别对多台服务器进行负载分派。如图,假设域名.com被解析到F5外网/公网虚拟IP:61.1.1.3(vs_squid),该虚拟IP下有一种服务器池(pool_squid),该服务器池下包括两台真实Squid服务器(192.168.1.11和192.168.1.12)。、如果Squid缓存未命中,则会祈求F5内网虚拟IP:192.168.1.3(vs_apache),该虚拟IP下有一种默认服务器池(pool_apache_default),该服务器池下包括两台真实Apache服务器(192.168.1.21和192.168.1.22),当该虚拟IP匹配iRules规则时,则会访问此外一种服务器池(pool_apache_irules),该服务器池下同样包括两台真实Apache服务器(192.168.1.23和192.168.1.24)。、此外,所有真实服务器默认网关指向F5自身内网IP,即192.168.1.2。、所有真实服务器通过SNAT IP地址61.1.1.4访问互联网。2软件负载均衡方案2.1负载均衡软件实现方式之一 - URL重定向方式有一种用软件实现负载均衡方式,是基于"URL重定向".先看看什么是URL重定向:"简朴说,如果一种网站有正规URL和别名URL,对别名URL进行重定向到正规URL,访问同一种网址,或者网站改换成了新域名则把旧域名重定向到新域名,都叫URL重定向"()"诸多网络合同都支持“重定向”功能,例如在HTTP合同中支持Location指令,接受到这个指令浏览器将自动重定向到Location指明另一种URL上。"(http:/sysapp. 这种方式,对于简朴网站,如果网站是自己开发,也在一定限度上可行.但是它存在着较多问题:1、“例如一台服务器如何能保证它重定向过服务器是比较空闲,并且不会再次发送Location指令,Location指令和浏览器都没有这方面支持能力,这样很容易在浏览器上形成一种死循环。”2、在哪里放LOCATION,也是一种问题。很有也许顾客会访问系统诸各种不同URL,这个时候做起来会非常麻烦。并且,对URL访问,有时候是 直接过来,可以被重定向,有时候是带着SESSION之类,重定向就也许会出问题。并且,这种做法,将负载均衡这个系统级问题放到了应用层,成果 也许是麻烦多多。3、这种方式普通只合用于HTTP方式,但是事实上有太多状况不但仅是HTTP方式了,特别是顾客如果在应用里面插一点流媒体之类。4、重定向方式,效率远低于IP隧道。5、这种方式,有时候会伴以对服务器状态检测,但往往也是在应用层面实现,从而实时性大打折扣。事实上,这种方式是一种“对付”解决办法,并不能真正用于公司级负载均衡应用(这里公司级是指稍微复杂一点应用系统)可以看一下专业负载均衡软件是如何来实现:http:/www. 对比一下可以发现,专业负载均衡软件要更合用于正规应用,而重定向方式则比较合用于某些简朴网站应用。 2.2负载均衡软件实现方式之二 - 基于DNS 负载均衡集群网络拓扑图讲到负载均衡,几乎所有地方都必要要讲一下基于DNS方式,由于这实在是最基本、最简朴方式了。固然,也几乎所有地方都说到这种方式种种缺陷,但是,既然很基本,就还是要阐明一下。下面这段讲得很清晰:最早负载均衡技术是通过DNS来实现,在DNS中为各种地址配备同一种名字,因而查询这个名字客户机将得到其中一种地址,从而使得不同客户访问不同服务器,达到负载均衡目。 DNS负载均衡是一种简朴而有效办法,但是它不能区别服务器差别,也不能反映服务器当前运营状态。当使用DNS负载均衡时候,必要尽量保证不同 客户计算机能均匀获得不同地址。由于DNS数据具备刷新时间标志,一旦超过这个时间限制,其她DNS服务器就需要和这个服务器交互,以重新获得地址数 据,就有也许获得不同IP地址。因而为了使地址能随机分派,就应使刷新时间尽量短,不同地方DNS服务器能更新相应地址,达到随机获得地址,然而将过 期时间设立得过短,将使DNS流量大增,而导致额外网络问题。DNS负载均衡另一种问题是,一旦某个服务器浮现故障,虽然及时修改了DNS设立,还是 要等待足够时间(刷新时间)才干发挥作用,在此期间,保存了故障服务器地址客户计算机将不能正常访问服务器。 尽管存在各种问题,但它还是一种非常有效做法,涉及Yahoo在内诸多大型网站都使用DNS。引自:负载均衡技术研究 原文:http:/www. 比较一下DNS方式与专业负载均衡软件如PCL负载均衡软件,会发现DNS问题在于,一是往往不能依照系统与服务状态来判断负载,二是往往不能建立较复杂负载均衡算法,而最重要是DNS往往有缓存,简朴分派负载问题不大,如果是应用集群这个就是无法接受。那么,为什么象Yahoo在内大型网站都使用DNS方式呢?由于对于门户网站来讲,应用形态单一且简朴,重要是服务器数量与分布,而如果浮现短时 间对于少量顾客服务中断问题并不大(例如有100台服务器,有一台不行了,虽然DNS有缓存,也关系不大,顾客重新刷一下,就很也许又分派到其她机器上 了)。但是,对于应用系统而言,例如两三台服务器,跑着比较复杂应用,DNS方式就完全不适合了,这个时候,就要用专业负载均衡软件了。咱们可以看一种实例,这样会对专业化负载均衡软件应当支持什么样应用有更多理解:36000人同步应用负载均衡实例2.3负载均衡软件实现方式之三 - LVS LVS是一种开源软件,可以实现LINUX平台下简朴负载均衡. 背面所附文章,讲述了LVS实现负载均衡办法.由于文章较长,因此在转载前,先总结一下LVS优缺陷:长处:1、开源,免费2、在网上能找到某些有关技术资源3、具备软件负载均衡某些长处缺陷:1、具备开源产品常有缺陷,最核心就是没有可靠支持服务,没有人对其成果负责2、功能比较简朴,支持复杂应用负载均衡能力较差,如算法较少等。3、启动隧道方式需重编译内核4、配备复杂5、只支持LINUX,如果应用还涉及WINDOWS、SOLIRIS等就不行了因而,建议在简朴LINUX应用中使用LVS,复杂应用,或者重要应用,还是应当使用专业负载均衡软件,如富士通西门子公司PCL负载均衡软件。下面转载一下如何使用LVS实现负载均衡:搭建集群负载均衡系统 (原文:)负载均衡集群是在应用服务器高负载状况下,由多台节点提供可伸缩,高负载服务器组以保证对外提供良好服务响应;而LVS就是实现这一功能技 术.事实上LVS是一种Linux操作系统上基于IP层负载均衡调度技术,它在操作系统核心层上,将来自IP层TCP/UDP祈求均衡地转移到不同 服务器,从而将一组服务器构成一种高性能、高可用虚拟服务器。使用三台机器就可以用LVS实现最简朴集群,如图1所示。 图1 LVS实现集群系统构造简图 图1显示一台名为Director机器是前端负载均衡器,运营LVS,当前只能在Linux下运营.可以针对web、ftp、cache、mms甚至 mysql等服务做load balance;后端两台机器称之为Real Server,是需要负载均衡服务器,可觉得各类系统,Linux、Solaris、Aix、BSD、Windows都可,甚至Director自身也 可以作为Real Server. 本文将通过实际操作,重点简介如何在Redhat 9上用LVS构建一种负载均衡集群,关于负载均衡集群、LVS详细内容,可参照如下信息: 安装LVS RedHat在 9.0后来,就将ipvsadm这些套件去除,因而如果想使用LVS(Linux Virtual Server),就得自己重新编译核心(kernel)。 下载所需软件 下载ipvs补丁包 从RedHat 9开始ipvs不再被预先编译到了RedHat发行版内核中,咱们需要从下载新版ipvs,这里咱们使用ipvs-1.0.9.tar.gz这个版本. 下载内核linux-2.4.20.tar.gz 这里需要强调是由于所有ipvs补丁包都是为原则内核开发,因此安装ipvs时不能使用RedHat光盘中Kernel Source,而是需要去下载原则内核。因此咱们从ftp:/ftp.kernel.org/pub/linux/kernel/ 得到standard kernel linux-2.4.20.tar.gz 下载ipvs管理工具ipvsadm 从 得到ipvs管理工具ipvsadm-1.21.tar.gz,ipvsadm是设立ipvs转发方式和调度算法工具. 开始安装 安装内核源码 把linux-2.4.20.tar.gz解压到/usr/src目录,生成了/usr/src/linux目录;如果生成是/usr/src /linux-2.4.20目录,则要在/usr/src下建立一种连接 ln s linux-2.4.20 linux,由于在ipvs-1.0.9中makefile文献中默认指定Kernel Source途径为:KERNELSOURCE = /usr/src/linux 把ipvs补丁Patch到内核源码中 把ipvs-1.0.9.tar.gz解压缩到某个目录,如/test,生成了/test/ipvs-1.0.9目录;进入/test/ipvs- 1.0.9,依次执行如下命令:make patchkernel、make installsource,将ipvsPatch加载到kernelsource中。 重新编译支持ipvs内核 进入/usr/src/linux目录,分别执行: make mrproper 为创立新内和配备做好准备 make menuconfig 进行配备 这里请保证IP:Virtual Server Configuration中选项设定都用M make dep 检测与否有有关软件包被使用 make clean 为新内核构造准备源目录树 make bzImage 创立内核引导映像 make modules、make modules_install 生成模块 make install安装新内核到指定位置并重新配备grub.conf 到这里新内核就安装完毕了,请重启并用此内核引导系统 安装ipvs管理工具ipvsadm 当使用新内核启动后,就可以安装ipvsadm:tar xzvf ipvsadm-1.21.tar.gz cd ./ipvsadm-1.21 make make install 安装完毕后,执行ipvsadm命令,如果有如下信息浮现则阐明安装成功了。 rootleon c# ipvsadm IP Virtual Server version 1.0.9 (size=65536) Prot LocalAddress:Port Scheduler Flags ->;RemoteAddress:Port Forward Weight ActiveConn InActConn 到当前为止,支持负载均衡功能director就安装成功了,接下来咱们可以通过ipvsadm来配备一种负载均衡集群。 构建负载均衡集群 这里咱们假设局域网中有两台FTP服务器,IP分别为FTP1:10.83.33.103,FTP2:10.83.33.2 所提供资料都是相似,这可以通过无密码SSH登录+RSYNC来保证数据一致,这非本文中电,故而略过.咱们提供应顾客虚拟IP是 10.83.33.100,而在后台为这两台FTP服务器实行LVS负载均衡服务器IP是10.83.33.83.这三台均安装RedHat9系统. 咱们最后要实现目的是当顾客输入ftp 10.83.33.100时,LVS负载均衡服务器系统会依照当时负载状况,根据轮换方略来决定Real Server究竟是FTP1还是FTP2,从而使得整个FTP服务器负载到达均衡. 当前LVS有三种负载平衡方式,NAT(Network Address Translation),DR(Direct Routing),IP Tunneling。其中,最为惯用是DR方式,因而这里只阐明DR(Direct Routing)方式LVS负载平衡。其他两种详细状况请参照LVS-HOWTO. Director(即10.83.33.83)上执行设立 为了以便咱们将所有环节写成一种shell script. #!/bin/bash echo "0" >;/proc/sys/net/ipv4/ip_forward (关闭ip_forward) echo "1" >;/proc/sys/net/ipv4/conf/all/send_redirects (启动ICMP Redirects) echo "1" >;/proc/sys/net/ipv4/conf/default/send_redirects (启动ICMP Redirects) echo "1" >;/proc/sys/net/ipv4/conf/eth0/send_redirects (启动ICMP Redirects) ifconfig eth0:100 10.83.33.100 broadcast 10.83.33.100 netmask 255.255.255.255 (设立虚拟IP) route add -host 10.83.33.100 dev eth0:100 (设立达到虚拟Ip路由) ipvsadm C (清空ipvsadm table) ipvsadm -A -t 10.83.33.100:21 -s wrr (建立service rule,当前调度算法为加权轮叫调度) ipvsadm -a -t 10.83.33.100:21 -r 10.83.33.76 -g -w 3 (建立转发规则) ipvsadm -a -t 10.83.33.100:21 -r 10.83.33.2 -g -w 1 (建立转发规则) ipvsadm (检查当前ipvsadm table) 将此shell script加入到/etc/rc.local中,这样在每次系统启动时都可以自动运营进行设立了。 Realserver(即10.83.33.2和10.83.33.76)上设立 这里咱们必要先修正real server上arp problem .这是由于在使用VS/DR时候,real server会在一块网卡上绑定两个IP,但linux在kernel 2.2.14后来就将eth0:1NOARP FLAG关闭,这使得eth0:1仅仅是eth0别名,任何对eth0:1操作都对eth0有效,因而如果此时使eth0:1 NOARP,则也使得eth0 NOARP,这样整个网卡都不会收到数据包,详细说就是由于我所有机器都放在同一种网段,当该网段Router接受到顾客对虚拟IPTCP connection规定(虽然用FTP登录服务器)时,会先在网段中运用Arp request询问谁有VIP地址,而包括Director与Real Servers上所有interface,只要她有那个ip,都会发送arp reply回去,导致网段内所有拥有Virtual IPinterface都会reply给Router,最后成果就是看谁速度快,Router就将该封包送给谁,如此会导致LVSServer并无 法发挥其效果,而咱们所但愿是只有Director上Virtual IP发送arp reply回去,因而需要运用hidden这个pattch,将real server上Virtual IP给隐藏起来,如此她就不会对Arp Request进行Reply,就可以解决ARP问题.详细环节是:下载所需软件包 从ja/ 得到hidden修正包,不同核心使用相应版本.请参照下表 Patch Linux 2.4 Created hidden-2.4.28-1.diff 2.4.28 - 2.4.30 November 18, hidden-2.4.26-1.diff 2.4.26 - 2.4.27 February 28, hidden-2.4.25-1.diff 2.4.25 February 19, hidden-2.4.20pre10-1.diff 2.4.20pre10 - 2.4.24 October 12, hidden-2.4.19pre5-1.diff 2.4.19pre5 - 2.4.20pre9 April 7, hidden-2.4.5-1.diff 2.4.5 - 2.4.19pre4 June 2, hidden-2.4.4-1.diff 2.4.4 April 29, Patch Linux 2.6 Created hidden-2.6.9-1.diff 2.6.9 - 2.6.11 October 19, hidden-2.6.4-1.diff 2.6.4 - 2.6.8 March 12, hidden-2.6.3-1.diff 2.6.3 February 19, hidden-2.5.67-1.diff 2.5.67 - 2.6.2 April 9, 本例使用内核版本是2.4.20-8,因而下载hidden-2.4.20pre10-1.diff 重新编译内核,修正arp problem 把hidden-2.4.20pre10-1.diff放到/usr/src/linux下,用命令 patch -p1 < hidden-2.4.20pre10-1.diff对kernel进行patch 进入/usr/src/linux目录,分别执行: make mrproper 为创立新内和配备做好准备 make menuconfig 进行配备 make dep 检测与否有有关软件包被使用 make clean 为新内核构造准备源目录树 make bzImage 创立内核引导映像 make modules、make modules_install 生成模块 make install 安装新内核到指定位置并重新配备grub.conf 到这里新内核就安装完毕了,请重启并用此内核引导系统 设立Real server 为了以便咱们将所有环节写成一种shell script. #!/bin/bash echo "0" >;/proc/sys/net/ipv4/ip_forward (关闭ip_forward) ifconfig lo:100 10.83.33.100 broadcast 10.83.33.100 netmask 0xffffffff up (设立虚拟IP) route add -host 10.83.33.100 dev lo:100 (设立达到虚拟Ip路由) echo "1" >;/proc/sys/net/ipv4/conf/all/hidden (启动No-ARP) echo "1" >;/proc/sys/net/ipv4/conf/lo/hidden (启动No-ARP) 将此shell script加入到/etc/rc.local中,这样在每次系统启动时都可以自动运营进行设立了。 测试 为了使得咱们清晰地懂得访问是那一台FTP服务器,咱们在FTP1上编辑/etc/vsftpd/vsftpd.conf,设立 ftpd_banner=Welcome to FTP1 server,在FTP2设立ftpd_banner=Welcome to FTP2 server,设立完毕后重启服务. 当前在另一台客户机开几种终端,依次输入ftp 10.83.33.100,咱们可以从欢迎词上看到,每次登录FTP服务器都不是固定,它会在FTP1和FTP2上互相交替,实验成功! 2.4负载均衡软件实现方式之四 - 专业负载均衡软件 看一下专业负载均衡软件是什么样:PCL负载均衡软件详细内容,人们可以自己去看。简朴讲,专业负载均衡软件大概有如下特点:1、它是基于IP隧道,而不是象URL重定向方式那样。因此,它是独立于应用2、它支持不同平台,即应用可以是基于LINUX,WINDOWS或SOLARIS,而不是象LVS只能在LINUX上3、它是实时,这点与DNS方式有极大差别。4、它可以依照系统、应用状况来决定负载,这一点与硬件负载均衡设备有很大差别。5、专业负载均衡软件,合用于公司级应用,无论从其可靠性,还是从其服务保障上,都不是象LVS那样开源软件可比。总结:如果是象YAHOO那样网站应用,可以考虑DNS方式,参见:负载均衡软件实现方式之二 - 基于DNS 如果是特别简朴应用,可以考虑URL重定向方式,参见:负载均衡软件实现方式之一 - URL重定向方式 如果是不太重要纯LINUX应用,可以考虑LVS,参见:负载均衡软件实现方式之三 - LVS 如果是重要、流量大、应用简朴、预算充分状况,可以考虑硬件方式(例如用F5)(一定要做双机啊!),参见:软件与硬件负载均衡比较 而如果是重要公司应用,两台或几十台服务器,应用比较复杂,涉及有也许跨平台,则应当考虑专业负载均衡软件。参见:PCL负载均衡软件-应用集群抱负选取