LVS介绍
LVS (Linux Virtual Server) 是全球最流行的四层负载均衡开源软件,是linux的内核集功能,工作在INPUT链的位置。LVS 根据请求报文的目标IP、协议、端口将请求转发至后端的 Real Server(RS),使用调度算法来选择 RS。
LVS常用的集群术语
VS:Virtual Server(LVS服务器)、Director Server(DS调度器)、Dispatcher、Load Balancer (LB)
RS:Real Server
CIP:Client IP (客户端IP)
VIP:Virtual Serve IP (虚拟IP,VS的外网IP)
DIP:Director IP (VS的内网IP)
RIP:Real Server IP
访问流程:CIP <–> VIP == DIP <–> RIP
LVS集群的工作模式
LVS-NAT:修改请求报文的目标IP,多目标的DNAT
LVS-DR:封装新的MAC地址
LVS-TUN:在原请求IP报文上新加一个IP首部
LVS-FULLNAT:修改请求报文的源IP和目标IP
LVS-NAT 模式
NAT 网络地址转换,分为 SNAT 和 DNAT 。内网计算机访问外网时用 SNAT 把内部私网IP转换为公网IP,反之就是 DNAT 。
中间的LVS服务器用于接收用户的请求,LVS 通过交换机和后端 RS 相连,把请求转发到后端的某一台 RS ,转发时 LVS 会将请求报文的目标地址(VIP) 替换成内网某一台 RS 的地址(RIP1),端口号(Port)也可以修改。RS收到请求以后,会发送响应报文,这时候源IP是RIP1,目标IP是客户端CIP,报文在经过LVS服务器原路返回客户端时,源IP从 RIP1 替换为 VIP。
一般后端有多台RS实现负载均衡,LVS可以将请求转发给其中的任意一台,所以LVS的 NAT 模式是多目标的 DNAT。
LVS-NAT模式特点
- LVS和RS之间一般都是交换机(也可以用路由器),也就是说应该在同一个网段,使用内网址
- 请求报文和响应报文都必须经由Director转发(原路返回),LVS负载很重,易于成为系统颈
- 支持端口映射,可修改请求报文的目标PORT
- LVS必须是Linux系统,RS可以是任意操作系统
LVS的DR模式
DR:Direct Routing(直接路由),LVS的默认模式,应用最广泛。客户端发送请求,经过LVS转发的时候,源IP(CIP)、目的IP(VIP)、端口都没有发生改变,目标MAC改成某一个RS的MAC地址(LVS通过ARP广播找到RS的MAC地址)。最终RS接收到数据报文直接进行回应,返回不经过LVS,减少了LVS的负载,提升了工作效率。
DR模式的特点:
- LVS服务器和后端RS都配置有VIP
- 确保前端路由器将目标IP为VIP的请求报文发往LVS 在前端网关做静态绑定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和LVS要在同一个物理网络
- 请求报文要经由LVS,但响应报文不经由LVS,而由RS直接发往Client
- 不支持端口映射(端口不能修改)
- 无需开启 ip_forward
LVS的TUN模式
不修改请求报文的IP首部(源IP为CIP,目标IP为VIP),而在原IP报文之外再封装一个IP首部(源IP是DIP,目标IP是RIP),将报文发往挑选出的目标RS。RS收到请求后直接响应给客户端(源IP是VIP,目标IP是CIP)。
TUN模式特点:
- RIP和DIP可以不处于同一物理网络中,RS的网关一般不能指向DIP,且RIP可以和公网通信。也就是说集群节点可以跨互联网实现。DIP,VIP,RIP可以是公网地址。
- RealServer的tun接口上需要配置VIP地址,以便接收director转发过来的数据包,以及作为响应的报文源IP
- Director转发给RealServer时需要借助隧道,隧道外层的IP头部的源IP是DIP,目标IP是RIP,而RealServer响应给客户端的IP头部是根据隧道内层的IP头分析得到的,源IP是VIP,目标IP是CIP。
- 请求报文要经由Director,但响应不经由Director,响应由RealServer自己完成
- 不支持端口映射
LVS工作模式总结和比较
NAT | TUN | DR | |
---|---|---|---|
Real Server | any | Tunneling | Non-arp device |
Real server network | private | LAN/WAN | LAN |
Real server number | low(10~20) | High (100) | High (100) |
Real server gateway | Load Balancer | router | router |
优点 | 端口转换 | WAN | 性能最好 |
缺点 | 性能瓶颈 | 要求RS支持隧道功能,不支持端口转换 | 不支持跨网段和端口转换 |