lvs
Linux Virtual Server
(lvs
) 是Linux
内核自带的负载均衡器,也是目前性能最好的软件负载均衡器之一。lvs
包括ipvs
内核模块和ipvsadm
用户空间命令行工具两部分。
在lvs
中,节点分为Director Server
和Real Server
两个角色,其中Director Server
是负载均衡器所在节点,而Real Server
则是后端服务节点。当用户的请求到达Director Server
时,内核netfilter
机制的PREROUTING
链会将发往本地IP
的包转发给INPUT
链(也就是ipvs
的工作链),在INPUT
链上,ipvs
根据用户定义的规则对数据包进行处理(如修改目的IP和端口等),并把新的包发送到POSTROUTING
链,进而再转发给Real Server
。
转发模式
NAT
NAT
模式通过修改数据包的目的IP和目的端口来将包转发给Real Server
。它的特点包括
Director Server
必须作为Real Server
的网关,并且它们必须处于同一个网段内- 不需要
Real Server
做任何特殊配置 - 支持端口映射
- 请求和响应都需要经过
Director Server
,易称为性能瓶颈
DR
DR
(Direct Route
)模式通过修改数据包的目的MAC
地址将包转发给Real Server
。它的特点包括
- 需要在
Real Server
的lo
上配置vip
,并配置arp_ignore
和arp_announce
忽略对vip
的ARP
解析请求 Director Server
和Real Server
必须在同一个物理网络内,二层可达- 虽然所有请求包都会经过
Director Server
,但响应报文不经过,有性能上的优势
TUN
TUN模式通过将数据包封装在另一个IP包中(源地址为DIP
,目的为RIP
)将包转发给Real Server
。它的特点包括
Real Server
需要在lo
上配置vip
,但不需要Director Server
作为网关- 不支持端口映射
FULLNAT
FULLNAT
是阿里在NAT基础上增加的一个新转发模式,通过引入local IP
(CIP-VIP转换为LIP->RIP
,而LIP
和RIP
均为IDC内网IP
)使得物理网络可以跨越不同vlan
,代码维护在alibaba/LVS上面。其特点是
- 物理网络仅要求三层可达
Real Server
不需要任何特殊配置SYNPROXY
防止synflooding
攻击- 未进入内核主线,维护复杂
调度算法
- 轮叫调度(
Round-Robin Scheduling
) - 加权轮叫调度(
Weighted Round-Robin Scheduling
) - 最小连接调度(
Least-Connection Scheduling
) - 加权最小连接调度(
Weighted Least-Connection Scheduling
) - 基于局部性的最少链接(
Locality-Based Least Connections Scheduling
) - 带复制的基于局部性最少链接(
Locality-Based Least Connections with Replication Scheduling
) - 目标地址散列调度(
Destination Hashing Scheduling
) - 源地址散列调度(
Source Hashing Scheduling
) - 最短预期延时调度(
Shortest Expected Delay Scheduling
) - 不排队调度(
Never Queue Scheduling
)