LVS+Ldirectord实现Web服务器的负载均衡及故障转移

it2022-05-05  112

LVS是1998年5月由章文嵩博士发起和领导的优秀的集群解决方案,许多商业的集群产品,比如RedHat的Piranha,TurboLinux公司的Turbo Cluster等,都是基于LVS的核心代码的。在现实的应用中,LVS得到了大量的部署。 1.3 LVS集群的特点

功能 有实现三种IP负载均衡技术和八种连接调度算法的IPVS软件。在IPVS内部实现上,采用了高效的Hash函数和垃圾回收机制,能正确处理所调度报文相关的ICMP消息(有些商品化的系统反而不能)。虚拟服务的设置数目没有限制,每个虚拟服务有自己的服务器集。它支持持久的虚拟服务(如HTTP Cookie和HTTPS等需要该功能的支持),并提供详尽的统计数据,如连接的处理速率和报文的流量等。针对大规模拒绝服务(Deny of Service)攻击,实现了三种防卫策略。 有基于内容请求分发的应用层交换软件KTCPVS,它也是在Linux内核中实现。有相关的集群管理软件对资源进行监测,能及时将故障屏蔽,实现系统的高可用性。主、从调度器能周期性地进行状态同步,从而实现更高的可用性。 适用性

后端服务器可运行任何支持TCP/IP的操作系统,包括Linux,各种Unix(如FreeBSD、Sun Solaris、HP Unix等),Mac/OS和Windows NT/2000等。 负载调度器能够支持绝大多数的TCP和UDP协议,无需对客户机和服务器作任何修改,可适用大多数Internet服务。

性能 LVS服务器集群系统具有良好的伸缩性,可支持几百万个并发连接。配置100M网卡,采用VS/TUN或VS/DR调度技术,集群系统的吞吐量可高达1Gbits/s;如配置千兆网卡,则系统的最大吞吐量可接近10Gbits/s。 可靠性 LVS服务器集群软件已经在很多大型的、关键性的站点得到很好的应用,所以它的可靠性在真实应用得到很好的证实。有很多调度器运行一年多,未作一次重启动。 软件许可证(免费)

LVS集群软件是按GPL(GNU Public License)许可证发行的自由软件,这意味着你可以得到软件的源代码,有权对其进行修改,但必须保证你的修改也是以GPL方式发行。

1.4 Ldirectord简介 ldirectord(Linux Director Daemon)是Jacob Rief编写的一个独立程序,以实现对LVS中的realserver管理和监测,由于LVS本身不能实现realserver的故障转移,因此需要ldirectord来帮助实现。 1.5 LVS的安装 LVS是基于Linux内核的,目前的主流版本一般已经包含了LVS,所以不需要另外安装,如果没有包含,就需要手动编译linux内核来安装,这个过程比较复杂,这里不再描述。 ipvsadm是用来管理和加载LVS配置的,需要手工安装,过程如下:

1下载 http://www.linuxvirtualserver.org/software/kernel-2.6/ipvsadm-1.24-6.src.rpm 注意ipvsadm-1.25版本只支持2.6.28以上的内核,需要升级系统内核 2安装

rpmbuild --rebuild ipvsadm-1.24-6.src.rpm

报错

error: Legacy syntax is unsupported: copyright error: line 7: Unknown tag: Copyright: GNU General Public Licence cd /usr/src/redhat/SPECS #编辑spec文件,把标签Copyright改成License

vi ipvsadm.spec rpmbuild -ba ipvsadm.spec ln -s /usr/src/kernels/2.6.18-92.el5-i686 /usr/src/linux rpm -ivh /usr/src/redhat/RPMS/i386/ipvsadm-1.24-6.i386.rpm

3 ipvsadm的使用

#清除配置 ipvsadm -C

#添加一个virtual Service,-t表示TCP service,-s rr:表示轮询的方法,缺省为wcl ipvsadm -A -t 192.168.100.200:80 -s rr

#添加一个real server到virtual Service中,-r:realserver的地址,

#-g:DR(Direct Routing) -i(IP Tunneling) -m NAT(Network Address Translation)

ipvsadm -a -t 192.168.100.200:80 -r 192.168.100.2:80 -g

ipvsadm -a -t 192.168.100.200:80 -r 192.168.100.3:80 -g #查看server列表 ipvsadm –Ln

#查看连接状态 Ipvsadm -Lcn

6. 保存当前设置到文件中 ipvsadm-save > /etc/sysconfig/ipvsadm

7.从文件中加载设置

ipvsadm-restore < /etc/sysconfig/ipvsadm

默认会加载/etc/sysconfig/ipvsadm,或/etc/ipvsadm.rules 8.启动服务 service ipvsadm start

9.将服务设置为自动启动

chkconfig --level 35 ipvsadm on 当然,如果我们使用ldirectord来管理LVS,就不需要使用ipvsadm了,只是有时会需要使用ipvsadm查看LVS的连接状态。 1.6 Ldirectord的安装 由于最新版本的Ldirectord是包含在Heartbeat安装包中的,因此,安装好Heartbeat,就有了Ldirectord,Heartbeat的安装过程见《使用Heartbeat实现LVS的故障转移.doc》。 1.7 LVS DIRECTOR的配置

真实IP

/etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0

IPADDR=192.168.100.10

NETMASK=255.255.255.0 ONBOOT=yes

虚拟

IP /etc/sysconfig/network-scripts/ifcfg-eth0:100 DEVICE=eth0:100

IPADDR=192.168.100.200

NETMASK=255.255.255.0 ONBOOT=yes

重启网络使配置生效

service network restart

1.8 ApacheServer的配置

ApacheServer1

/etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 IPADDR=192.168.100.2 NETMASK=255.255.255.0 ONBOOT=yes

DEVICE=lo:100 /etc/sysconfig/network-scripts/ifcfg-lo:100 IPADDR=192.168.100.200 NETMASK=255.255.255.255 ONBOOT=yes

 service network restart

  ApacheServer2 /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 IPADDR=192.168.100.3 NETMASK=255.255.255.0 ONBOOT=yes

/etc/sysconfig/network-scripts/ifcfg-lo:100 DEVICE=lo:100 IPADDR=192.168.100.200 NETMASK=255.255.255.255 ONBOOT=yes

service network restart

两台ApacheServer都需要关闭 arp /etc/sysctl.conf中增加 #foripvs net.ipv4.conf.lo.arp_ignore = 1 net.ipv4.conf.lo.arp_announce = 2 net.ipv4.conf.all.arp_ignore = 1 net.ipv4.conf.all.arp_announce = 2 net.ipv4.conf.default.rp_filter = 1 #end of ipvs

sysctl -p使其生效

1.9 Ldirectord的配置

chkconfig --add ldirectord chkconfig –level 35 ldirectord on vi /etc/ha.d/ldirectord.cf

# Global Directives checktimeout=3 checkinterval=1 #fallback=127.0.0.1:80 autoreload=yes #logfile="/var/log/ldirectord.log" #logfile="local0" #emailalert="admin@x.y.z" #emailalertfreq=3600 #emailalertstatus=all quiescent=yes

# Sample for an http virtual service virtual=192.168.100.200:80 real=192.168.100.2:80 gate real=192.168.100.3:80 gate fallback=127.0.0.1:80 gate service=http request=".healthcheck.html" receive="OKAY" # virtualhost=some.domain.com.au scheduler=rr #persistent=600 #netmask=255.255.255.255 protocol=tcp checktype=negotiate checkport=80 # request="index.html" # receive="Test Page" # virtualhost=www.x.y.z

ApacheServer上需要增加检查文件 echo "OKAY" > /usr/local/apache2/htdocs/.healthcheck.html

启动ldirectord /etc/rc.d/init.d/ ldirectord start

如果启动遇到错误starting ldirectord... Can't locate Mail/Send.pm ,则需要安装下面两个包: rpm -ivh perl-TimeDate-1.16-1.2.el5.rf.noarch.rpm rpm -ivh perl-MailTools-1.77-1.el5.noarch.rpm

1.10 测试

1.10.1 测试负载均衡 访问http://192.168.100.200/tests.php,第一次显示 This is 100.2! 1261385691 1261387336 eqqrp3g8ko3i9bqkr40tmo9pf1

过一会儿再刷新,显示 This is 100.3! 1261385691 1261387378 eqqrp3g8ko3i9bqkr40tmo9pf1

说明负载均衡正常

1.10.2 测试故障转移 查看LVS当前状态 ipvsadm –Ln IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 192.168.100.200:80 rr -> 192.168.100.2:80 Route 1 0 0 -> 192.168.100.3:80 Route 1 0 0

Weight都为1,说明两个服务器正常 停掉100.3上的apache再看 IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 192.168.100.200:80 rr -> 192.168.100.2:80 Route 1 0 0 -> 192.168.100.3:80 Route 0 0 0 100.3的Weight为0,说明100.3已经被LVS从服务器列表中暂时排除掉 启动100.3上的apache再看 IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 192.168.100.200:80 rr -> 192.168.100.2:80 Route 1 0 0 -> 192.168.100.3:80 Route 1 0 0

100.3被重新加入到列表中。

1.10.3 测试性能  单机 ab -n 20000 -c 1000 http://192.168.100.2/tests.php Requests per second: 1561.95 [#/sec] (mean) Time per request: 640.224 [ms] (mean) Time per request: 0.640 [ms] (mean, across all concurrent requests) Transfer rate: 701.63 [Kbytes/sec] received

Connection Times (ms) min mean[+/-sd] median max Connect: 0 32 340.0 2 8999 Processing: 1 242 1185.6 32 12740 Waiting: 0 238 1186.1 27 12740 Total: 18 275 1242.3 34 12801

Percentage of the requests served within a certain time (ms) 50% 34 66% 36 75% 37 80% 38 90% 44 95% 660 98% 6272 99% 6331 100% 12801 (longest request)

ab -n 20000 -c 1000 http://192.168.100.3/tests.php

Requests per second: 3142.92 [#/sec] (mean) Time per request: 318.175 [ms] (mean) Time per request: 0.318 [ms] (mean, across all concurrent requests) Transfer rate: 1411.80 [Kbytes/sec] received

Connection Times (ms) min mean[+/-sd] median max Connect: 0 28 265.4 3 3008 Processing: 1 193 819.5 36 6300 Waiting: 0 186 820.3 28 6299 Total: 22 222 866.8 39 6362

ab -n 20000 -c 1000 http://192.168.100.3/tests.php

Percentage of the requests served within a certain time (ms) 50% 39 66% 41 75% 43 80% 45 90% 242 95% 670 98% 3116 99% 6325 100% 6362 (longest request)

  双机 ab -n 20000 -c 1000 http://192.168.100.200/tests.php

Requests per second: 4858.15 [#/sec] (mean) Time per request: 205.840 [ms] (mean) Time per request: 0.206 [ms] (mean, across all concurrent requests) Transfer rate: 2182.28 [Kbytes/sec] received

Connection Times (ms) min mean[+/-sd] median max Connect: 0 43 320.5 5 3041 Processing: 1 124 322.2 64 3109 Waiting: 0 108 321.7 45 3094 Total: 7 167 456.1 69 3310 Percentage of the requests served within a certain time (ms) 50% 69 66% 86 75% 97 80% 105 90% 274 95% 631 98% 3031 99% 3105 100% 3310 (longest request)

双机的性能基本是单机的总和,说明LVS做负载均衡对性能基本没有消耗。

 

转载于:https://www.cnblogs.com/seawwh/archive/2011/10/28/2227441.html

相关资源:各显卡算力对照表!

最新回复(0)