一、负载均衡核心概念
它本质上是一种反向代理技术,通过硬件或软件设备,将来自客户端的请求智能地分发到后端的多台服务器上。这样做的主要目的是:
- 提高并发处理能力:避免单台服务器过载,提升整体服务的吞吐量。
- 保证高可用性:当某台后端服务器发生故障时,负载均衡器可以将流量自动切换到健康的机器上,确保服务不中断。
- 便于水平扩展:可以根据业务量增长,方便地增加后端服务器数量,实现弹性伸缩,且对用户透明。
二、使用负载均衡的必要性
- 技术层面:解决了单点瓶颈,实现了动态扩展,提升了性能。
- 成本层面:通过IP地址复用降低了成本。
- 安全层面:隐藏了内部服务器IP,增加了攻击难度。
- 管理层面:配置相对简单,功能丰富,管理便捷。
特别是“Web服务器的动态水平扩展–对用户无感知”这一点,是现代云架构中非常关键的优势,它使得应用能够轻松应对流量高峰。
Web服务器的动态水平扩展-->对用户无感知
增加业务并发访问及处理能力-->解决单服务器瓶颈问题
节约公网IP地址-->降低IT支出成本
隐藏内部服务器IP-->提高内部服务器安全性
配置简单-->固定格式的配置文件
功能丰富-->支持四层和七层,支持动态下线主机
性能较强-->并发数万甚至数十万
三、负载均衡的类型
硬件负载均衡器:如 F5, Citrix NetScaler, Array, 深信服 AD-1000 等。这些设备通常性能强劲,功能完善,但成本较高,且扩展性不如软件方案灵活。它们适合对性能、稳定性要求极高的大型企业或关键业务场景。
软件负载均衡器:如 HAProxy,以及 Nginx 等。软件方案成本较低(通常是开源的),部署灵活,可以根据需要部署在普通服务器上,并且更容易实现大规模部署和自动化管理。随着云计算的发展,软件负载均衡(尤其是在云平台提供的负载均衡服务中)越来越成为主流。
1.3.2 四层负载均衡 (Layer 4 Load Balancing)
- 工作原理:主要基于IP地址和端口号(IP+Port)来识别和分发流量。负载均衡器作为客户端和服务器之间的“中转站”,通过修改网络报文(IP/TCP/UDP)的头部信息(主要是目标IP地址,有时也包括源IP地址)来实现转发。
- 核心功能:
- NAT处理:修改报文头部地址,将流量导向后端服务器。
- 会话保持:记录TCP或UDP流的处理服务器,确保同一客户端的后续请求(属于同一会话)被发送到同一台后端服务器。这对于需要保持会话状态的应用(如某些TCP协议应用)很重要。
- 基于连接转发:通过IP和端口决定流量去向。
- 典型软件:
- LVS (Linux Virtual Server):这是一个非常强大和成熟的四层负载均衡器,通常部署在Linux内核层面,性能非常高,常被称为“重量级”。
- Nginx:虽然Nginx以其七层HTTP反向代理和Web服务器功能闻名,但它也支持四层TCP/UDP负载均衡(通过stream模块配置)。它相对LVS来说配置更灵活,但可能性能稍逊于内核级的LVS,常被视为“轻量级”。
- HAProxy:虽然HAProxy以七层功能著称,但它也能工作在四层模式,模拟NAT转发。这提供了灵活性,允许根据需求选择工作层次。
- 适用场景:适用于对传输层协议(TCP, UDP)进行负载均衡的场景,例如数据库集群、中间件集群、需要保持TCP会话的应用等,或者当不需要理解应用层内容时。
1.3.3 七层负载均衡 (Layer 7 Load Balancing)
- 工作原理:工作在OSI模型的第七层(应用层),能够理解应用层协议(主要是HTTP/HTTPS)。它不仅仅基于IP和端口,而是通过分析HTTP请求的内容,如URL、HTTP方法(GET/POST)、请求头(Headers)、Cookie等来做出转发决策。
- 核心功能:
- 代理模式:负载均衡器(代理)同时与客户端和后端服务器建立连接。它接收客户端的HTTP请求,解析后,可能进行修改(如替换URL、添加/删除头信息),然后转发给选定的后端服务器。服务器响应也经过代理返回给客户端。
- 基于内容识别:利用虚拟URL、主机头(Host Header)等信息进行流量识别和路由。例如,可以将
/static/*
路径的请求转发到静态文件服务器,将/api/*
路径的请求转发到应用服务器。 - 更丰富的功能:支持会话保持(基于Cookie或其他标识)、健康检查(可以检查页面内容或特定API返回)、SSL卸载(在负载均衡器上解密HTTPS,减轻后端服务器负担)、缓存(如Nginx)、访问控制(基于IP或Header)等。
- 典型软件:
- Nginx:通过其
proxy_pass
指令等实现七层代理。结合其强大的HTTP处理能力,使其成为Web应用负载均衡的首选之一。 - HAProxy:其七层模式提供了强大的功能,包括精细的会话保持、基于内容的路由(路径转移)、健康检查、SSL处理等,特别适合对Web应用进行负载均衡。
- Nginx:通过其
- 适用场景:主要适用于Web应用、API网关、需要根据URL、Header等信息进行流量控制的场景。由于能理解应用内容,可以实现更智能、更精细化的流量管理。
总结与补充:
- 四层更“底层”,关注连接本身,性能通常很高,适用于通用TCP/UDP流量分发。
- 七层更“智能”,理解应用内容,功能更丰富,适用于Web应用,可以实现更复杂的路由和策略。
1.3.4 四层和七层的区别
分层位置:四层负载均衡工作在传输层(TCP/UDP)及以下,而七层负载均衡工作在应用层(如HTTP/HTTPS)及以下。这是两者最根本的区别,决定了它们处理流量的方式。
- 四层:关注的是IP地址和端口号,处理的是原始的网络和传输层数据包。
- 七层:在理解IP和端口的基础上,进一步解析应用层协议的内容(如HTTP请求的URL、Header、Cookie等)。
性能:
- 四层:由于不解析应用层内容,处理开销小,性能通常更高,能够处理更高的并发连接数和吞吐量。适合对性能要求极高的场景。
- 七层:需要解析应用层数据,会有额外的CPU开销,性能相对四层会低一些。但现代硬件和软件优化已经使得七层负载均衡的性能足够满足大多数Web应用的需求。
原理:
- 四层:转发决策基于“IP地址 + 端口号”(即IPPort)。负载均衡器看到请求的目标VIP和端口,就决定是否转发以及转发给谁。
- 七层:转发决策不仅基于IP和端口,更关键的是基于应用层的信息,如虚拟URL、主机头(Host Header)、HTTP方法、Cookie等。这使得七层负载均衡可以实现更智能、更精细的路由策略。
功能类比:
- 四层:类似于路由器或交换机,主要工作是根据网络层和传输层信息进行数据包的转发和路由选择。
- 七层:类似于代理服务器(特别是反向代理),它不仅仅是转发,还可能修改请求/响应内容、缓存、提供安全防护等,更深入地参与到应用交互中。
安全性:
- 四层:主要处理网络和传输层信息,无法理解应用层内容,因此对于应用层的攻击(如基于特定URL或参数的攻击)无法识别和防御。它主要提供基础的连接层防护。
- 七层:由于能解析应用层内容,可以识别和防御一些应用层攻击,例如通过分析HTTP请求特征来防御特定的DDoS攻击(如您提到的SYN Cookie/Flood,虽然SYN Flood主要是四层攻击,但七层设备通常也集成了更广泛的DDoS防护能力,包括应用层攻击)。此外,七层负载均衡常与WAF(Web应用防火墙)结合,提供更全面的安全防护。
总结与补充:
- 如果您需要处理高并发、对性能要求极高、且应用层逻辑简单的服务(如某些TCP服务、游戏服务器),四层负载均衡可能是更好的选择。
- 如果您是Web应用、需要根据URL、用户特征(如地域、设备类型)进行路由、需要缓存、需要更精细的会话保持或需要集成安全防护(如WAF),七层负载均衡则更为合适。
在实际的云计算环境中,如阿里云SLB(负载均衡服务),通常同时支持四层(TCP/UDP监听)和七层(HTTP/HTTPS监听),为用户提供了灵活的选择。
haproxy
HAProxy是法国开发者 威利塔罗(Willy Tarreau) 在2000年使用C语言开发的一个开源软件
是一款具备高并发(万级以上)、高性能的TCP和HTTP负载均衡器
支持基于cookie的持久性,自动故障切换,支持正则表达式及web状态统计
企业版网站:https://www.haproxy.com
社区版网站:http://www.haproxy.org
github:https://github.com/haprox