一、LVS的简介
LVS:Linux Virtual Server,负载调度器,是一种基于Linux操作系统内核的高性能、高可用网络服务负载均衡解决方案。
LVS工作原理基于网络层(四层,传输层)的负载均衡技术,它通过内核级别的IP虚拟服务器 (IPVS)模块实现透明的流量分发。




四、LVS的调度算法
1、静态调度算法
RR:roundrobin 轮询 RS分别被调度,当RS配置有差别时不推荐。
WRR:Weighted RR,加权轮询根据RS的配置进行加权调度,性能差的RS被调度的次数少
SH:Source Hashing,实现session sticky,源IP地址hash;将来自于同一个IP地址的请求始终发往第一次挑中的RS,从而实现会话绑定。
DH:Destination Hashing;目标地址哈希,第一次轮询调度至RS,后续将发往同一个目标地址的请求始终转发至第一次挑中的RS,典型使用场景是正向代理缓存场景中的负载均衡,如:宽带运营商。
2、动态调度算法
LC:least connections(最少链接法):主要根据RS当前的负载状态及调度算法进行调度 Overhead=value较小的RS会被调度。
WLC:Weighted LC(权重最少链接): 适用于长连接应用Overhead(负载值) =activeconns(活动链接数) x 256+inactiveconns(非活动链接数)。
SED:Shortest Expection Delay:默认调度方法Overhead=(activeconns x 256+inactiveconns)/weight。
NQ:Never Queue,第一轮均匀分配,后续SED,初始连接高权重优先Overhead= (activeconns+1+inactiveconns) x 256/weight ,但是,当node1的权重为1,node2的权 重为10,经过运算前几次的调度都会被node2承接。
LBLC:Locality-Based LC,动态的DH算法,使用场景:根据负载状态实现正向代理。
LBLCR:LBLC with Replication,带复制功能的LBLC,解决LBLC负载不均衡问题,从负载重 的复制到负载轻的RS。
五、LVS的实战案例
1、LVS部署相关命令介绍
程序包:ipvsadm
Unit File: ipvsadm.service
主程序:/usr/sbin/ipvsadm
规则保存工具:/usr/sbin/ipvsadm-save
规则重载工具:/usr/sbin/ipvsadm-restore
配置文件:/etc/sysconfig/ipvsadm-config
ipvs调度规则文件:/etc/sysconfig/ipvsadm
管理集群服务中的增删改查: ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]]
管理集群中realserver的增删改查:ipvsadm -a|e -t|u|f service-address -r realserver-address [- g|i|m] [-w weight]
2、部署nat模式集群
2.1.实验环境
2.2.实验内容
2.2.1设置vs、rs的ip
webserver1:
vim /etc/NetworkManager/system-connections/eth0.nmconnection
webserver2:
vim /etc/NetworkManager/system-connections/eth0.nmconnection
nmcli connection reload
nmcli connection up eth0
2.2.2在lvs中打开内核路由功能
vim /etc/sysctl.conf
sysctl -p
2.2.3在webserver安装apache
dnf install httpd -y #安装
echo webserver1-192.168.0.10 > /var/www/html/index.html #将不同内容写入网站首页
echo webserver2-192.168.0.20 > /var/www/html/index.html
2.2.4在lvs中加策略
安装ipvsadm:
dnf install ipvsadm -y
加策略:rr轮询策略
[root@lvs ~]# ipvsadm -A -t 172.25.254.100:80 -s rr
[root@lvs ~]# ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.10:80 -m
[root@lvs ~]# ipvsadm -a -t 172.25.254.100:80 -r 192.168.0.20:80 -m
[root@lvs ~]# ipvsadm -Ln
2.2.4检测
3、部署dr模式集群
3.1实验环境
3.2实验内容
3.2.1配置IP
vim /etc/NetworkManager/system-connections/eth0.nmconnection
nmcli connection reload
nmcli connection up eth0
client:需要将网关设置为路由器router的ip:
router:需要两个网卡,一个为nat模式,一个为仅主机模式:
vs:网关同样设置为路由器router的ip:
webserver1:网关同样设置为router的ip
webserver2:网关同样设置为router的ip
3.2.2添加vip
在vs、wevserver1、webserver2上lo上添加vip
使rs中的vip不对外生效
[root@webserver1 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@webserver1 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
[root@webserver1 ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
[root@webserver1 ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
3.2.3在lvs中添加策略
策略算法为wrr:基于权重的轮询,分别设置webserver1的权重为1、webserver2为2。
[root@lvs ~]# ipvsadm -A -t 192.168.0.200:80 -s wrr
[root@lvs ~]# ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.10:80 -g -w 1
[root@lvs ~]# ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.20:80 -g -w 2
3.2.3在client中检测
4、防火墙标签解决轮询调度问题
4.1.轮询调度问题
以 http 和 https 为例,当我们在 RS 中同时开放 80 和 443 端口,那么默认控制是分开轮询的,这样我们就出现了一个轮询错乱的问题 :当我第一次访问80 被轮询到 RS1 后下次访问 443 仍然可能会被轮询到 RS1 上。
#在lvs添加rr策略
[root@lvs ~]# ipvsadm -A -t 192.168.0.200:80 -s rr
[root@lvs ~]# ipvsadm -A -t 192.168.0.200:443 -s rr
[root@lvs ~]# ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.20:80 -g
[root@lvs ~]# ipvsadm -a -t 192.168.0.200:80 -r 192.168.0.10:80 -g
[root@lvs ~]# ipvsadm -a -t 192.168.0.200:443 -r 192.168.0.10:443 -g
[root@lvs ~]# ipvsadm -a -t 192.168.0.200:443 -r 192.168.0.20:443 -g
轮询错误:
4.2.解决轮询调度问题
4.2.1安装mod_ssl模块,让rs支持https
yum install mod_ssl -y
4.2.2.在lvs主机中为端口做标记
iptables -t mangle -A PREROUTING -d 192.168.0.200 -p tcp -m multiport --dports 80,443 -j MARK --set-mark 6666
4.2.3.在lvs中添加策略
[root@lvs ~]# ipvsadm -C
[root@lvs ~]# ipvsadm -A -f 6666 -s rr
[root@lvs ~]# ipvsadm -a -f 6666 -r 192.168.0.10 -g
[root@lvs ~]# ipvsadm -a -f 6666 -r 192.168.0.20 -g