1. 负载均衡基础
负载均衡技术通过将请求分配到多台服务器,提升系统处理能力和可靠性。它分为硬件负载均衡和软件负载均衡两种类型。
常见的负载均衡算法包括轮询、加权轮询、最少连接和源地址哈希。
(另外也有DNS负载均衡或者说智能DNS,以后再展开)
2. LVS概览
LVS,即Linux Virtual Server,由章文嵩博士于1998年创建,是一个开源的负载均衡解决方案。它通过分发网络流量到多台后端服务器,提高系统的处理能力和可用性。
LVS的架构
Director:接收客户端请求,转发到Real Server。
Real Server:处理客户端请求的服务器。
Client:发起请求的用户或应用程序。
LVS的工作原理基于内核中的IPVS模块,根据预设算法转发请求。
为什么需要LVS(Linux Virtual Server):
提高吞吐量:
LVS允许通过添加后端服务器来线性增加吞吐量,而替换为更高端的单一服务器成本会显著增加。
这种增加后端服务器的做法称为横向扩展(Scale Out),与纵向扩展(Scale Up)相比,成本效益更高。
实现冗余:
管理员可以将后端服务器从LVS集群中移除进行升级,完成后再将其重新加入集群,这一过程不会影响客户端的使用。
适应性:
如果评估显示吞吐量需要逐步增加或应对事件性的流量突增,增加后端服务器可以在不影响用户体验的情况下进行。
3. LVS的组成部分
LVS由ipvsadm和ipvs两部分组成:
ipvsadm:用户空间管理工具,用于配置和管理LVS。
ipvs:内核空间模块,负责请求的转发。
4. LVS的工作模式
LVS提供三种工作模式:NAT、DR和TUN,每种模式都有其特点和适用场景。
4.1 NAT模式

NAT模式工作原理概括:
客户端请求:客户端将请求发送至负载均衡器,源地址为CIP,目标地址为VIP。
负载均衡器处理:负载均衡器根据规则修改请求报文的目标地址为RS的RIP,并根据算法将报文转发。
RS处理:RS接收到报文,发现目标地址为自己,响应该请求。
响应返回:RS将响应报文发送给LVS,LVS修改源地址为自身地址后转发给客户端。
特殊配置:RS的网关必须指向LVS,确保响应能送达客户端。
配置要点:
网关配置:RS的网关必须设置为LVS的内网地址。
IP配置:LB配置一个公网IP地址,RS使用内网IP。
端口转换:支持IP地址和端口的转换,允许请求端口与RS端口不一致。
特点:
地址改写:请求和响应报文都需要通过LB进行地址改写。
瓶颈问题:高访问量时,LB可能成为瓶颈,限制了节点数量(一般10-20台)。
优点:
操作系统兼容性:集群中的物理服务器可以使用任何支持TCP/IP的操作系统,只有LB需要合法IP。
缺点:
扩展性限制:当节点数量增多时,LB成为系统瓶颈,影响性能。
适用场景建议:
NAT模式适用于节点数量较少的场景。当节点数量增多时,考虑使用其他模式或技术以避免瓶颈问题。
4.2 DR模式
DR模式工作原理概括:
客户端请求:客户端将请求发送至前端负载均衡器,源地址为客户端IP(CIP),目标地址为虚拟IP(VIP)。
负载均衡器处理:负载均衡器接收请求,检查规则后,将请求报文的源MAC地址改为自己的数据接口IP(DIP)的MAC地址,目标MAC地址改为后端服务器(RS)的MAC地址(RIP),然后将报文转发给RS。
RS处理:RS接收到请求后,处理请求并将响应报文通过本地回环接口(lo接口)发送给客户端,不经过负载均衡器。
特殊配置:需要设置lo接口的VIP不响应局域网内的ARP请求,以避免IP冲突。
配置要点:
MAC地址改写:负载均衡器通过改写数据包的MAC地址来实现请求的转发。
响应效率:响应报文直接从RS发送至客户端,提高了并发访问的效率。
局域网限制:所有RS节点和负载均衡器必须位于同一局域网内。
VIP绑定与ARP抑制:RS需要在lo接口上绑定VIP地址,并配置ARP抑制。
网关配置:RS的默认网关应配置为上级路由的网关,而非负载均衡器。
端口使用:由于不能改写目标端口,RS必须使用与VIP相同的端口提供服务。
IP使用:对外业务使用公网IP,内部服务使用内网IP。
优点:
高效性:与TUN模式相似,负载均衡器仅分发请求,响应包通过独立路由返回,提高了效率。
适用性:可以使用大多数操作系统作为物理服务器,不依赖于隧道结构。
缺点:
配置复杂性:相比于使用haproxy/nginx等,DR模式配置更为复杂。
局域网限制:所有RS节点和负载均衡器必须位于同一局域网内,限制了部署的灵活性。
适用场景建议:
对于日访问量1000-2000万PV或并发请求1万以下的公司,可以考虑使用haproxy/nginx作为替代方案。
4.3 TUN模式
TUNNEL模式工作原理概括:
客户端请求:客户端将请求发送至前端负载均衡器,源地址为CIP,目标地址为VIP。
负载均衡器处理:负载均衡器接收到请求后,根据规则在请求报文首部封装一层新的IP报文,源地址改为DIP,目标地址改为RIP,然后将封装后的包发送给RS。
RS处理:RS收到请求报文后,拆开外层封装,识别内层IP首部的目标地址为自己的VIP,处理请求后,通过lo接口将响应报文直接发送给客户端。
特殊配置:lo接口的VIP不能在公网上出现,避免IP冲突。
配置要点:
VIP绑定:所有RS机器上必须绑定VIP的IP地址。
通信方式:TUNNEL模式允许VIP到RS的包通过隧道进行通信,不受内网或外网限制。
直接响应:RS将响应包直接发送给客户端,不经过负载均衡器。
运维难度:由于使用隧道模式,运维相对复杂,一般不推荐使用。
优点:
减少瓶颈:负载均衡器只负责分发请求,RS直接响应客户端,减少了负载均衡器的数据流量,提高了处理能力。
扩展性:可以为多个RS进行分发,支持不同地域的分发。
缺点:
IP合法性:RS节点需要合法的IP地址。
系统支持:需要服务器支持"IP Tunneling"协议,可能限制在部分Linux系统上。
适用场景建议:
由于运维难度和系统支持限制,TUNNEL模式适用于特定场景,一般推荐使用其他负载均衡模式。
工作原理:通过IP隧道转发请求。
优点:高性能,支持分布式集群。
缺点:配置复杂,需要IP隧道协议支持。
三种工作模式对比
| 工作模式 | VS/NAT | VS/TUN | VS/DR |
|---|---|---|---|
| Real server(节点服务器) | Config dr gw | Tunneling | Non-arp device/tie vip |
| Server Network | Private | LAN/WAN | LAN |
| Server number(节点数量) | Low 10-20 | High 100 | High 100 |
| Real server gateway | Load balance | Own router | Own router |
| 优点 | 地址和端口转换 | Wan环境加密数据 | 性能最高 |
| 缺点 | 效率低 | 需要隧道支持 | 不能跨域LAN |
LVS调度算法
IPVS在内核中的连接调度算法已经实现了以下八种类型:
轮询调度(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)
根据源地址的散列值分配请求。
调度算法分类:
固定调度算法:
rr(轮询调度)
wrr(加权轮询调度)
dh(目标地址散列调度)
sh(源地址散列调度)
动态调度算法:
lc(最小连接调度)
wlc(加权最小连接调度)
lblc(基于局部性的最少链接)
lblcr(带复制的基于局部性最少链接)
| 一般应用场景 | 常用调度算法 |
|---|---|
| 一般的网络服务,如 http,mail,mysql | 轮询、加权最小连接、加权轮询 |
| 防火墙集群 | 源地址散列调度SH和目标地址散列调度DH |
| web cache和DB cache | 局部最小、带复制的局部最小 |




