11.4.5 LVS负载均衡常见工作模式总结以及ipvsadm
NAT | TUN | DR | |
RS | any | Tunneling | Non-arp device |
RS network | private | LAN/WAN | LAN |
RS number | low(10-20) | High(100) | High(100) |
RS gateway | load balancer | own router | Own router |
优点 | 端口转换 | WAN | 性能最好 |
缺点 | 性能瓶颈 | 支持隧道 | 不支持跨网段 |
lvs-nat与lvs-fullnat: 请求和响应报文都经由Director lvs-nat:RIP的网关要指向DIP lvs-fullnat:RIP和DIP未必在同一IP网络,但要能通信 lvs-dr与lvs-tun: 请求报文要经由Director,但响应报文由RS直接发Client lvs-dr:通过封装新的MAC首部实现,通过MAC网络转发 lvs-tun:通过在原IP报文外封装新IP头实现转发,支持远距离通信
LVS 调度算法
ipvs scheduler:根据其调度时是否考虑各RS当前的负载状态
分为两种:静态方法 动态方法
静态方法
仅根据算法本身进行调度 1.RR:roundrobin 轮训 2.WRR:weighted RR 加权轮训 3.SH:Source Hashing 源地址hash 可以实现session sticky 将来自于同一个IP地址的请求始终转发往第一次跳中的RS,从而实现会话绑定 4.DH:Destination Hashing 目标地址hash, 第一次轮训调度至RS,后续将发往同一个目标地址的请求始终转发至第一次挑中的RS,典型应用场景:Web缓存
动态方法
主要根据每台RS当前的负载状态及调度算法进行调度Overhead=value较小的RS将被调度 1.LC Least connections 适用于长连接应用 overhead=activeconns*256+inactiveconns 2.WLC weighted LC 默认调度算法,比较常用 overhead=(activeconns*256+inactiveconns)/weight 3.SED shortest expection delay 初始连接高权重优先,只检查活动连接,而不考虑非活动连接 overhead=(activeconns+1)*256/weight 4.NQ Never Queue 第一轮rr,后续SED 5.LBLC locality-based lc 动态的DH算法,使用场景:根据负载均衡状态实现正向代理,实现Web cache等 6.LBLCR LBLC with replication ,带复制功能的LBLC,解决LBLC负载不均衡问题,从负载中的复制到负载轻的RS,实现web cache
其它调度算法
内核4.15版本后新增调度算法:FO OVF
LVS软件包组成
ipvsadm: 程序包:ipvsadm(LVS管理工具) Unit File: ipvsadm.service 主程序:/usr/sbin/ipvsadm 规则保存工具:/usr/sbin/ipvsadm-save 规则重载工具:/usr/sbin/ipvsadm-restore 配置文件:/etc/sysconfig/ipvsadm-config grep -i -C 10 "ipvs" /boot/config-3.10.0-957.el7.x86_64 #查看内核是否支持IPVS
ipvsadm
yum install ipvsadm -y
lvs命令使用
-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 wlc -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 虚拟服务表计数器清零(清空当前的连接数量等)
ipvsadm -A|E -t|u|f virutal-service-address:port [-s scheduler] [-p [timeout]] [-M netmask] 修改VIP为192.168.1.2的LVS中 http服务的调度算法为Round Robin ipvsadm –E –t 192.168.1.2:80 –s rr ipvsadm -D -t|u|f virtual-service-address 删除VIP为192.168.1.2的Service ipvsadm -D -t 192.168.1.2:80 ipvsadm -a|e -t|u|f service-address:port -r real-server-address:port [-g|i|m] [-w weight] 修改RS权重为3 ipvsadm -e -t 192.168.1.2:80 -r 192.168.1.3 –g -w 3 ipvsadm -d -t|u|f service-address -r server-address 删除一个RS:ipvsadm -d -t 192.168.1.2:80 -r 192.168.1.3:80 ipvsadm -L|l [options] ipvsadm -Z [-t|u|f service-address] ipvsadm -C ipvsadm -R ipvsadm -S [-n]
LVS规则保存和加载
保存:建议保存至/etc/sysconfig/ipvsadm ipvsadm-save > /PATH/TO/IPVSADM_FILE ipvsadm -S > /PATH/TO/IPVSADM_FILE systemctl stop ipvsadm.service 重载: ipvsadm-restore < /PATH/FROM/IPVSADM_FILE ipvsadm -R < /PATH/FROM/IPVSADM_FILE systemctl restart ipvsadm.service