四层负载与七层负载的区别
四层负载均衡 | 七层负载均衡 | |
基于 | IP Port | Url |
类似 | 路由器 | 代理服务器 |
握手次数 | 1次 | 2次 |
复杂度 | 低 | 高 |
性能 | 高 无需解析内容 | 中 需要算法识别 URL,Cookie 和 HTTP head 等信息 |
安全性 | 低 | 高 |
额外功能 | 无 | 会话保持,图片压缩,防盗链等 |
LVS 优点与不足
优点
1.高并发链接:基于内核网络层面工作,有超强的承载能力和并发处理能力。单台LVS负载均衡器,可支持上万并发连接。
2.稳定性强
3.成本低廉配置简单
4.支持多种工作模型
缺点
工作在4层,不支持7层规则修改,机制过于庞大,不适合小规模应用。
LVS 核心组件和名词
核心组件
ipvsadm:用于管理集群服务的RS等
ipvs:工作于内核上的netfilter INPUT钩子之上的程序,可根据用户定义的集群实现请求转发;
名词
VS:Virtual Server 虚拟服务
Director, Balancer 负载均衡器、分发器
RS:Real Server 后端请求处理服务器
CIP: Client IP 用户端IP
VIP:Director Virtual IP 负载均衡器虚拟IP
DIP:Director IP 负载均衡器IP
RIP:Real Server IP 后端请求处理服务器IP
LVS工作内核模型及工作模式
1、当客户端的请求到达负载均衡器的内核空间时,首先会到达 PREROUTING 链。
2、当内核发现请求数据包的目的地址是本机时,将数据包送往 INPUT 链。
3、LVS由用户空间的ipvsadm和内核空间的IPVS组成,ipvsadm用来定义规则,IPVS利用ipvsadm定义的规则工作,IPVS工作在INPUT链上,当数据包到达INPUT链时,首先会被IPVS检查,如果数据包里面的目的地址及端口没有在规则里面,那么这条数据包将被放行至用户空间。
4、如果数据包里面的目的地址及端口在规则里面,那么这条数据报文将被修改目的地址为事先定义好的后端服务器,并送往POSTROUTING链。
5、最后经由POSTROUTING链发往后端服务器。
LVS负载均衡四种工作模型
1.Nat
2.DR
3.TUN
4.Full-Nat
四者的区别
lvs-nat与lvs-fullnat:请求和响应报文都经由Director
lvs-dr与lvs-tun:请求报文要经由Director,但响应报文由RS直接发往Client
lvs-nat:RIP的网关要指向DIP
lvs-fullnat:RIP和DIP未必在同一IP网络,但要能通信
lvs-dr:通过封装新的MAC首部实现,通过MAC网络转发
lvs-tun:通过在原IP报文外封装新IP头实现转发,支持远距离通信
Ipvsadm 命令
-A --add-service #在服务器列表中新添加一条新的虚拟服务器记录
-t #表示为tcp服务
-u #表示为udp服务
-s --scheduler #使用的调度算法, rr | wrr | lc | wlc | lblb | lblcr | dh | sh | sed | nq 默认调度算法是 wlc
例:ipvsadm -A -t 192.168.1.2:80 -s wrr
-a --add-server #在服务器表中添加一条新的真实主机记录
-t --tcp-service #说明虚拟服务器提供tcp服务
-u --udp-service #说明虚拟服务器提供udp服务
-r --real-server #真实服务器地址
-m --masquerading #指定LVS工作模式为NAT模式
-w --weight #真实服务器的权值
-g --gatewaying #指定LVS工作模式为直接路由器模式(也是LVS默认的模式)
-i --ip #指定LVS的工作模式为隧道模式
-p #会话保持时间,定义流量被转到同一个realserver的会话存留时间
例:ipvsadm -a -t 192.168.1.2:80 -r 192.168.2.10:80 -m -w 1
-E -edit-service #编辑内核虚拟服务器表中的一条虚拟服务器记录。
-D -delete-service #删除内核虚拟服务器表中的一条虚拟服务器记录。
-C -clear #清除内核虚拟服务器表中的所有记录。
-R -restore #恢复虚拟服务器规则
-S -save #保存虚拟服务器规则,输出为-R 选项可读的格式
-e -edit-server #编辑一条虚拟服务器记录中的某条真实服务器记录
-d -delete-server #删除一条虚拟服务器记录中的某条真实服务器记录
-L|-l –list #显示内核虚拟服务器表
--numeric, -n:#以数字形式输出地址和端口号
--exact: #扩展信息,精确值
--connection,-c: #当前IPVS连接输出
--stats: #统计信息
--rate : #输出速率信息
参数也可以从/proc/net/ip_vs*映射文件中查看
-Z –zero #虚拟服务表计数器清零(清空当前的连接数量等)
LVS 持久连接
iptables -t mangle -A PREROUTING -d 192.168.188.11 -p tcp --dport 80 -j MARK --set-mark 99 //在iptables 打上标记,把80端口标记为99
iptables -t mangle -A PREROUTING -d 192.168.188.11 -p tcp --dport 443 -j MARK --set-mark 99 //在iptables打上标记,把443端口标记为99
ipvsadm -A -f 99 -s rr -p //在lvs上建立基于99号标记的虚拟服务
ipvsadm -a -f 99 -r 192.168.188.9 -g
ipvsadm -a -f 99 -r 192.168.188.10 -g //设置后端服务地址
LVS的调度算法
静态
1.RR:轮转
2.WRR:加权轮转
3.DH:目标地址散列调度(Destination Hash )
4.SH:源地址 hash(Source Hash)
动态
1.LC:最少链接
调度器通过”最少连接”调度算法动态地将网络请求调度到已建立的链接数最少的服务器上。
2.WLC:加权最少连接
具有较高权值的服务器将承受较大比例的活动连接负载。
3.SED:最短期望延迟调度
在WLC基础上改进,Overhead = (ACTIVE+1)*256/加权
4.NQ:永不排队
有台 realserver的连接数=0就直接分配
5.LBLC:基于局部性的最少链接
主要用于Cache集群系统。
6.LBLCR:带复制的基于局部性最少连接
主要用于Cache集群系统。它与LBLC算法的不同之处是它要维护从一个目标IP地址到一组服务器的映射
LVS DR 模式搭建
A:Load balancer 192.168.188.8
1.准备
setenforce 0
sed -i 's/^SELIUNX=.*/SELIUNX=disabled/g' /etc/selinux/config
systemctl stop firewalld
systemctl disable firewalld
yum install -y iptables-services
systemctl enable iptables
systemctl start iptables.service
iptables -F # 清空iptables规则
service iptables save
yum -y install ipvsadm net-tools
2.创建DR规则脚本
vim /opt/lvs_dr.sh
#!/usr/bin/bash
echo 1 > /proc/sys/net/ipv4/ip_forward
ipv=/usr/sbin/ipvsadm
vip=192.168.188.11
rs1=192.168.188.9
rs2=192.168.188.10
net="ens33"
ifdown $net
ifup $net
ifconfig $net:2 $vip broadcast $vip netmask 255.255.255.255 up
route add -host $vip dev $net:2
$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
3.执行检查
chmod 755 /opt/lvs_dr.sh
sh /opt/lvs_dr.sh
route -n
ip a
B.C:Real server 192.168.188.9 192.168.188.10
1.B.C分别安装
yum -y install net-tools
2.创建转发脚本
vim /opt/lvs_rs
#!/usr/bin/bash
vip=192.168.188.11
ifdown lo
ifup lo
ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up
route add -host $vip lo:0
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
3.执行检查
chmod 755 /opt/lvs_rs.sh
sh /opt/lvs_rs.sh
route -n
ip a
4.拷贝脚本至C并运行
scp /opt/lvs_rs.sh 192.168.188.10:/opt/lvs_rs.sh
5.检查
iptables -ln