LVS是一个开源的软件,可以实现LINUX平台下的简单负载均衡.
后面所附文章,讲述了LVS实现负载均衡的方法. 因为文章较长,所以在转载前,先总结一下LVS的优缺点: 优点: 1、开源,免费 2、在网上能找到一些相关技术资源 3、具有软件负载均衡的一些优点 缺点: 1、具有开源产品常有的缺点,最核心的就是没有可靠的支持服务,没有人对其结果负责 2、功能比较简单,支持复杂应用的负载均衡能力较差,如算法较少等。 3、开启隧道方式需重编译内核 4、配置复杂 5、只支持LINUX,如果应用还包括WINDOWS、SOLIRIS等就不行了 因此,建议在简单的LINUX应用中使用LVS,复杂的应用,或者重要的应用,还是应该使用专业的负载均衡软件,如富士通西门子公司的 PCL负载均衡软件 下面转载一下如何使用LVS实现负载均衡: 搭建集群负载均衡系统 (原文: http://www.xxlinux.com/linux/art ... /20060707/2519.html) 负载均衡集群是在应用服务器高负载的情况下,由多台节点提供可伸缩的,高负载的服务器组以保证对外提供良好的服务响应;而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的详细内容,可参考如下信息: http://www.linuxvirtualserver.org/ http://www-900.ibm.com/developer ... s/part1/index.shtml 安装LVS RedHat在 9.0以后,就将ipvsadm这些套件去除,因此如果想使用LVS(Linux Virtual Server),就得自己重新编译核心(kernel)。 下载所需软件 下载ipvs补丁包 从RedHat 9开始ipvs不再被预先编译到了RedHat发行版的内核中,我们需要从 http://www.linuxvirtualserver.org/software/kernel-2.4下载新版的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 从 http://www.linuxvirtualserver.org/ 得到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,将ipvs的Patch加载到kernel的source中。 重新编译支持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命令,如果有如下信息出现则说明安装成功了。 [root@leon c]# ipvsadm IP Virtual Server version 1.0.9 (size=65536) Prot LocalAddress ![]() ->; RemoteAddress ![]() 到现在为止,支持负载均衡功能的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:1的NOARP FLAG关闭,这使得eth0:1仅仅是eth0的别名,任何对eth0:1的操作都对eth0有效,因此如果此时使eth0:1 NOARP,则也使得eth0 NOARP,这样整个网卡都不会收到数据包,具体的说就是因为我所有的机器都放在同一个网段,当该网段的Router接收到用户对虚拟IP的TCP connection要求(即使用FTP登录服务器)时,会先在网段中利用Arp request询问谁有VIP的地址,而包含Director与Real Servers上所有的interface,只要他有那个ip,都会发送arp reply回去,造成网段内所有拥有Virtual IP的interface都会reply给Router,最后结果就是看谁的速度快,Router就将该封包送给谁,如此会造成LVS的Server并无法发挥其效果,而我们所希望的是只有Director上的Virtual IP发送arp reply回去,因此需要利用hidden这个pattch,将real server上的Virtual IP给隐藏起来,如此他就不会对Arp Request进行Reply,就可以解决ARP的问题.具体步骤是: 下载所需的软件包 从 http://www.ssi.bg/~ja/ 得到hidden修正包,不同的核心使用相应的版本.请参考下表 Patch Linux 2.4 Created hidden-2.4.28-1.diff 2.4.28 - 2.4.30 November 18, 2004 hidden-2.4.26-1.diff 2.4.26 - 2.4.27 February 28, 2004 hidden-2.4.25-1.diff 2.4.25 February 19, 2004 hidden-2.4.20pre10-1.diff 2.4.20pre10 - 2.4.24 October 12, 2002 hidden-2.4.19pre5-1.diff 2.4.19pre5 - 2.4.20pre9 April 7, 2002 hidden-2.4.5-1.diff 2.4.5 - 2.4.19pre4 June 2, 2001 hidden-2.4.4-1.diff 2.4.4 April 29, 2001 Patch Linux 2.6 Created hidden-2.6.9-1.diff 2.6.9 - 2.6.11 October 19, 2004 hidden-2.6.4-1.diff 2.6.4 - 2.6.8 March 12, 2004 hidden-2.6.3-1.diff 2.6.3 February 19, 2004 hidden-2.5.67-1.diff 2.5.67 - 2.6.2 April 9, 2003 本例使用的内核版本是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上互相交替,试验成功! |
利用LVS搭建集群负载均衡系统
最新推荐文章于 2023-02-16 14:05:06 发布