前言:基于IPVS实现web服务的负载均衡的DR模型的实现。
首先让两台服务器当RealServer:让两台服务器都需要启动web服务,并提供不同的页面,方便以后测试的时候知道是哪台服务器在提供web服务。其中,RIP在eth0上,VIP在lo:0上;
Director的eth0上配置DIP,在eth0:0上配置VIP
RIP 1:192.168.1.7
RIP 2:192.168.1.8
VIP:192.168.1.2
DIP:192.168.1.50
RealServer:
首先在RealServer上定义两个参数:一个是ARP的响应级别,arp_ignore=1;另外一个是ARP的通告级别,arp_announce=2;用来实现来自客户请求VIP时RealServer上的VIP不予响应。(让调度器来响应,并分配给合适的RealServer来响应)
#echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
#echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
#echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
#echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
RealSever上的VIP配置在回环口上,其广播地址也为192.168.1.2,网关为255.255.255.255。(其响应报文要从eth0出去)
#ifconfig lo:0 192.168.1.2 broadcast 192.168.1.2 netmask 255.255.255.255 up
加一个路由信息:
#route add -host 192.168.1.2
Dirctor:
#ifconfig eth0:0 192.168.1.2 broadcast 192.168.1.2 netmask 255.255.255.255
#route add -host 192.168.1.2 dev eth0:0
#ipvsadm -A -t 192.168.1.2:80 -s wrr (添加一个集群服务,并指定为wrr的调度算法)
#ipvsadm -a -t 192.168.1.2:80 -r 192.168.1.7 -g -w 2 (-g指定DR模型,-w指定权重)
#ipvsadm -a -t 192.168.1.2:80 -r 192.168.1.8 -g -w 1
下面我们来检测下负载均衡能工作否:
现在调度器上执行# watch -n1 'ipvsadm -L -n --stats'来时刻关注那个响应的。
好了,试的访问下192.168.1.2吧:
这是192.168.1.8这台主机提供的服务;
这里我遇到一个小问题:需要等个几分钟再刷新网页才能出现来自另一台服务器的页面……(可能是我在虚拟机中做的实验,每个给的内存有点少了280左右的内存)也有可能我哪里出现问题了,还望各位大神给出宝贵的意见~
在每隔几分钟刷新n次页面后,很明显的可以在调度器上看到监控这两台服务器每个所响应的个数,大概是2比1的比例;因为我的规则里面是加权轮巡的,嘻嘻~
下面介绍下ipvsadm的几个参数:
ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p timeout] [-O] [-M netmask]
A:添加 E:编辑
-t:tcp -u:udp -f:firewallmark(防火墙标记,在lvs实现将多个服务(端口)捆绑,一起实现负载均衡。)
service-address:VIP:Port
-s:指定调度方法 (rr,wrr,sh,lc,wlc等)
删除一个集群服务:ipvsadm -D -t|u|f service-address
ipvsadm -a|e -t|u|f service-address -r server-address [-g|i|m] [-w weight] [-x upper] [-y lower]
-a:添加 -e;编辑
-r IP[:port] 指定realserver地址
指定lvs类型:-g:dr模型,(默认);-i tun模型 ;-m:nat模型
-w weight 指定权重;
删除一个:例:ipvsadm -d -t 192.168.1.2:80 -r 192.168.1.7
等配置好后记得保存:#service ipvsadm save(保存在/etc/sysyconfig/ipvsadm)
也可以使用一个特定的文件,方便以后的使用:
ipvsadm -S > /path/to/ipvsadm.rules 输入重定向
ipvsadm -R < /path/to/ipvsadm.rules 输出重定向
查看:#ipvsadm -L|l -n --rate --stats