




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、11/11用LVS构架负载均衡Linux集群系统最近有客户需要一个负载均衡方案,笔者对各种软硬件的负载均衡方案进行了调查和比较,从IBM sServer Cluster、Sun Cluster PlatForm等硬件集群,到中软、红旗、TurboLinux的软件集群,发现无论采用哪个厂商的负载均衡产品其价格都是该客户目前所不能接受的。于是笔者想到了开放源项目Linux Virtual Server(简称LVS)。经过对LVS的研究和实验,终于在Red Hat 9.0上用LVS成功地构架了一组负载均衡的集群系统。整个实现过程整理收录如下,供读者参考。 选用的LVS实际上是一种Linux操作系统上
2、基于IP层的负载均衡调度技术,它在操作系统核心层上,将来自IP层的TCP/UDP请求均衡地转移到不同的服务器,从而将一组服务器构成一个高性能、高可用的虚拟服务器。使用三台机器就可以用LVS实现最简单的集群,如图1所示。图1显示一台名为Director的机器在集群前端做负载分配工作;后端两台机器称之为Real Server,专门负责处理Director分配来的外界请求。该集群的核心是前端的Director机器,LVS就是安装在这台机器上,它必须安装Linux。Real Server则要根据其选用的负载分配方式而定,通常Real Server上的设置比较少。接下来介绍Director机器上LVS的
3、安装过程。 图1 LVS实现集群系统结构简图安装 LVS的安装主要是在Director机器上进行,Real Server只需针对不同的转发方式做简单的设定即可。特别是对LVS的NAT方式,Real Server惟一要做的就是设一下缺省的网关。所以构架集群的第一步从安装Director机器开始。首先要在Director机器上安装一个Linux操作系统。虽然早期的一些Red Hat版本,如6.2、7.2、8.0等自带Red Hat自己的集群软件,或者是在核中已经支持LVS,但是为了更清楚地了解LVS的机制,笔者还是选择自行将LVS编入Linux核的方式进行安装,Linux版本采用Red Hat 9
4、.0。如果用户对Red Hat的安装比较了解,可以选择定制安装,并只安装必要的软件包。安装中请选择GRUB做为启动引导管理软件。因为GRUB在系统引导方面的功能远比LILO强大,在编译Linux核时可以体会它的方便之处。 LVS是在Linux核中实现的,所以要对原有的Linux核打上支持LVS的核补丁,然后重新编译核。支持LVS的核补丁可以从LVS的官方 下载,下载时请注意使用的Linux核心版本,必须下载和使用的Linux核版本相一致的LVS核补丁才行。对于Red Hat 9.0,其Linux核版本是2.4.20,所以对应核补丁应该是 /software/kernel-2.4/linux-2
5、.4.20-ipvs-1.0.9.patch.gz。笔者经过多次实验,使用Red Hat 9.0自带的Linux源代码无法成功编译LVS的相关模组。由于时间关系笔者没有仔细研究,而是另外从上下载了一个tar包格式的2.4.20核来进行安装,顺利完成所有编译。下面是整个核的编译过程: 1.删除Red Hat自带的Linux源代码 # cd /usr/src# rm -rf linux*2.下载2.4.20核 # cd /usr/src3.解压到当前目录/usr/src # cd /usr/src4.建立文件 # cd /usr/src # ln -s linux-2.4.20 linux-2.4
6、 # ln -s linux-2.4.20 linux 5.打上LVS的核补丁 # cd /usr/src# cd /usr/src/linux# patch 在打补丁时,注意命令执行后的信息,不能有任何错误信息,否则核心或模组很可能无法成功编译。 6.打上修正ARP问题的核补丁 # cd /usr/src# cd /usr/src/linux这一步在Director机器上可以不做,但是在使用LVS/TUN和LVS/DR方式的Real Server上必须做。 7.为新核心命名 打开/usr/src/linux/Makefile。注意,在开始部分有一个变量EXTRAVERSION可以自行定义。修
7、改这个变量,比如改成“EXTRAVERSION=-LVS”后,编译出的核心版本号就会显示成2.4.20-LVS。这样给出有含义的名称将有助于管理多个Linux核心。 8.检查源代码 # make mrproper这一步是为确保源代码目录下没有不正确的.o文件与文件的互相依赖。因为是新下载的核,所以在第一次编译时,这一步实际可以省略。 9.配置核心选项 # make menuconfig命令执行后会进入一个图形化的配置界面,可以通过这个友好的图形界面对核进行定制。此过程中,要注意对硬件驱动的选择。Linux支持丰富的硬件,但对于服务器而言,用不到的硬件驱动都可以删除。另外,像Multimedia
8、 devices、Sound、Bluetooth support、Amateur Radio support等项也可以删除。 注意,以下几项配置对LVS非常重要,请确保作出正确的选择: (1)Code maturity level options项 对此项只有以下一个子选项,请选中为*,即编译到核中去。 *Prompt for development and/or incomplete code/drivers(2)Networking options项 对此项的选择可以参考以下的配置,如果不清楚含义可以查看帮助: Packet socket Packet socket: mmapped IO
9、 Netlink device emulation* Network packet filtering (replaces ipchains) Network packet filtering debugging* Socket Filtering Unix domain sockets* TCP/IP networking* IP: multicasting* IP: advanced router* IP: policy routing IP: use netfilter MARK value as routing key IP: fast network address translat
10、ion IP: tunneling* IP: broadcast GRE over IP IP: multicast routing IP: ARP daemon support (EXPERIMENTAL) IP: TCP Explicit Congestion Notification support IP: TCP syncookie support (disabled per default) IP: Netfilter Configuration IP: Virtual Server Configuration (3)Networking options项中的IP: Virtual
11、Server Configuration项 如果打好了LVS的核补丁,就会出现此选项。进入Virtual Server Configuration选项,有以下子选项: virtual server support (EXPERIMENTAL) * IP virtual server debugging (12) IPVS connection table size (the Nth power of 2) IPVS scheduler round-robin scheduling weighted round-robin scheduling least-connection scheduli
12、ng scheduling weighted least-connection scheduling locality-based least-connection scheduling locality-based least-connection with replication scheduling destination hashing scheduling source hashing scheduling shortest expected delay scheduling never queue scheduling IPVS application helper FTP pro
13、tocol helper以上所有项建议全部选择。 (4)Networking options项中的IP: Netfilter Configuration项 对于2.4版本以上的Linux Kernel来说,iptables是取代早期ipfwadm和ipchains的更好选择,所以除非有特殊情况需要用到对ipchains和ipfwadm的支持,否则就不要选它。本文在LVS/NAT方式中,使用的就是iptables,故这里不选择对ipchains和ipfwadm的支持: ipchains (2.2-style) support ipfwadm (2.0-style) support10. 编译核
14、(1)检查依赖关系 # make dep确保关键文件在正确的路径上。 (2)清除中间文件 # make clean确保所有文件都处于最新的版本状态下。 (3)编译新核心 # make bzImage(4)编译模组 # make modules编译选择的模组。 (5)安装模组 # make modules_install# depmod -a生成模组间的依赖关系,以便modprobe定位。 (6)使用新模组 # rm /boot/System.map# ln -s /boot/System.map-2.4.20-LVS /boot/System.map# rm /boot/vmlinuz# ln
15、 -s /boot/vmlinuz-2.4.20-LVS /boot/vmlinuz(7)修改GRUB,以新的核心启动 执行完new-kernel-pkg命令后,GRUB的设置文件/etc/grub.conf中已经增加了新核心的启动项,这正是开始安装Linux时推荐使用GRUB做引导程序的原因。 grub.conf中新增容如下:title Red Hat Linux (2.4.20-LVS) root (hd0,0) kernel /boot/vmlinuz-2.4.20LVS ro root=LABEL=/将Kernel项中的root=LABEL=/改成 root=/dev/sda1 (这里
16、的/dev/sda1是笔者Linux的根分区,读者可根据自己的情况进行不同设置)。 保存修改后,重新启动系统: # reboot系统启动后,在GRUB的界面上会出现Red Hat Linux(2.4.20-LVS)项。这就是刚才编译的支持LVS的新核心,选择此项启动,看看启动过程是否有错误发生。如果正常启动,ipvs将作为模块加载。同时应该注意到,用LVS的核启动后在/proc目录中新增了一些文件,比如/proc/sys/net/ipv4/vs/*。 11.安装IP虚拟服务器软件ipvsadm 用支持LVS的核启动后,即可安装IP虚拟服务器软件ipvsadm了。用户可以用tar包或RPM包安装
17、,tar包可以从以下地址 /software/kernel-2.4/ipvsadm-1.21.tar.gz下载进行安装。 这里采用源RPM包来进行安装: 6.rpm注意高版本的rpm命令去掉了-rebuild这个参数选项,但提供了一个rpmbuild命令来实现它。这一点和以前在Red Hat 6.2中以rpmrebuild XXX.src.rpm来安装源RPM包的习惯做法有所不同。 安装完,执行ipvsadm命令,应该有类似如下的信息出现: # ipvsadmIP Virtual Server version 1.0.9 (size=4096)Prot LocalAddress:Port Sc
18、heduler Flags - RemoteAddress:Port Forward Weight ActiveConn InActConn出现类似以上信息,表明支持LVS的核和配置工具ipvsadm已完全安装,这台Director机器已经初步安装完成,已具备构架各种方式的集群的条件。 原理接下来的工作是根据实际需求选择采用何种负载分配方式和调度算法。目前LVS主要有三种请求转发方式和八种调度算法。根据请求转发方式的不同,所构架集群的网络拓扑、安装方式、性能表现也各不相同。用LVS主要可以架构三种形式的集群,分别是LVS/NAT、LVS/TUN和LVS/DR,可以根据需要选择其中一种。在选定转
19、发方式的情况下,采用哪种调度算法将决定整个负载均衡的性能表现,不同的算法适用于不同的应用场合,有时可能需要针对特殊场合,自行设计调度算法。LVS的算法是逐渐丰富起来的,最初LVS只提供4种调度算法,后来发展到以下八种: 1.轮叫调度(Round Robin) 调度器通过“轮叫”调度算法将外部请求按顺序轮流分配到集群中的真实服务器上,它均等地对待每一台服务器,而不管服务器上实际的连接数和系统负载。 2.加权轮叫(Weighted Round Robin) 调度器通过“加权轮叫”调度算法根据真实服务器的不同处理能力来调度访问请求。这样可以保证处理能力强的服务器能处理更多的访问流量。调度器可以自动问
20、询真实服务器的负载情况,并动态地调整其权值。 3.最少(Least Connections) 调度器通过“最少连接”调度算法动态地将网络请求调度到已建立的数最少的服务器上。如果集群系统的真实服务器具有相近的系统性能,采用“最小连接”调度算法可以较好地均衡负载。 4.加权最少(Weighted Least Connections) 在集群系统中的服务器性能差异较大的情况下,调度器采用“加权最少”调度算法优化负载均衡性能,具有较高权值的服务器将承受较大比例的活动连接负载。调度器可以自动问询真实服务器的负载情况,并动态地调整其权值。 5.基于局部性的最少(Locality-Based Least C
21、onnections) “基于局部性的最少”调度算法是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。该算法根据请求的目标IP地址找出该目标IP地址最近使用的服务器,若该服务器是可用的且没有超载,将请求发送到该服务器;若服务器不存在,或者该服务器超载且有服务器处于一半的工作负载,则用“最少”的原则选出一个可用的服务器,将请求发送到该服务器。 6.带复制的基于局部性最少(Locality-Based Least Connections with Replication) “带复制的基于局部性最少”调度算法也是针对目标IP地址的负载均衡,目前主要用于Cache集群系统。它与LBLC算法
22、的不同之处是它要维护从一个目标IP地址到一组服务器的映射,而LBLC算法维护从一个目标IP地址到一台服务器的映射。该算法根据请求的目标IP地址找出该目标IP地址对应的服务器组,按“最小连接”原则从服务器组中选出一台服务器,若服务器没有超载,将请求发送到该服务器;若服务器超载,则按“最小连接”原则从这个集群中选出一台服务器,将该服务器加入到服务器组中,将请求发送到该服务器。同时,当该服务器组有一段时间没有被修改,将最忙的服务器从服务器组中删除,以降低复制的程度。 7.目标地址散列(Destination Hashing) “目标地址散列”调度算法根据请求的目标IP地址,作为散列键(Hash Ke
23、y)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。 8.源地址散列(Source Hashing) “源地址散列”调度算法根据请求的源IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器,若该服务器是可用的且未超载,将请求发送到该服务器,否则返回空。 了解这些算法原理能够在特定的应用场合选择最适合的调度算法,从而尽可能地保持Real Server的最佳利用性。当然也可以自行开发算法,不过这已超出本文围,请参考有关算法原理的资料。实例理解了上述关于请求转发方式和调度算法的基本概念后,就可以运用LVS来具体实现几种不同方式的
24、负载均衡的集群系统。LVS的配置是通过前面所安装的IP虚拟服务器软件ipvsadm来实现的。ipvsadm与LVS的关系类似于iptables和NetFilter的关系,前者只是一个建立和修改规则的工具,这些命令的作用在系统重新启动后就消失了,所以应该将这些命令写到一个脚本里,然后让它在系统启动后自动执行。网上有不少配置LVS的工具,有的甚至可以自动生成脚本。但是自己手工编写有助于更深入地了解,所以本文的安装没有利用其它第三方提供的脚本,而是纯粹使用ipvsadm命令来配置。 下面就介绍一下如何配置LVS/NAT、LVS/TUN、LVS/DR方式的负载均衡集群。 1.设定LVS/NAT方式的负
25、载均衡集群 NAT是指Network Address Translation,它的转发流程是:Director机器收到外界请求,改写数据包的目标地址,按相应的调度算法将其发送到相应Real Server上,Real Server处理完该请求后,将结果数据包返回到其默认网关,即Director机器上,Director机器再改写数据包的源地址,最后将其返回给外界。这样就完成一次负载调度。 构架一个最简单的LVS/NAT方式的负载均衡集群如图2所示。 图2 LVS/NAT方式的集群简图Real Server可以是任何的操作系统,而且无需做任何特殊的设定,惟一要做的就是将其默认网关指向Director
26、机器。Real Server可以使用局域网的部IP(/24)。Director要有两块网卡,一块网卡绑定一个外部IP地址(),另一块网卡绑定局域网的部IP(54),作为Real Server的默认网关。 这里将所有LVS的配置命令写到一个可执行脚本中,脚本如下: #!/bin/bash# Open IP Forwardingecho 1 /proc/sys/net/ipv4/ip_forward# To make the load balancer forward the masquerading packetsipvsadm -C# Choose the Weighted Round Rob
27、ingipvsadm -A -t :80 -s wrr # Set Real Serveripvsadm -a -t :80 -r :873 -m -w 2ipvsadm -a -t :80 -r :873 -m -w 3ipvsadm将该脚本保存为/root/lvs_nat.sh,然后加上可执行属性,执行它: # chmod a+x /root/lvs_nat.sh# /root/lvs_nat.sh运行该脚本后,一个简单的LVS/NAT方式的负载均衡集群已经成功架设。模拟多个用户从外界访问的80端口,用ipvsadm可以观看到以下信息: # ipvsadmIP Virtual Server
28、 version 1.0.9 (size=4096)Prot LocalAddress:Port Scheduler Flags - RemoteAddress:Port Forward Weight ActiveConn InActConnTCP : wrr - : Masq 3 2 0 - : Masq 2 1 0其中ActiveConn表示对应的Real Server当前有多少个正在活动的连接,InActConn表示不活动的连接数。从这里我们可以看到有3个 请求,被分别分配在不同的Real Server上,表明这个负载均衡集群正在成功运行中。 本例完成了这样一个简单的LVS/NAT集群,
29、由此可以看出,LVS/NAT方式实现起来最为简单,而且Real Server使用的是部IP,可以节省Real IP的开销。但因为执行NAT需要重写流经Director的数据包,在速度上有一定延迟;另外,当用户的请求非常短,而服务器的回应非常大的情况下,会对Director形成很大压力,成为新的瓶颈,从而使整个系统的性能受到限制。 2.设定LVS/TUN方式的负载均衡集群 TUN是指IP Tunneling,它的转发流程是:Director机器收到外界请求,按相应的调度算法将其通过IP隧道发送到相应Real Server,Real Server处理完该请求后,将结果数据包直接返回给客户。至此完成
30、一次负载调度。 最简单的LVS/TUN方式的负载均衡集群架构如图3所示。 LVS/TUN使用IP Tunneling技术,在Director机器和Real Server机器之间架设一个IP Tunnel,通过IP Tunnel将负载分配到Real Server机器上。Director和Real Server之间的关系比较松散,可以是在同一个网络中,也可以是在不同的网络中,只要两者能够通过IP Tunnel相连就行。收到负载分配的Real Server机器处理完后会直接将反馈数据送回给客户,而不必通过Director机器。实际应用中,服务器必须拥有正式的IP地址用于与客户机直接通信,并且所有服务
31、器必须支持IP隧道协议。 图3 LVS/TUN方式的集群简图这里将所有LVS的配置命令写到一个可执行脚本,脚本容如下: #!/bin/bash# Close IP Forwardingecho 0 /proc/sys/net/ipv4/ip_forwardifconfig eth0 downifconfig eth0 53 netmask broadcast 55 upifconfig eth0:0 54 netmask 55 broadcast 54 upipvsadm -Cipvsadm -A -t 54:80 -s wlcipvsadm -a -t 54:80 -r -i -w 3ipv
32、sadm -a -t 54:80 -r 01 -i -w 1ipvsadm将上面的脚本保存为/root/lvs_tun.sh。然后加上可执行属性,执行它: # chmod a+x /root/lvs_tun.sh# /root/lvs_tun.sh运行此脚本之后应该出现如下信息: # ./lvs-tun.shIP Virtual Server version 1.0.9 (size=4096)Prot LocalAddress:Port Scheduler Flags - RemoteAddress:Port Forward Weight ActiveConn InActConnTCP 54:
33、 wlc - 01: Tunnel10 0 - : Tunnel10 0另外在每台Real Server上还要执行如下的命令: ifconfig tunl0 54 netmask 55 broadcast 54 uproute add -host 54 dev tunl0echo 1 /proc/sys/net/ipv4/conf/all/hiddenecho 1 /proc/sys/net/ipv4/conf/tunl0/hidden注意Real Server的核必须打上修正ARP问题的核补丁,如Linux2.4.20的核是hidden-2.4.20pre10-1.diff,编译核的方法参见
34、Director机器。 通过本例来简单评价一下LVS/TUN方式。该方式中Director将客户请求分配到不同的Real Server,Real Server处理请求后直接回应给用户,这样Director就只处理客户机与服务器的一半连接,极提高了Director的调度处理能力,使集群系统能容纳更多的节点数。另外TUN方式中的Real Server可以在任何LAN或WAN上运行,这样可以构筑跨地域的集群,其应对灾难的能力也更强,但是服务器需要为IP封装付出一定的资源开销,而且后端的Real Server必须是支持IP Tunneling的操作系统。 3.设定LVS/DR方式的负载均衡集群 DR是
35、指Direct Routing,它的转发流程是:Director机器收到外界请求,按相应的调度算法将其直接发送到相应Real Server,Real Server处理完该请求后,将结果数据包直接返回给客户,完成一次负载调度。 构架一个最简单的LVS/DR方式的负载均衡集群如图4所示。 Real Server和Director都在同一个物理网段中,Director的网卡IP是53,再绑定另一个IP:54作为对外界的virtual IP,外界客户通过该IP来访问整个集群系统。Real Server在lo上绑定IP:54,同时加入相应的路由。 Director端的实现脚本如下: #!/bin/bas
36、h# set ip_forward OFF for vs-dr director (1 on, 0 off)echo 0 /proc/sys/net/ipv4/ip_forwardifconfig eth0:0 54 netmask 55 broadcast 55 upipvsadm -Cipvsadm -A -t 54:80 -s wlc# Set Real Serveripvsadm -a -t 54:80 -r :873 -gipvsadm -a -t 54:80 -r :873 -gipvsadm图4 LVS/DR方式的集群简图将脚本保存为/root/lvs_dr.sh,加上可执行属性,执行它: # c
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 统编版语文跨学科整合教学计划
- 2025-2030中国细胞破碎机行业市场发展趋势与前景展望战略研究报告
- 2025-2030中国组合家具行业市场深度调研及前景趋势与投资研究报告
- 2025-2030中国纳米二氧化钛行业潜在需求现状与投资前景深度调查报告
- 2025-2030中国紧急切断阀行业市场发展趋势与前景展望战略研究报告
- 2025-2030中国糖衣杏仁糖果中的脊髓灰质炎疫苗(猴子肝细胞)行业市场发展趋势与前景展望战略研究报告
- 保险行业售后服务流程优化方案
- 爱的教育与教师职业发展的心得体会
- 水务公司节水管理规章制度
- 福利物资采购方案范本
- TOC600简明用户手册
- 日周月安全检查记录表
- 小学劳动技术 北京版 三年级上册 装饰链 纸拉链 课件
- 《思想道德与法治》2021版教材第二章
- 医院医疗机构麻醉科医生招聘考试试题与答案
- 混凝土模板支撑工程专项施工方案(140页)
- 智能家居毕业设计(共53页)
- 天府刘家漕历史的记忆
- HY∕T 0289-2020 海水淡化浓盐水排放要求
- 毕业设计说明书初稿-头孢曲松钠生产工艺设计
- [精品]纺织品出口生产企业(MID)报编申请表
评论
0/150
提交评论