一、LVS简介
1.LVS(Linux Virtual Server),负载调度器,内核集成
2.LVS体系结构
LVS架构的服务器集群系统有三个部分组成:Loader Balancer(负载均衡层),Server Array(中间的服务器群组层),Shared Storage(数据共享存储层)。
3.LVS工作原理
- 当用户访问 www.sina.com.cn 时,用户数据通过层层网络,最后通过交换机进入LVS服务器网卡,并进入内核网络层。
- 进入PREROUTING后经过路由查找,确定访问的目的VIP是本机IP地址,所以数据包进入到INPUT链上。
- IPVS是工作在INPUT链上,会根据访问的vip+port 判断请求是否 IPVS 服务,如果是则调用注册的 IPVS HOOK 函数,进行 IPVS 相关主流程,强行修改数据包的相关数据,并将数据包发往 POSTROUTING 链上。
- POSTROUTING 上收到数据包后,根据目标 IP 地址(后端服务器),通过路由选路,将数据包最终发往后端的服务器上
4.LVS调度算法
分为两种:静态方法和动态方法
4.1静态方法:仅根据算法本身进行调度
- RR:roundrobin,轮询,较常用
- WRR:Weighted RR,加权轮询,较常用
- SH:Source Hashing,实现session sticky,源IP地址hash;将来自于同一个IP地址的请求始终发往第一次挑中的RS,从而实现会话绑定
- DH:Destination Hashing;目标地址哈希,第一次轮询调度至RS,后续将发往同一个目标地址的请求始终转发至第一次挑中的RS,典型使用场景是正向代理缓存场景中的负载均衡,如: Web缓存
4.2 动态方法:主要根据每RS当前的负载状态及调度算法进行调度Overhead=value 较小的RS将被调度
- LC:least connections 适用于长连接应用2、WLC:Weighted LC,默认调度方法,较常用
- SED:Shortest Expection Delay,初始连接高权重优先,只检查活动连接,而不考虑非活动连接
- NQ:Never Queue,第一轮均匀分配,后续SED
- LBLC:Locality-Based LC,动态的DH算法,使用场景:根据负载状态实现正向代理,实现Web Cache等
- LBLCR:LBLC with Replication,带复制功能的LBLC,解决LBLC负载不均衡问题,从负载重的复制到负载轻的RS,实现Web Cache等
5.三种工作模式
- NAT模式
- DR模式
- TUN模式
二、LVS工作模式之LVS-NAT模式
1.LVS-NAT工作模式:实质是多目标的DNAT,将请求报文中的目标IP和Port修改成RS的RIP和Port
- RIP和DIP应在同一个IP网络,且应使用私网地址;RS的网关要指向DIP
- 请求报文和响应报文都必须经由Director转发,Director易于成为系统瓶颈
- 支持端口映射,可修改请求报文的目标PORT
- VS必须是Linux系统,RS可以是任意OS系统
2.NAT模式配置及实现
2.1实验平台
Client:192.168.0.6/24
LVS:
eth0:仅主机,192.168.0.10/24
eth1:NAT,10.0.0.8/24
RS1:10.0.0.7/24 GW:10.0.0.8/24
RS2:10.0.0.9/24 GW:10.0.0.8/24
2.2实验步骤
(1)实验环境配置
- RS1和RS2安装http服务,做Web页面测试,参考此博客配置,点击这里,设置RS1和RS2网关
#/etc/sysconfig/network-scripts/ifcfg-ens33中增加以配置
GATEWAY=10.0.0.8
#systemctl restart network
nmcli connection reload
nmcli connection up ens33
route -n #查看路由
- Client配置
#/etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
NAME=eth0
BOOTPROTO=static
IPADDR=192.168.0.6
ONBOOT=yes
PREFIX=24
#systemctl restart network
nmcliconnection reload
nmcli connection up eth0
route -n #查看路由
- LVS配置eth0和eth1,安装ipvsadm
#/etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
NAME=eth0
BOOTPROTO=static
IPADDR=192.168.0.10
ONBOOT=yes
PREFIX=24
#/etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE=eth1
NAME=eth1
BOOTPROTO=static
IPADDR=10.0.0.8
ONBOOT=yes
PREFIX=24
#修改/etc/sysctl.conf,否则lvs返回响应时,无法从LVS到internet
net.ipv4.ip_forward = 1 #启用IP控制IP包转发
#命令查看
sysctl -p
(2)LVS服务器上配置模式和调度算法
#eth0/VIP,-A:增加, -t:tcp协议,-s:调度算法wrr(加权轮询)
ipvsadm -A -t 192.168.0.10:80 -s wrr
#管理集群中RS1和RS2,-m:NAT模式,-w:权重
ipvsadm -a -t 192.168.0.10:80 -r 10.0.0.7 -m -w 3
ipvsadm -a -t 192.168.0.10:80 -r 10.0.0.9 -m -w 2
ipvsadm -Ln
(3)LVS服务器上保存模式和调度算法规则,开机有效
ipvsadm -Sn > /etc/sysconfig/ipvsadm
systemctl enable --now ipvsadm.service
参考博客请点击此处
在学习中进步,如有错误,请多多批评指正