负载均衡-LVS
LVS:linux virtual server,负载调度器,内核集成。VS根据请求报文的目标地址和目标协议及端口将其根据不同的调度算法调度转发至后端的RS
VS:virtual server,负责调度
RS:real server,后端真正提供服务的机器
netfilter:内核空间上的框架
iptables:用户空间的管理工具
DNAT:目标地址转换
LVS集群体系架构:
CIP:客户端IP地址,发起端
VIP:VS的外网IP地址
DIP:VS的内网IP地址
RIP:后端服务器IP地址
访问流程:CIP——>VIP——>DIP——>RIP
lvs集群类型:
- lvs-nat:通过将请求报文的目标地址和端口修改为某RS的RIP和PORT实现转发
- RIP和DIP应在同一个IP网络,且应使用私网地址;RS的网关要指向DIP
- 请求报文和相应报文都必须经由director转发,director易成为系统瓶颈
- 支持端口映射,可修改请求报文的目标PORT
- VS必须是linux系统,RS可以是任意OS系统
lvs-dr:LVS的默认方式,将请求报文重新封装一个MAC首部进行转发,源MAC是DIP所在的接口的MAC,目标MAC是某RS的RIP所在的接口的MAC地址;源IP/PORT,以及目标IP/PORT保持不变
Director和各RS都配置有VIP - 确保前端路由器将目标IP为VIP的请求报文发往Director
- 在前端网关做静态绑定VIP和Director的MAC地址
在RS上使用arptables工具
arptables -A IN -d $VIP -j DROP
arptables -A OUT -s $VIP -j mangle --mangle-ip-s $RIP
在RS上修改内核参数以限制arp通告及应答级别
/proc/sys/net/ipv4/conf/all/arp_ignore
/proc/sys/net/ipv4/conf/all/arp_announce - RS的RIP可以使用私网地址,也可以是公网地址;RIP与DIP在同一IP网络;RIP的网关不能指向DIP,以确保相应报文不会经由Director
- RS和Director要在同一个物理网络
- 请求报文要经由Director,但相应报文不经由Director,而由RS直接发往client
- 不支持端口映射(端口不能修改)
- RS可使用大多数OS系统
lvs-tun:
lvs-fullnat:
ipvs scheduler:调度算法
根据其调度时是否考虑各自RS当前的负载状态分为静态方法和动态方法
静态方法:仅根据算法本身进行调度
RR:轮询
WRR:加权轮询
SH:源IP地址hash
DH:目标地址hash
动态方法:根据RS当前的负载状态及调度算法进行调度
- LC:最小连接
- WLC:加权最小连接,默认调度算法
- SED:初始连接高权重优先
- NQ:第一次均匀分配,后续SED
- LBLC:动态DH算法,使用场景根据负载均衡状态实现正向代理
- LBLCR:带复制功能的LBLC,解决LBLC负载均衡不均衡问题,从负载重的复制到负载轻的RS
ipvsadm
- Unit File: ipvsadm.service
- 主程序:/usr/sbin/ipvsadm
- 规则保存工具:/usr/sbin/ipvsadm-save
- 规则重载工具:/usr/sbin/ipvsadm-restore
- 配置文件:/etc/sysconfig/ipvsadm-config
ipvsadm命令
核心功能:
集群服务管理:增、删、改
集群服务的RS管理:增、删、改
ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p [timeout]] [-M netmask] [--pepersistence_engine] [-b sched-flags]
ipvsadm -D -t|u|f service-address 删除
ipvsadm –C 清空
ipvsadm –R 重载
ipvsadm -S [-n] 保存
ipvsadm -a|e -t|u|f service-address -r server-address [options]
ipvsadm -d -t|u|f service-address -r server-address
ipvsadm -L|l [options]
ipvsadm -Z [-t|u|f service-address]