1.简介
1.1. 作者:张文嵩,就职于阿里
1.2. LVS是基础四层路由、四层交换的软件,他根据请求报文的目标IP和目标PORT将其调度转发至后端的某主机;
1.3. IPTABLES的请求转发路线:iptables(用户空间工具)/netfilter(内核空间组件)
PREROUTING ==> INPUT
PREROUTING ==> FORWARD ==> POSTROUTING
OUTPUT ==> POSTROUTING
1.4. LVS的组成:ipvsadm(用户空间工具)/ipvs(内核空间组件)
ipvsadm:用户空间的命令行工具,用于管理集群服务及集群服务上的RS;
ipvs:工作于内核上的netfilter的INPUT钩子之上的程序,可根据用户定义的集群实现请求转发;
1.5. LVS支持的协议:TCP、UDP、SCTP、AH、EST、AH_EST等协议进行调度;
2. 名词解释
vs | Virtual Server, Director, Dispatcher, Balancer |
rs | Real Server |
CIP | Client IP |
VIP | Virtual Server IP |
DIP | Director IP |
RIP | Real Server IP |
3. lvs集群的类型
3.1. lvs-nat:多目标的DNAT,通过将报文中的目标地址和目标端口修改为挑选出的某RS的RIP和PORT实现转发;
3.1.1. 特性:
(1)RIP和DIP必须在同一IP网络,且使用私有地址;RS的网络要指向DIP(保证相应报文必须经由VS);
(2)请求报文和相应报文都经由Director转发,较高负载下,Director易于成为系统性能瓶颈;
(3)支持端口映射
(4)VS必须是Linux,RS可以是任意OS
3.2. lvs-dr:Direct Routing,通过为请求报文的重新封装一个MAC首部进行转发,源mac是DIP所在接口的mac,目标mac是挑选出某RS的RIP所在接口的MAC地址;IP首部不会发生变化(CIP《==》VIP)
3.2.1. 特性:
(1)确保前端路由器将目标IP为VIP的请求报文发往Director
解决方案:
在路由器上静态绑定VIP和Director的MAC地址;
禁止RS响应VIP的ARP请求,禁止RS的VIP进行通告
(a)arptables
(b)修改RS的内核参数,并把VIP绑定在lo的别名上;
arp_Ignore, apr_announce
(2)RS的RIP可以使用私有地址,也可以使用公网地址
(3)RS跟Director必须在同一物理网络
(4)请求报文必须由Directory调度,但响应报文必须不能经由Director;
(5)不支持端口映射
(6)RS可以使用大多的OS
3.3. lvs-tun:tunnel,不修改请求报文的IP首部(源IP为CIP,目标IP为VIP),而是原IP首部之外再封装一个IP首部(源IP为DIP,目标IP为挑选出的RS的RIP);
3.3.1. 特性
(1)RIP、DIP、VIP全得是公网地址;
(2)RS网关不能指向也可能指向DIP
(3)请求报文经由Director转发,但响应报文将直接发往CIP;
(4)不支持端口映射
(5)RS的OS必须支持隧道功能;
3.4. lvs-fullnat:通过同时修改请求报文的源IP地址(CIP==》DIP)和目标IP地址(VIP==》RIP)进行转发;
3.4.1. 特性
(1)VIP是公网地址,RIP和DIP是私网地址,且通常不在同一网络中,但需要经由路由器互通;
(2)RS收到的请求报文源IP为DIP,因此响应报文将直接响应给DIP;
(3)请求和响应报文都经由Director
(4)支持端口映射
4. lvs集群的调度算法(scheduler):根据其调度时是否考虑后端主机的当前负载,可分为静态方法和动态方法两类;
4.1. 静态方法:仅根据算法本身进行调度;
RR:Round Robin,轮询/论调/轮叫;
WRR:Weighted RR,加权轮询;
SH:Source Hashing,源地址哈希;
DH:Destination Hashing,目标地址哈希;正向web代理(缓存),负载均衡内网用户对外部服务器的请求;哈希的是目标地址
4.2. 动态方法:根据算法及各RS当前的负载状态进行调度;
LC:least connections,最少连接;
Overhead=Active*256+Inactive
WCL:Weighted LC,加权最少连接;
Overhead=(Active*256+Inactive)/weight
SED:Shorted Expections Delay
Overhead=(Active+1)*256/weight
NQ:Never Queue
LBLC:Locality-Based LC,动态的DH算法
LBLCR:LBLC with Replication,带复制功能的LBLC;