您好,欢迎访问三七文档
负载均衡实战之一:lvs核心ipvs1、虚拟服务器结构在互联网应用技术里,负载均衡一直是热门话题,本文讨论的负载均衡技术,包括但不限于负载均衡本身。使用负载均衡技术主要的目的包括如下几点:◆系统高可用性。组成系统的某些设备或部件失效,并不会影响正常的服务。◆系统可扩展性。用户的增加,引起访问数乃至流量的增加,这种情形下,需要对系统进行扩容,以应对这种快速增长。对于提供高可用服务的互联网网站,其对可扩展的基本要求就是在保持系统服务不终止的情况下,透明的扩充容量,即用户不知道扩容的存在,或者说是扩容不对现有的服务产生任何负面作用。这些扩展主要包括:带宽扩展、服务器扩展、存储容量扩展、数据库扩展等,当然也包括主机增加内存等方面的扩展。◆负载均衡能力。一个应用或服务由数个物理服务器提供,并且每个物理服务器运行的应用或服务是相同的,我们可以让用户的访问通过某种控制策略,把负载分摊到不同的物理服务器,从而保持每个物理服务器有比较合理的负载。当整个系统的负载趋于饱和时,通过增加物理服务器和扩充物理带宽来解决这个麻烦。增加物理服务器以后,系统的负载情况将重新在所有集群的物理服务器之间按照指定的算法重新达到新的均衡。一个完整的负载均衡项目,一般由虚拟服务器、故障隔离及失败切换3个功能框架所组成。虚拟服务器是负载均衡体系的基本架构,它分两层结构:转发器(Director)和真实服务器。图1为虚拟服务器的结构示意。图1虚拟服务器结构为什么称虚拟服务器?因为从用户的角度看来,似乎只是一个服务器在提供服务。虚拟服务器最主要的功能是提供包转发和负载均衡,这个功能可以通过撰写ipvsadm脚本具体实现。虚拟服务器项目由章文嵩博士所贡献,目前已被添加到各种linux发行版的内核。故障隔离指虚拟服务器中的某个真实服务器(或某几个真实服务器)失效或发生故障,系统将自动把失效的服务器从转发队列中清理出去,从而保证用户访问的正确性;另一方面,当实效的服务器被修复以后,系统再自动地把它加入转发队列。失败切换,这是针对负载均衡器Director采取的措施,在有两个负载均衡器Director的应用场景,当主负载均衡器(MASTER)失效或出现故障,备份负载均衡器(BACKUP)将自动接管主负载均衡器的工作;一旦主负载均衡器故障修复,两者将恢复到最初的角色。要从技术上实现虚拟服务器、故障隔离及失败切换3个功能,需要两个工具:ipvsadm和keepalived。当然也有heartbeat这样的工具可以实现同样的功能,但相对于keepalived,heartbeat的实现要复杂得多(如撰写ipvsadm脚本,部署ldirectord,编写资源文件等)。在采用keepalived的方案里,只要ipvsadm被正确的安装,简单的配置唯一的文件keepalived就行了。2、Lvs核心ipvsIpvs(IPVirtualServer)是整个负载均衡的基础,如果没有这个基础,故障隔离与失败切换就毫无意义了。在大部分linux发行版中,ipvs被默认安装,而以本书前面介绍的方法定制安装系统,则ipvs没有被默认安装。除大部分linux发行版支持ipvs外,FreeBSD也可以支持LVS,只不过实现起来要麻烦一些。(一)安装ipvsIpvs具体实现是由ipvsadm这个程序来完成,因此判断一个系统是否具备ipvs功能,只需要察看ipvsadm程序是否被安装。察看ipvsadm程序最简单的办法就是在任意路径执行命令ipvsadm。表1为安装ipvsadm及未安装ipvsadm的输出对比。执行ipvsadm后的输出未安装ipvsadm-bash:ipvsadm:commandnotfoun安装ipvsadmIPVirtualServerversion1.2.1(size=4096)ProtLocalAddress:PortSchedulerFlags-RemoteAddress:PortForwardWeightActiveConnInActConn表1ipvsadm输出对比(样例来源centos5.2)●Centos5.2安装ipvsadm(假定当前目录为/root)1、从官方网站下载ipvsadm,目前最新的版本为ipvsadm-1.25.tar.gz,其发布时间是2008年11月5日。Wget取得该版本[1]。2、创建一个连接文件,其命令为:ln-sv/usr/src/kernels/2.6.18-92.el5PAE-i686/usr/src/linux.注意一定要与当前的运行的内核相一致,因为/usr/src/kernels目录下可多个目录。如果不创建这个连接文件,在编译时会出错,从而不能继续进行安装。3、解包。tarzxvfipvsadm-1.244、编译并安装。cdipvsadm-1.24;make;makeinstall可执行文件被安装到/sbin/ipvsadm.●检验ipvsadm是否被正确安装1、执行ipvsadm,看是否有表6-1第2栏的输出。2、检查当前加载的内核模块,看是否存在ip_vs模块。[root@hd-4ipvsadm-1.24]#lsmod|grepip_vsip_vs775690注1、只有执行ipvsadm以后,才会在内核加载ip_vs模块。注2、不能以查进程的方式判断ipvs是否运行。注[1]:如果下载最新的ipvsadm-1.25.tar.gz这个版本,在创建连接文件/usr/src/linux后,执行编译时,可能需要修改/boot/grub/grub.conf启动内核名称。一旦当前运行内核与连接文件所代表的内核名不一致时,将出现找不到*.h这样的错误,从而导致安装不能正常进行。(二)lvs客户端Lvs的客户端指负载均衡其/转发器(director)后面提供服务的真实机器。负载均衡类型(lb_kind)一般分直接路由模式DR、网络地址转换模式NAT以及隧道模式TUN三种。Lvs客户端的配置是根据其所采用的负载均衡种类(lb_kind)来做相应操作的。在我们的应用环境里,为了获得最高的性能,采用的负载均衡种类(lb_kind)是直接路由模式DR。不管采取哪一种模式,lvs客户端都不需安装额外的软件。Lvs可支持的客户端包括:各种GNU/linux、大部分unix已经windows。目前我已经成功运行的lvs客户端环境有centos、redhat、freebsd、windows等。需要注意的是,由于客户端操作系统的不同,lvs客户端的配置也就各不相同了。本书中,将以centos及freebsd两种操作系统作为lvs的客户端,给出其直接路由模式DR的配置方法。●lvs客户端(真实服务器)操作系统是centos时的配置文件[root@huludao-2~]#more/usr/local/bin/lvs_real#!/bin/bash#description:startrealserverVIP=61.135.20.16/etc/rc.d/init.d/functionscase$1instart)echostartLVSofREALServer/sbin/ifconfiglo:0$VIPbroadcast$VIPnetmask255.255.255.255upecho1/proc/sys/net/ipv4/conf/lo/arp_ignoreecho2/proc/sys/net/ipv4/conf/lo/arp_announceecho1/proc/sys/net/ipv4/conf/all/arp_ignoreecho2/proc/sys/net/ipv4/conf/all/arp_announce;;stop)/sbin/ifconfiglo:0downechocloseLVSDirectorserverecho0/proc/sys/net/ipv4/conf/lo/arp_ignoreecho0/proc/sys/net/ipv4/conf/lo/arp_announceecho0/proc/sys/net/ipv4/conf/all/arp_ignoreecho0/proc/sys/net/ipv4/conf/all/arp_announce;;*)echoUsage:$0{start|stop}exit1esac这里对配置文件里重要的一些项进行说明:1、vip(virtualip)。直接路由模式的vip必须跟服务器对外提供服务的ip地址在同一个网段,并且lvs负载均衡器和其他所有提供相同功能的服务器都使用这个vip.2、vip被绑定在环回接口lo0:0上,其广播地址是其本身,子网掩码是255.255.255.255。这与标准的网络地址设置有很大的不同。采用这种可变长掩码方式把网段划分成只含一个主机地址的目的是避免ip地址冲突。3、echo1,echo2这段的作用是抑制arp广播。如果不做arp抑制,将会有众多的机器向其他宣称:嗨!我是奥巴马,我在这里呢!,这样就乱套了。●lvs客户端(真实服务器)操作系统是freebsd时的配置文件fav1#more/usr/local/bin/lvs_real_bsd#!/usr/local/bin/bash#description:startrealserverVIP=61.135.20.16case$1instart)echostartLVSofREALServer/sbin/ifconfiglo0$VIPnetmask255.255.255.255alias-arpup;;stop)/sbin/ifconfiglo0aliasdownechocloseLVSDirectorserver/sbin/ifconfiglo0127.0.0.1arpup;;*)echoUsage:$0{start|stop}exit1esac在这里,我们同样对这个配置脚本的某些项进行说明:1、vip地址设置和arp抑制用/sbin/ifconfiglo0$VIPnetmask255.255.255.255alias-arpup这么一行就实现了。我们把这两种操作系统的lvs客户端做个比较,发现freebsd的配置书写上要简洁一些,是不是可以认为freebsd的网络功能比linux强大呢?(三)lvs客户端验证lvs客户端不必依赖负载均衡器就可以独立运行,只不过这种运行对负载均衡没有任何作用,当然也没有任何副作用,所以我们把lvs客户端配置完成后(配置文件就是一个shell脚本),可以单独运行它,来检验配置是否正确。●centos脚本配置脚本写好保存,给予脚本执行权限。脚本启停以start和stop这两个参数来控制。首先,我们来启动配置脚本,执行命令/usr/local/bin/lvs_realstart,接着我们来检查网络的状态:[root@huludao-2~]#ipadd1:lo:LOOPBACK,UP,LOWER_UPmtu16436qdiscnoqueuelink/loopback00:00:00:00:00:00brd00:00:00:00:00:00inet127.0.0.1/8scopehostloinet61.135.20.16/32brd61.135.20.16scopegloballo:0inet6::1/128scopehostvalid_lftforeverpreferred_lftforever2:eth0:BROADCAST,MULTICAST,UP,LOWER_UPmtu1500qdiscpfifo_fastqlen100link/ether00:15:17:60:21:a0brdff:ff:ff:ff:ff:ffinet61.135.20.101/24brd125.38.38.255scopeglobaleth0i
本文标题:负载均衡实战
链接地址:https://www.777doc.com/doc-4993242 .html