您的位置:首页 > 其它

LVS负载均衡集群详解

2012-08-04 18:10 162 查看
LVS实现负载均衡集群

一、首先介绍相关知识点

1、LVS系统结构
-->负载均衡层,这一层在整个集群的最前端,它由一个或多个调度服务器(Director Server)组成,LVS软件就运行在调度服务器上,它的作用是将客户端的请求根据某种算法分发到各个应用服务器上。
-->应用服务器层,这一层由多个应用服务器(Real Server)组成,并且每个应用服务器提供相同的服务,它处理接受通过调度服务器分发的客户端请求。
-->共享存储层,这一层是为了保持应用服务器的数据一致性而存在的。(本文不涉及此内容)

2、LVS负载均衡的类型
-->VS/NAT,通过网络地址转换的方式实现,在这种方式中调度服务器将改写客户端发送的请求报文中的目标IP地址和端口,将其改写为应用服务器的IP地址和服务端口,此时调度服务器充当一个类似与路由器使用DNAT静态映射的功能,同样应用服务器响应的数据包也是经过调度服务器转换之后发送给客户端,此种实现方式由于入站和出站数据包都要经过调度服务器,所以其工作效率并不高,往往也成为整个LVS系统的瓶颈。
-->VS/TUN,通过IP隧道技术实现,IP隧道是将一个IP报文封装到另一个IP报文中的技术,这可以使得目标为一个IP地址的数据报文能被封装和转发到另一个IP地址,当调度服务器把请求分发给应用服务器后,由应用服务器直接返回数据给客户端,而且调度服务器和应用服务器可以在不同网络中。
-->VS/DR,通过直接路由方式实现,这种方式的连接调度和管理与VS/NAT和VS/TUN一样,不过报文的转发方法不同,它改变的是客户端请求报文的目标MAC地址,所以调度服务器和应用服务器必须在同一物理网络中,也就是处于同一广播域中,这种和TUN一样调度服务器只处于客户端的请求可一极大降低调度服务器的负载。

3、三种方法的优缺点比较
1>VS/NAT的优点:后端应用服务器可以运行在任何支持TCP/IP的操作系统,服务器组可以使用私有IP地址;缺点:当后端服务器节点数目增加到一定数量时,调度服务器本身将成为系统的瓶颈
2>VS/TUN的优点:这种模式下调度服务器只处理客户端的请求报文,所以处理能力将大大提高;缺点:由于通过IP隧道技术实现,所以所有的服务器必须支持IP Tunneling或IP Encapsulation协议
3>VS/DR的优点:与VS/TUN一样,这种模式下调度服务器仅处理客户端请求报文,且没有IP隧道的开销,所以其转发效率是最高的;缺点:调度服务器和应用服务器必须在同一物理网络中

4、LVS负载调度算法
1>静态调度算法:
-->rr:轮询:该算法会按客户端的请求顺序均匀分配到各个应用服务器,不考虑其他因素。
-->wrr:加权轮询:根据应用服务器的能力强弱设置相应的权值,基于rr的基础权值大的应用服务器将会被分配更多的客户端请求。
-->dh:目标地址哈希:此算法应用于应用服务器为缓存服务器的场合,该算法尽可能的把相同的请求或同一用户的请求转发到同一个缓存服务器,可以提高缓存命中率。
-->sh:源地址哈希:该算法类似于dh算法,但将请求的源地址作为基准,尽可能的把关于同一用户的请求转发相同的服务器。
2>动态调度算法:
-->lc:最少连接:根据连接的多少来分配客户端的请求,计算标准为(活动连接x256+非活动连接),计算结果数值小的将接受下次访问请求。
-->wlc:加权最少连接:增加了权重的计算,lc算法的计算标准除以权重,计算结束数值小的将接受下次访问请求,是最常用的算法也是LVS默认的算法。
-->sed:最少期望延迟:同样根据连接来计算,但忽略了非活动连接的影响,计算标准为(活动连接+1)x256/权重,这种算法是为了避免应用服务器能力强的而不会最先获得客户端的请求响应权。
-->nq:永不排队:判断标准与sed相同,但是在其基础上如果有空闲的应用服务器则优先分配,这种算法是为了在有限客户端请求的情况下,权重小的应用服务器无法获得客户端请求的响应权,而过于空闲。
-->lblc:基于局部性的最少连接:该算法类似与dh算法,根据请求的目标IP地址找出改目标IP地址最近使用的服务器,若该服务器是可用的且没有超载,则将请求发送给该服务器,若服务器不在线或者超载,则用“最少连接”原则选出一个可用的服务器并将请求发送到该服务器,主要用于Cache集群系统。
-->lblcr:带复制的基于局部性的最少连接:此种算法与lblc类似,但是它维护的是一组服务器而不是lblc算法那样的一个服务器,该算法根据请求的目标IP地址找出该目标IP地址对应的服务器组,按“最少连接”原则从服务器组中选出一台服务器,若该服务器没有超载则将请求转发到该服务器,若服务器超载,则按“最少连接”原则从整个集群系统中选出一台服务器加入到服务器组中,将请求转发到该服务器,同时,当该服务器组中有一段时间没有被修改,将最忙的服务器从服务器组中删除,以降低复制程度,同样主要用于Cache集群系统。

说明:之所以分为静态调度算法和动态调度算法是因为,静态调度算法是按照固定的算法标准计算不考虑其他因素,如果服务器不在线或在已达负载上限则客户端的请求将不会被转发,而动态调度算法则都设置了一系列的条件,来动态的分配客户端的请求,除非所有的应用服务器都不在线或都达到负载上限,否则客户端的请求都将会得到转发。

二、实例演示使用LVS,DR模型实现2台web服务器的负载均衡

实验环境拓扑如下图:



拓扑分析:共有三台服务器,一台作为Director放置在前端,客户端的请求均被发送至Director的VIP192.168.56.200,也就是本例中的eth1:0,其DIP为192.168.56.103,另外两台为Real Server负责处理从Director转发来的客户端请求,其地址分别为192.168.56.101和192.168.56.102。

1、配置前的准备工作
-->Director端配置:
1>、配置网卡的子接口地址为VIP,在本实验中为192.168.56.200
[root@director ~]# ifconfig eth1:0 192.168.56.200 up
使之永久生效也可以编辑配置文件:
[root@director ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth1:0
添加如下内容:
DEVICE=eth1:0
ONBOOT=yes
IPADDR=192.168.56.200
NETMASK=255.255.255.0

2>、添加路由条目使访问eth1:0接口的数据包响应时都通过eth1:0发送
[root@director ~]# route add -host 192.168.56.200 dev eth1:0

3>、开启路由转发功能
[root@director ~]# echo 1 > /proc/sys/net/ipv4/ip_forward

-->Real Server端配置:
1>、配置参数禁止通过eth1网卡响应关于配置在其lo:0接口上的地址的arp请求,以避免出提示IP冲突的问题
[root@node1 ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
[root@node1 ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
[root@node1 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
[root@node1 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
使之永久生效编辑配置文件:
[root@node1 ~]# vim /etc/sysctl.conf
添加如下内容:
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
[root@node1 ~]# sysctl -p //使配置生效

2>、添加lo:0接口并配置VIP
[root@node1 ~]# ifconfig lo:0 192.168.56.200 netmask 255.255.255.255 broadcast 192.168.56.200 up
使之永久生效可编辑配置文件:
[root@node1 ~]# vim /etc/sysconfig/network-scripts/ifcfg-lo:0
添加如下内容:
DEVICE=lo:0
IPADDR=192.168.56.200
NETMASK=255.255.255.255
BROADCAST=192.168.56.200
ONBOOT=yes

3>、添加路由条目使访问lo:0接口的数据包响应时都通过lo:0发送
[root@node1 ~]# route add -host 192.168.56.200 dev lo:0

4>、安装httpd并创建index.html文件
[root@node1 ~]# yum -y install httpd
[root@node1 ~]# echo node1 > /var/www/html/index.html
[root@node1 ~]# service httpd start

在node2节点上配置与node1相同的设置,但要把网页文件index.html的内容该为node2以方便测试。
说明:关于httpd的配置仅作测试使用详细配置请参考其他文档

2、安装ipvsadm软件包
[root@director ~]# rpm -ivh /media/cdrom/Cluster/ipvsadm-1.24-13.el5.i386.rpm

3、通过ipvsadm配置
[root@director ~]# ipvsadm -A -t 192.168.56.200:80 -s rr //定义集群服务为80端口HTTP服务,并指定算法和VIP地址
[root@director ~]# ipvsadm -a -t 192.168.56.200:80 -r 192.168.56.101 -g //定义集群节点并指定使用DR模型
[root@director ~]# ipvsadm -a -t 192.168.56.200:80 -r 192.168.56.102 -g //定义集群节点node2

4、测试负载均衡效果
通过浏览器访问VIP地址测试效果





通过测试发现由于算法为rr轮询算法刷新页面时会在node1和node2节点之间来回转换。

三、配置持久连接
在一些特殊场合可能需要服务器来保存客户端连接的session,如果按上边的方法配置当客户端刷新页面时会由于连接被定向到另外一台Real Server而造成session丢失,这个时候就需要调度器能够让这个连接一直被定向给同一台Real Server,这就是持久连接,配置其实很简单:

[root@director ~]# ipvsadm -E -t 192.168.56.200:80 -s rr -p 1800 //指定-E参数修改原来的定义集群服务器的内容后加-p选项跟上保持连接的时间,这里指定为1800秒,例如当客户端第一次访问时被定向到node2节点,那么在接下来的1800秒内这个客户端发送的所有请求都会被定向到node2节点,如果在1800秒超时后客户端没有断开连接则默认延迟2分钟,如果2分钟后客户端还没有断开连接则继续延迟2分钟,直到断开连接。

测试效果:



可以看到不管怎么刷新一直访问的node2节点。

四、配置持久防火墙标记连接
当httpd服务同时提供了http和https时即使使用了上边的持久连接,你会发现当从http协议转为https时会被定向到另外一个节点,因为上边的持久连接只能根据端口来实现,这时持久防火墙标记连接就可以发挥作用了,配置依然很简单:

[root@director ~]# iptables -t mangle -A PREROUTING -p tcp --dport 80 -j MARK --set-mark 6
[root@director ~]# iptables -t mangle -A PREROUTING -p tcp --dport 443 -j MARK --set-mark 6
以上两条iptables规则把访问80和443端口的数据包打上标记为6
[root@director ~]# ipvsadm -C //清空原有的设置
[root@director ~]# ipvsadm -A -f 6 -s rr -p 1800
[root@director ~]# ipvsadm -a -f 6 -r 192.168.56.101 -g
[root@director ~]# ipvsadm -a -f 6 -r 192.168.56.102 -g
执行了以上命令后就可以使客户端在由http转向https时依然被定向为同一台Real Server。

五、ipvsadm命令相关参数和选项说明
-->集群服务相关
-A:添加集群服务
-t:后跟VIP地址加端口号,指定TCP协议
-u:后跟VIP地址加端口号,指定UDP协议
-f:后跟防火墙标记
-s:后跟算法,指定调度算法
-E:修改集群服务,用法和-A一样
-D:后跟-t|-u|-f IP:PORT,删除已定义的集群服务
-->Real Server相关
-a:添加Real Server
-t:后跟VIP地址加端口号,指定TCP协议
-u:后跟VIP地址加端口号,指定UDP协议
-r:后跟RIP,指定Real Server的IP地址
-w:后跟正整数,指定该节点权重
-g:定义使用DR模式(默认)
-i:定义使用TUN模式
-m:定义使用NAT模式
-e:修改已定义的Real Server,用法和-a一样
-d:后跟-t|-u|-f VIP:PORT -r RIP,删除已定义的Real Server
-->全局相关
-L:显示ipvsadm的配置
-n:不解析主机和服务
--stats:显示数据包和数据大小的总数
--rate:显示数据包和数据大小的平均值
-S:保存配置至某文件中,也可使用ipvsadm-save命令
-R:将保存至文件中的配置应用起来,也可使用ipvsadm-restore命令

六、快速配置脚本
director脚本:

----------------------------------------------脚本内容开始----------------------------------------------
#!/bin/bash
#
VIP=192.168.56.200
RIP1=192.168.56.101
RIP2=192.168.56.102
# . /etc/init.d/functions
case $1 in
start)
/sbin/ifconfig eth0:0 $VIP netmask 255.255.255.255 broadcast $VIP up
/sbin/route add -host $VIP dev eth0:0
/sbin/ipvsadm -C
/sbin/ipvsadm -A -t $VIP:80 -s wlc
/sbin/ipvsadm -a -t $VIP:80 -r $RIP1 -g -w 1
/sbin/ipvsadm -a -t $VIP:80 -r $RIP2 -g -w 1
touch /var/lock/subsys/ipvsadm &> /dev/null
echo "ipvsadm is running"
;;
stop)
/sbin/ipvsadm -C
/sbin/ipvsadm -Z
/sbin/ifconfig eth0:0 down
rm -rf /var/lock/subsys/ipvsadm &> /dev/null
echo "ipvsadm is stoped"
;;
status)
if [ -e /var/lock/subsys/ipvsadm ];then
echo "ipvsadm is running"
else
echo "ipvsadm is stoped"
fi
;;
*)
echo "Usage: $0 {start|stop|status}"
;;
esac

----------------------------------------------------脚本内容结束--------------------------------------------
Real Server脚本:
----------------------------------------------------脚本内容开始--------------------------------------------

#!/bin/bash
#
VIP=192.168.56.200
case $1 in
start)
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
/sbin/ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP
/sbin/route add -host $VIP dev lo:0
echo "Real Server is running"
;;
stop)
echo 0 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 0 > /proc/sys/net/ipv4/conf/lo/arp_announce
echo 0 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 0 > /proc/sys/net/ipv4/conf/all/arp_announce
/sbin/ifconfig lo:0 down
echo "Real Server is stoped"
;;
status)
if /sbin/ifconfig lo:0 | grep addr &> /dev/null;then
echo "Real Server is running"
else
echo "Real Server is stoped"
fi
;;
*)
echo "Usage:$0 {start|stop|status}"
;;
esac

------------------------------------------------------脚本内容结束--------------------------------------------本文出自 “夜,幕” 博客,请务必保留此出处http://yooke.blog.51cto.com/4472498/954295
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: