一、安装HAProxy
1.1 更新架构包
yum update -y
1.2 安装HAProxy
yum install haproxy -y
1.3 验证安装
haproxy -v
输出应显示HAProxy版本信息,确认安装成功。

二、部署HAProxy
2.1 主要配置文件
HAProxy的主配置文件位于 /etc/haproxy/haproxy.cfg。
2.2 编辑配置文件
vi /etc/haproxy/haproxy.cfg
2.3 完整配置示例
global
log 127.0.0.1 local2
chroot /var/lib/haproxy
pidfile /var/run/haproxy.pid
maxconn 4000
user haproxy
group haproxy
daemon
stats socket /var/lib/haproxy/stats
defaults
mode http
#mode表示代理模式 有三种 常用两种 http是7层代理(web服务器 httpd,tomcat等) tcp是4层代理(ssh,ftp,数据库等)
log global
#日志应用全局安装
option httplog
#启用记录HTTP请求、会话状态和计时器的功能。默认情况下,日志输入格式非常简陋,因为其仅包括源地址、目标地址和实例名称, #而“option httplog”参数将会使得日志格式变得丰富许多,其通常包括但不限于HTTP请求、连接计时器、会话状态、连接数、 #捕获的首部及cookie、“frontend”、“backend”及服务器名称,当然也包括源地址和端口号等
option dontlognull
#不记录空的日志
option http-server-close
#在使用长连接时,为了避免客户端超时没有关闭长连接,此能力可以使服务器端关闭长连接
option forwardfor except 127.0.0.0/8
通过#允许在发往服务器的请求首部中插入“X-Forwarded-For”首部 一般如果是反向代理 是反向代理主机访问后端服务器 服务器获取客户端ip就 #一定是 反向代理主机 而非真正的客户主机 所以反向代理一般能够设置 将原始访问的主机ip置于该请求头 后台主机就能定位正确客户端ip。 # 除了本机访问不转发
option redispatch
# 在利用基于cookie定向时,一旦后端某一server宕机时,会将会话重新定向至某一上游服务器,必须采用 的选项
retries 3
# 判断后端服务器失效的次数是重试3次
timeout http-request 10s
# 客户端http请求 不请求数据的关闭时间
timeout queue 1m
#等待的最大时长 是 1分钟
timeout connect 10s
#连接后端服务器超时时间
timeout client 1m
#客户端非活动的超时时间
timeout server 1m
#与服务器建立连接后等待响应的超时时间
timeout http-keep-alive 10s
#http长连接的保存时长
timeout check 10s
maxconn 3000
#健康状态监测时的超时时间,过短会误判,过长资源消耗
# 监控统计页面部署
listen stats
bind *:8080#端口号不能被占用
mode http
stats enable
stats uri /haproxy
stats realm Haproxy\ Statistics
stats auth admin:your_password# 请修改密码
stats refresh 30s
# 前端服务配置 - 接收客户端请求
frontend web_frontend
bind *:80#端口号不能被占用
mode http
option forwardfor
default_backend app_servers
# 后端服务器池配置
backend app_servers
balance roundrobin#采用轮询的负载均衡算法
option httpchk GET / HTTP/1.0
server web1 192.168.1.10:80 check inter 2000 rise 2 fall 3
server web2 192.168.1.11:80 check inter 2000 rise 2 fall 3
server web3 192.168.1.12:80 check inter 2000 rise 2 fall 3
后端服务器定义, maxconn 1024表示该服务器的最大连接数, cookie 1表示serverid为1, weight代表权重(默认1,最大为265,0则表示不参与负载均衡), #check inter2000是检测心跳频率, rise 2是2次正确认为服务器可用, fall 3是3次失败认为服务器不可用.
# TCP负载均衡示例(如MySQL)
listen mysql_cluster
bind *:3306
mode tcp
balance leastconn
server db1 192.168.1.20:3306 check
server db2 192.168.1.21:3306 check
三、负载均衡算法详解
3.1 roundrobin(轮询)
balance roundrobin #是HAProxy中的负载均衡算法,意思是轮询调度。
工作原理:按顺序将每个新请求依次分配给后端服务器。
示例:
请求1 → 服务器A
请求2 → 服务器B
请求3 → 服务器C
请求4 → 服务器A
请求5 → 服务器B
... 如此循环
示例说明
假设有3台后端服务器:
backend app_servers
balance roundrobin
server web1 192.168.1.10:80 check
server web2 192.168.1.11:80 check
server web3 192.168.1.12:80 check
请求分配顺序:
第1个请求 → web1
第2个请求 → web2
第3个请求 → web3
第4个请求 → web1
第5个请求 → web2
第6个请求 → web3
... 循环往复
3.2 其他常用算法

3.3算法选择建议
3.4加权轮询示例
backend app_servers
balance roundrobin
server web1 192.168.1.10:80 check weight 3 # 处理3个请求
server web2 192.168.1.11:80 check weight 2 # 处理2个请求
server web3 192.168.1.12:80 check weight 1 # 处理1个请求
分配顺序:
请求1 → web1 (权重3)
请求2 → web1 (权重3)
请求3 → web1 (权重3)
请求4 → web2 (权重2)
请求5 → web2 (权重2)
请求6 → web3 (权重1)
请求7 → web1 (权重3)
... 循环
总结:balance roundrobin 是最简单常用的负载均衡算法,适合大多数Web应用场景,特殊是在后端服务器性能相近的情况下。
四、配置系统服务
4.1 配置日志系统
创建rsyslog配置文件:
vi /etc/rsyslog.d/haproxy.conf
添加内容:
# HAProxy日志配置
$ModLoad imudp
$UDPServerRun 514
local2.* /var/log/haproxy.log
重启rsyslog服务:
systemctl restart rsyslog
4.2 配置防火墙
# 开放HAProxy相关端口
sudo firewall-cmd --permanent --add-port=80/tcp
sudo firewall-cmd --permanent --add-port=8080/tcp # 监控页面
sudo firewall-cmd --permanent --add-port=3306/tcp # MySQL负载均衡
sudo firewall-cmd --reload
五、设置开机自启动
5.1 启用HAProxy服务
# 启用开机自启动
systemctl enable haproxy
# 启动服务
systemctl start haproxy
# 检查服务状态
systemctl status haproxy
5.2 验证服务运行
# 检查进程
ps aux | grep haproxy
# 检查端口监听
netstat -tlnp | grep haproxy
# 测试配置语法
haproxy -f /etc/haproxy/haproxy.cfg -c![]()
六、监控和管理
6.1 访问监控页面
通过浏览器访问监控统计页面:
http://你的服务器IP:8080/haproxy
利用配置的用户名密码登录(示例中为admin/your_password)。

6.2 常用管理命令
# 启动服务
systemctl start haproxy
# 停止服务
systemctl stop haproxy
# 重启服务
systemctl restart haproxy
# 重新加载配置(不中断服务)
systemctl reload haproxy
# 查看服务日志
journalctl -u haproxy -f
七、故障排除
7.1 常见问题解决
问题1:服务启动失败
# 检查配置文件语法
haproxy -f /etc/haproxy/haproxy.cfg -c
# 查看详细错误日志
journalctl -u haproxy -n 50
问题2:无法访问监控页面
检查防火墙设置
确认绑定地址和端口
验证认证信息
问题3:健康检查失败
检查后端服务器网络连通性
确认健康检查URL是否正确
查看后端服务器日志
7.2 日志查看
# 查看HAProxy日志
tail -f /var/log/haproxy.log
关闭vi /etc/haproxy/haproxy.cfg监控配置能够看到web1和web2的轮询

# 查看系统服务日志
journalctl -u haproxy -f
八、性能优化
8.1 系统参数优化
# 编辑平台限制配置
vi /etc/security/limits.conf
# 添加以下内容
haproxy soft nofile 65536
haproxy hard nofile 65536
8.2 HAProxy性能调优
global
maxconn 100000
nbproc 2 # CPU核心数
nbthread 4 # 每个进程的线程数
defaults
maxconn 50000
报错1:
报错: hapory haproxy[43680]: /etc/rc.d/init.d/haproxy: 第 26 行:[: =: 期待一元表达式 hapory haproxy[43680]:的解决
systemctl status haproxy
报错:
hapory haproxy[43680]: /etc/rc.d/init.d/haproxy: 第 26 行:[: =: 期待一元表达式
hapory haproxy[43680]: Starting haproxy: [WARNING] 207/171141 (43688) : parsing [/etc/haproxy/haproxy.cfg:21]: keyword ‘redispatch’ is deprecated in favor 的应对方法
解决方法:
查看本地80端口有没有被被占用,如果80端口被占用会发生以上报错,需要修改vi /etc/haproxy/haproxy.cfg中的端口