网站首页 > 博客文章 正文
一、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网关等场景。
猜你喜欢
- 2025-03-14 高并发/高io下,设置linux下文件打开数限制
- 2025-03-14 Apache httpd 是如何实现高并发服务的
- 2025-03-14 Nginx-性能优化(nginx性能调整)
- 2025-03-14 possible SYN flooding on port 80. Sending cookies.
- 2025-03-14 Centos7系统内核优化脚本(centos7优化内核参数详解)
- 2025-03-14 linux 常用性能优化参数及理解(linux系统优化参数)
- 2025-03-14 第十八节:Linux网络子系统:从协议栈到性能调优
- 2025-03-14 CentOS系统全方位优化指南:性能调优与安全加固
- 2025-03-14 优化Linux网络丢包有哪些常用的工具和方法?
- 2025-03-14 高流量大并发Linux TCP性能调优(linux最大tcp连接数)
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- ifneq (61)
- 字符串长度在线 (61)
- googlecloud (64)
- messagesource (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)