haprox七层代理
一、负载均衡概念
什么是负载均衡
负载均衡:Load Balance,简称LB,是一种服务或基于硬件设备等实现的高可用反向代理技术,负载均衡将特定的业务(web服务、网络流量等)分担给指定的一个或多个后端特定的服务器或设备,从而提高了公司业务的并发处理能力、保证了业务的高可用性、方便了业务后期的水平动态扩展
为什么要用负载均衡
- web服务器的动态水平扩展
- 增强业务并发访问能力及处理能力---解决单服务器瓶颈问题
- 节约公网IP,降低IT支出成本
- 隐藏内部服务器---提高内部服务器安全性
- 配置简单---固定格式的配置文件
- 功能丰富---支持四层和七层,支持动态下线主机
- 性能较强---支持十万或者数十万并发
二、haproxy概念
HAProxy(High Availability Proxy)是一款开源的高性能 TCP/HTTP 负载均衡器和 反向代理软件,广泛应用于分发网络流量、提升系统可用性和扩展性。它支持:
- 四层(L4,传输层)和 七层(L7,应用层)负载均衡。
- 多种负载均衡算法(如轮询、最小连接、哈希等)。
- SSL/TLS 终止、健康检查、会话保持等高阶功能。
- 高并发、低延迟,适合大规模分布式系统。
haproxy基本配置
global全局配置段:
log 127.0.0.1 local2 #定义全局的syslog服务器;日志服务器需要开启UDP协议,最多可以定义两个
chroot /var/lib/haproxy #锁定运行目录
pidfile /var/run/haproxy.pid #指定pid文件
maxconn 100000 #指定最大连接数
user haproxy #指定haproxy的运行用户
group haproxy #指定haproxy的运行组
daemon #指定haproxy以守护进程方式运行
# turn on stats unix socket
stats socket /var/lib/haproxy/stats #指定haproxy的套接字文件
nbproc 2 #指定haproxy的work进程数量,默认是1个
cpu-map 1 0 #指定第一个work绑定第一个cpu核心
cpu-map 2 1 #指定第二个work绑定第二个cpu核心
nbthread 2 #指定haproxy的线程数量,默认每个进程一个线程,此参数与nbproc互斥
maxsslconn 100000 #每个haproxy进程ssl最大连接数,用于haproxy配置了证书的场景下
maxconnrate 100 #指定每个客户端每秒建立连接的最大数量
多进程和多线程配置信息
nbproc 2 #启用多进程
cpu-map 1 0 #进程和cpu核心绑定防止cpu抖动从而减少系统资源消耗
cpu-map 2 1 #2 表示第二个进程,1表示第二个cpu核心
多进程启用后,能看见haproxy启用了多个进程
开启多线程模式(多进程和多线程模式两者不能同时开启)
proxies配置
参数说明:
default配置
defaults
mode http #HAProxy实例使用的连接协议
log global #指定日志地址和记录日志条目的syslog/rsyslog日志设备
#此处的 global表示使用 global配置段中设定的log值。
option httplog #日志记录选项,httplog表示记录与 HTTP会话相关的各种属性值
#包括 HTTP请求、会话状态、连接数、源地址以及连接时间等
option dontlognull #dontlognull表示不记录空会话连接日志
option http-server-close #等待客户端完整HTTP请求的时间,此处为等 待10s。
option forwardfor except 127.0.0.0/8 #透传客户端真实IP至后端web服务器
#后在webserver中看日志即可看到地址透传信息
option redispatch #当server Id对应的服务器挂掉后,强制定 向到其他健康的服务器,重发
option http-keep-alive #开启与客户端的会话保持
retries 3 #连接后端服务器失败次数
timeout http-request 10s #等待客户端请求完全被接收和处理的最长时 间
timeout queue 1m #设置删除连接和客户端收到503或服务不可用等提示信息前的等待时间
timeout connect 120s #设置等待服务器连接成功的时间
timeout client 600s #设置允许客户端处于非活动状态,即既不发送数据也不接收数据的时间
timeout server 600s #设置服务器超时时间,即允许服务器处于既不接收也不发送数据的非动时间
timeout http-keep-alive 60s #session 会话保持超时时间,此时间段内会转发到相同的后端服务器
timeout check 10s #指定后端服务器健康检查的超时时间
maxconn 3000
default-server inter 1000 weight 3
三、haproxy实验环境搭建
haproxy服务器:172.25.254.100
[root@haproxy ~]# systemctl disable --now firewalld.service
安装haproxy:[root@haproxy ~]# dnf install haproxy -y
[root@haproxy ~]# systemctl start haproxy.service
RS1:172.25.254.10
下载nginx,关闭防火墙
[root@RS1 ~]# dnf install nginx -y
[root@RS1 ~]# systemctl disable --now firewalld.service
[root@RS1 ~]# echo RS1 - 172.25.254.10 > /usr/share/nginx/html/index.html
重启nginx服务:systemctl restart nginx.service
RS2:172.25.254.20
下载nginx,关闭防火墙
同上
测试:
四、haproxy负载均衡简单示例
[root@haproxy ~]# vim /etc/haproxy/haproxy.cfg
测试:
haproxy的状态页面配置
重启服务后浏览器访问: