跳到主要内容

负载均衡

L4 vs L7

维度L4(传输层)L7(应用层)
工作层TCP/UDPHTTP/HTTPS
决策依据IP + 端口URL、Header、Cookie
性能极高(内核态)较高(用户态)
功能简单转发URL 路由、Header 改写、WAF
代表LVS、云 NLBNginx、HAProxy、云 ALB

LVS 四层负载均衡

模式说明适用场景
DR(直接路由)请求经 LVS,响应由 RS 直接回客户端同 VLAN,性能最佳
NAT请求和响应都经 LVS跨网段,LVS 可能瓶颈
TUN(隧道)IP 隧道封装转发跨机房
ipvsadm 配置 DR 模式
# 添加虚拟服务(VIP:80)
ipvsadm -A -t 10.0.0.100:80 -s wrr

# 添加 Real Server
ipvsadm -a -t 10.0.0.100:80 -r 10.0.1.10:80 -g -w 3
ipvsadm -a -t 10.0.0.100:80 -r 10.0.1.11:80 -g -w 2

# -g: DR 模式 -w: 权重

HAProxy 七层负载均衡

/etc/haproxy/haproxy.cfg
global
maxconn 50000
log /dev/log local0

defaults
mode http
timeout connect 5s
timeout client 30s
timeout server 30s
option httplog

frontend web
bind *:80
bind *:443 ssl crt /etc/ssl/cert.pem

# URL 路由
acl is_api path_beg /api
use_backend api_servers if is_api
default_backend web_servers

backend web_servers
balance roundrobin
option httpchk GET /health
server web1 10.0.1.10:8080 check weight 3
server web2 10.0.1.11:8080 check weight 2

backend api_servers
balance leastconn
server api1 10.0.2.10:3000 check
server api2 10.0.2.11:3000 check

# 监控页面
listen stats
bind *:8404
stats enable
stats uri /stats
stats auth admin:password

常见面试问题

Q1: Nginx 和 HAProxy 做负载均衡怎么选?

答案

维度NginxHAProxy
定位Web 服务器 + 反向代理专业负载均衡器
L4stream 模块支持原生支持
健康检查开源版被动检查主动 + 被动
监控需额外模块内置 stats 页面
适用Web 服务 + 反向代理纯负载均衡、TCP 代理

小规模 Web 用 Nginx 一站式搞定,大规模或需要复杂负载均衡策略用 HAProxy。

相关链接