网站首页 > 开源技术 正文
一、HAProxy 四层(TCP)代理配置详解
配置文件示例(/etc/haproxy/haproxy.cfg)
bash
复制
global
log /dev/log local0 # 日志输出到系统日志(local0设备)
maxconn 50000 # HAProxy进程的最大并发连接数
user haproxy # 运行HAProxy的用户
group haproxy # 运行HAProxy的用户组
daemon # 以守护进程模式运行
stats socket /var/run/haproxy.sock mode 660 level admin # 启用统计套接字
defaults
mode tcp # 四层代理模式(基于TCP)
timeout connect 5s # 后端服务器连接超时时间
timeout client 50s # 客户端空闲超时时间
timeout server 50s # 后端服务器响应超时时间
frontend tcp_lb # 定义前端监听入口
bind *:80 # 监听所有IP的80端口
default_backend tcp_servers # 默认后端组
backend tcp_servers # 定义后端服务器组
balance roundrobin # 负载均衡算法:轮询
option tcp-check # 启用TCP健康检查(仅发送SYN包)
server server1 192.168.1.101:80 check inter 2000 rise 2 fall 3 maxconn 300
server server2 192.168.1.102:80 check inter 2000 rise 2 fall 3 maxconn 300
逐行解释
- global 段:
- log /dev/log local0:将日志输出到系统日志的 local0 设备。
- maxconn 50000:限制HAProxy进程的最大并发连接数,避免资源耗尽。
- user/group:以非root用户运行,提升安全性。
- stats socket:启用统计接口,用于动态管理(如禁用服务器)。
- defaults 段:
- mode tcp:四层代理模式,直接转发TCP流量。
- timeout connect:与后端服务器建立连接的超时时间。
- timeout client/server:客户端和服务器的空闲超时时间。
- frontend 段:
- bind *:80:监听所有IP的80端口。
- default_backend:指定默认后端服务器组。
- backend 段:
- balance roundrobin:轮询算法,依次分发请求。
- option tcp-check:仅发送TCP SYN包进行健康检查(轻量级)。
- server 行详解:
- server1:服务器名称标识。
- 192.168.1.101:80:后端服务器的IP和端口。
- check:启用健康检查。
- inter 2000:每2秒检查一次健康状态。
- rise 2:连续2次成功检查标记服务器为健康。
- fall 3:连续3次失败检查标记服务器为故障。
- maxconn 300:限制此服务器的最大并发连接数。
二、HAProxy 七层(HTTP)代理配置详解
配置文件示例(/etc/haproxy/haproxy.cfg)
bash
复制
global
log /dev/log local0
maxconn 50000
user haproxy
group haproxy
daemon
stats socket /var/run/haproxy.sock mode 660 level admin
defaults
mode http # 七层代理模式(基于HTTP)
timeout connect 5s
timeout client 50s
timeout server 50s
option forwardfor # 添加X-Forwarded-For头传递客户端IP
option http-keep-alive # 启用HTTP长连接
option httpclose # 在响应后关闭HTTP连接(兼容旧客户端)
frontend http_lb # 定义前端监听入口
bind *:80
acl path_static path_beg /static # 定义ACL规则:匹配以/static开头的路径
use_backend static_servers if path_static
default_backend dynamic_servers
backend static_servers # 静态资源后端组
balance leastconn # 负载均衡算法:最小连接数
server static1 192.168.1.103:80 check inter 2000 rise 2 fall 3 cookie s1
server static2 192.168.1.104:80 check inter 2000 rise 2 fall 3 cookie s2
backend dynamic_servers # 动态内容后端组
balance source # 负载均衡算法:源IP哈希
option httpchk GET /health # 发送HTTP GET请求检查健康状态
http-check expect status 200 # 期望HTTP 200状态码为健康
server dynamic1 192.168.1.105:8080 check inter 3000 rise 2 fall 3 maxconn 500
server dynamic2 192.168.1.106:8080 check inter 3000 rise 2 fall 3 maxconn 500
逐行解释
- defaults 段:
- mode http:七层代理模式,解析HTTP协议。
- option forwardfor:在请求头中添加 X-Forwarded-For,传递客户端IP。
- option http-keep-alive:启用HTTP长连接,减少握手开销。
- option httpclose:兼容不支持长连接的客户端。
- frontend 段:
- acl path_static path_beg /static:定义ACL规则,匹配以 /static 开头的路径。
- use_backend:根据ACL规则选择后端组。
- backend static_servers 段:
- balance leastconn:最小连接数算法,优先选择负载低的服务器。
- cookie s1:会话保持(cookie插入标识 s1)。
- backend dynamic_servers 段:
- balance source:源IP哈希算法,同一客户端的请求固定到同一服务器。
- option httpchk:发送HTTP GET请求到 /health 检查健康状态。
- http-check expect status 200:要求返回200状态码才视为健康。
- maxconn 500:限制服务器的最大并发连接数。
三、高并发场景下的操作系统优化
1. 修改文件描述符限制
编辑 /etc/security/limits.conf:
bash
复制
* soft nofile 1000000 # 所有用户的软限制(当前会话生效)
* hard nofile 1000000 # 所有用户的硬限制(需重启生效)
haproxy soft nofile 1000000 # HAProxy进程的软限制
haproxy hard nofile 1000000 # HAProxy进程的硬限制
- 作用:避免因文件描述符不足导致连接被拒绝。
2. 调整内核网络参数
编辑 /etc/sysctl.conf:
bash
复制
# 增大TCP连接队列
net.core.somaxconn = 65535 # 每个端口最大监听队列长度
net.ipv4.tcp_max_syn_backlog = 65535 # 半连接队列长度
# 快速回收TIME_WAIT连接
net.ipv4.tcp_tw_reuse = 1 # 允许重用TIME_WAIT连接
net.ipv4.tcp_tw_recycle = 1 # 快速回收TIME_WAIT连接(谨慎使用)
# 增大临时端口范围
net.ipv4.ip_local_port_range = 1024 65535 # 客户端可用端口范围
# 禁用TCP慢启动(适用于长连接)
net.ipv4.tcp_slow_start_after_idle = 0
# 增大TCP缓冲区
net.core.rmem_max = 16777216 # 接收缓冲区最大值(16MB)
net.core.wmem_max = 16777216 # 发送缓冲区最大值(16MB)
net.ipv4.tcp_rmem = 4096 87380 16777216 # 接收缓冲区动态调整范围
net.ipv4.tcp_wmem = 4096 65536 16777216 # 发送缓冲区动态调整范围
# 启用TCP Fast Open(减少握手延迟)
net.ipv4.tcp_fastopen = 3 # 客户端和服务器均启用
应用配置:
bash
复制
sudo sysctl -p
3. HAProxy全局参数优化
在 global 段添加:
bash
复制
global
tune.bufsize 32768 # 每个请求的缓冲区大小(默认16KB)
tune.maxrewrite 2048 # 头部最大重写空间(默认1KB)
tune.ssl.default-dh-param 2048 # SSL DH参数长度(提升安全性)
nbthread 8 # 工作线程数(建议等于CPU核心数)
spread-checks 2 # 健康检查时间分散(避免同时检查)
四、验证与监控
1. 查看HAProxy状态
bash
复制
sudo systemctl status haproxy # 检查服务状态
echo "show info" | sudo socat /var/run/haproxy.sock - # 查看统计信息
2. 压力测试
使用 wrk 测试并发性能:
bash
复制
wrk -t12 -c5000 -d30s http://your-server-ip:80
- -t12:12个线程。
- -c5000:5000个并发连接。
- -d30s:持续30秒。
五、注意事项
- 健康检查频率:inter 值不宜过小(如低于1秒),避免对后端服务器造成压力。
- TIME_WAIT回收:net.ipv4.tcp_tw_recycle 在NAT环境下可能导致问题,需谨慎启用。
- 线程绑定:若启用 nbthread,可绑定CPU核心提升性能:
- bash
- 复制
- global cpu-map 1 0 # 线程1绑定到CPU0 cpu-map 2 1 # 线程2绑定到CPU1
通过以上配置和优化,HAProxy可支持 10万级以上并发连接,适用于高流量Web应用、API网关等场景。
- 上一篇: 电动工具:电钻和冲击钻,冲击驱动器与冲击扳手
- 下一篇: 100个常用生活物品的英文名称,值得收藏!
猜你喜欢
- 2025-03-11 100个常用生活物品的英文名称,值得收藏!
- 2025-03-11 电动工具:电钻和冲击钻,冲击驱动器与冲击扳手
- 2025-03-11 qrfs 2.2 - 扫码传文件共享剪贴板,内网快传更安全
- 2025-03-11 Qt网络编程深度实践:如何构建支持断点续传的工业级文件传输系统
- 2025-03-11 2020年系统被提前放出:Windows 10新版亮相
- 2025-03-11 FastAPI 鉴权解析:实现身份验证与权限控制的关键步骤
- 2025-03-11 Nginx常见问题
- 2025-03-11 Linux C语言socket网络编程
- 2025-03-11 Linux深入理解Socket异常
- 2025-03-11 从linux内核出发彻底弄懂socket底层的来龙去脉
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- jdk (81)
- putty (66)
- rufus (78)
- 内网穿透 (89)
- okhttp (70)
- powertoys (74)
- windowsterminal (81)
- netcat (65)
- ghostscript (65)
- veracrypt (65)
- asp.netcore (70)
- wrk (67)
- aspose.words (80)
- itk (80)
- ajaxfileupload.js (66)
- sqlhelper (67)
- express.js (67)
- phpmailer (67)
- xjar (70)
- redisclient (78)
- wakeonlan (66)
- tinygo (85)
- startbbs (72)
- webftp (82)
- vsvim (79)
本文暂时没有评论,来添加一个吧(●'◡'●)