![aa2495d1dd836e7be97c61b589f48860.png](https://img-blog.csdnimg.cn/img_convert/aa2495d1dd836e7be97c61b589f48860.png)
一、lvs负载均衡简介
LVS(Linux Virtual Server)是最常用的开源负载均衡之一,LVS已经被集成到Linux内核模块,具有性能高的特点。终端互联网用户从外部访问企业的负载均衡服务器,也就是LVS调度器,调度器根据自己预设的算法决定将该请求发送给后端的某台Web服务器。
LVS调度算法非常灵活,常用有以下几种
1.轮询调度
轮询调度(Round Robin),最大的特点就是实现简单。轮询算法适合所有服务器的性能相同,调度器会将收到的请求平均分配到每个真实服务器。
2.加权轮询调度
加权轮询(Weight Round Robin),主要是对轮询算法的一种优化与补充,WRR会考虑到每台服务器的性能,并给每台服务器添加一个权值,权值越高的服务器,将处理更多的请求。
3.最小连接调度
最小连接(Least Connections ),是把新的连接请求分配到当前连接数最小的服务器。
4.加权最小连接调度
加权最少连接(Weight Least Connections),作为最小连接的补充,和wrr一样,可以给服务器分配不同的权值。
5.源地址散列调度
源地址散列调度(Source Hashing ),先根据请求的源IP地址,分配固定的服务器。如果第一次连接的服务器未超载,那么相同的源地址一直连接相同的服务器。
二、lvs的实现。
Lvs的组网模型有nat,dr,tunnel等,其中dr模式的性能较高,本实验以lvs的dr模式为例,来看lvs的实现及原理。
相关概念
Lvs服务器:作为负载均衡节点,负责接收客户端的请求,并进行调度。
真实服务器(realserver):真正处理请求的服务器。
VIP:客户端访问的ip,这个ip在lvs服务器,真实服务器上都存在。其中真实服务器必须配在lo接口上。
![352a5c82f07f432811acf60165895831.png](https://img-blog.csdnimg.cn/img_convert/352a5c82f07f432811acf60165895831.png)
Lvs负载均衡节点的物理网卡地址为192.168.1.236,vip为192.168.1.200
真实服务器节点1物理网卡地址为192.168.1.237,vip为192.168.1.200
真实服务器节点2物理网卡地址为192.168.1.238,vip为192.168.1.200
- 实现步骤
在lvs节点安装lvs软件,在真实服务器部署好相同的web服务。
通过shell脚本实现lvs集群的配置
Lvs节点脚本如下
#! /bin/bash
echo 1 > /proc/sys/net/ipv4/ip_forward
ipv=/sbin/ipvsadm
vip=192.168.1.200
rs1=192.168.1.237
rs2=192.168.1.238
ifconfig ens33:0 $vip broadcast $vip netmask 255.255.255.255 up
route add -host $vip dev ens33:0
$ipv -C
$ipv -A -t $vip:80 -s wrr
$ipv -a -t $vip:80 -r $rs1:80 -g -w 1
$ipv -a -t $vip:80 -r $rs2:80 -g -w 1
这里使用dr模式,并使用wrr调度算法,两台服务器的权值均设置为1
真实服务器脚本如下
#! /bin/bash
vip=192.168.1.200
ifconfig lo $vip broadcast $vip netmask 255.255.255.255 up
route add -host $vip lo
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
真实服务器需要修改网络内核参数,避免真实服务器对vip的arp响应,导致负载均衡系统失效。
三、结果验证
可以通过vip来访问web站点,且根据轮询调度算法将请求合理分配到两台真实服务器。
![10001925a30a768a1f635bce6b18e9be.png](https://img-blog.csdnimg.cn/img_convert/10001925a30a768a1f635bce6b18e9be.png)
原理分析:
在客户端上查看arp表
![dea245d5ecde24d28858c60d03e90038.png](https://img-blog.csdnimg.cn/img_convert/dea245d5ecde24d28858c60d03e90038.png)
Windows 客户端arp表
![3182cafba431a3ef0792bcd42b95de27.png](https://img-blog.csdnimg.cn/img_convert/3182cafba431a3ef0792bcd42b95de27.png)
Fedora客户端arp表
可以看到vip对应的mac地址是lvs节点的,但是lvs并未开启web服务,而是将web请求转发到真实服务器,由真实服务器提供web服务
![ee00a901f3b126cfa52387c2854a74df.png](https://img-blog.csdnimg.cn/img_convert/ee00a901f3b126cfa52387c2854a74df.png)
下图是真实服务器的抓包记录,可以看出web请求已经转发给真实服务器,然后由真实服务器提供响应服务
![73cbd73736d07994a57fbc610ca37861.png](https://img-blog.csdnimg.cn/img_convert/73cbd73736d07994a57fbc610ca37861.png)
![57419eb3d78637e370dd374802b0a466.png](https://img-blog.csdnimg.cn/img_convert/57419eb3d78637e370dd374802b0a466.png)