LVS是Linux Virtual Server的简称,也就是Linux虚拟服务器,它是我国的章文嵩博士发起的一个开源项目,现在LVS已经是Linux标准内核的一部分。LVS主要用于多服务器的负载均衡,它工作在网络层,可以实现一个高性能,高可用的服务器群集,它具有良好的可靠性、可扩展性和可操作性,即使在集群的服务器中某台服务器无法正常工作,也不影响整体效果。官方站点:http://www.linuxvirtualserver.org。
如上图所示,LVS可分为三部分:
LVS是工作在网络层,LVS通过控制IP来实现负载均衡。IPVS是其具体的实现模块。IPVS的主要作用:安装在Director Server上,在Director Server虚拟一个对外访问的IP(VIP)。用户访问VIP,到达Director Server,Director Server根据一定的规则选择一个Real Server,处理完成后然后返回给客户端数据。
这些步骤产生了一些具体的问题,比如如何选择具体的Real Server,Real Server如何返回给客户端数据等等。IPVS为此有三种转发类型:
LVS-DR模型的工作原理:
我们都知道Director Server要选择不同的Real server,那么它具体如何选择Real Server以达到负载均衡的呢,IPVS支持十种调度方法。
一)静态调度:
①RR(Round Robin):轮询调度
轮询调度算法的原理是每一次把来自用户的请求轮流分配给内部中的服务器,从1开始,直到N(内部服务器个数),然后重新开始循环。算法的优点是其简洁性,它无需记录当前所有连接的状态,所以它是一种无状态调度
②WRR:weight:加权轮询
由于每台服务器的配置、安装的业务应用等不同,其处理能力会不一样。所以,我们根据服务器的不同处理能力,给每个服务器分配不同的权值,使其能够接受相应权值数的服务请求。
③SH:source hashing:源地址散列
根据请求的源IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器。
④DH:Destination hashing:目标地址散列
根据请求的目标IP地址,作为散列键(Hash Key)从静态分配的散列表找出对应的服务器。
二)动态调度:
①LC(Least-Connection):最少连接
最少连接调度算法是把新的连接请求分配到当前连接数最小的服务器,最小连接调度是一种动态调度短算法,它通过服务器当前所活跃的连接数来估计服务器的负载均衡。
②WLC(Weighted Least-Connection Scheduling):加权最少连接。
加权最小连接调度算法是最小连接调度的超集,各个服务器用相应的权值表示其处理性能。服务器的缺省权值为1,系统管理员可以动态地设置服务器的权限,加权最小连接调度在调度新连接时尽可能使服务器的已建立连接数和其权值成比例。
③SED(Shortest Expected Delay):最短期望延迟
基于wlc算法,简单算法:(active+1)*256/weight 【(活动的连接数+1)*256/除以权重】
④NQ(never queue):永不排队(改进的sed)
无需队列,如果有台realserver的连接数=0就直接分配过去,不需要再进行sed运算。
⑤LBLC(Locality-Based Least Connection):基于局部性的最少连接
基于局部性的最少连接调度算法根据请求的目标IP地址找出该目标IP地址最近使用的RealServer,若该Real Server是可用的且没有超载,将请求发送到该服务器;若服务器不存在,或者该服务器超载且有服务器处于一半的工作负载,则用“最少链接”的原则选出一个可用的服务器,将请求发送到该服务器。
⑥LBLCR(Locality-Based Least Connections withReplication):带复制的基于局部性最少链接
带复制的基于局部性最少链均衡,该算法根据请求的目标IP地址找出该目标IP地址对应的服接调度算法也是针对目标IP地址的负载务器组,按“最小连接”原则从服务器组中选出一台服务器,若服务器没有超载,将请求发送到该服务器;若服务器超载,则按“最小连接”原则从这个集群中选出一台服务器,将该服务器加入到服务器组中,将请求发送到该服务器。
实验环境三台Linux主机
Diretor server:192.168.52.20
Real server1:192.168.52.121
Real server2:192.168.52.122
下面我们VS/DR介绍详细的配置过程:
在Real server 1和2上面,配置web服务。
yum install httpd -y #安装http服务
echo “This is 192.168.52.12x!!!” > /var/www/html/index.html #配置两台web文件用于测试显示效果
systemctl start httpd #启动http服务
通过浏览器输入IP访问效果如下。
Diretor server上安装LVS。
yum install ipvsadm -y
Director Server上绑定一个虚拟VIP地址192.68.52.250,此IP用于对外提供服务。
ifconfig ens33:0 192.168.52.250 broadcast 192.168.52.250 netmask 255.255.255.255 up
添加路由,访问192.168.52.250都走ens33:0这块网卡。
route add -host 192.168.52.250 dev ens33:0
启用系统的包转发功能。
echo “1”>/proc/sys/net/ipv4/ip_forward
如果之前配置过LVS,可先清除ipvsadm以前的设置。
ipvsadm -C
添加一个新的虚拟IP记录192.168.52.250,设置算法为rr轮询算法。
ipvsadm -A -t 192.168.52.250:80 -s rr
在新增的虚拟IP记录中新增两条real server记录,-g即为使用VS/DR模式
ipvsadm -a -t 192.168.52.250:80 -r 192.168.52.121:80 -g
ipvsadm -a -t 192.168.52.250:80 -r 192.168.52.122:80 -g
启用LVS服务。
ipvsadm
两台real server上的配置:
在环回口上绑定了虚拟IP地址,并添加路由。
ifconfig ens33:0 192.168.52.250 broadcast 192.168.52.250 netmask 255.255.255.255 up
route add -host 192.168.52.250 dev lo:0
禁用本机的ARP请求。
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
最后在其他客户端机子上面,访问http://192.168.52.250/,则可以看到结果了,外部客户端的请求被均衡的分配到两台Real Server上,出现不同的界面。