HAProxy (High Availability Proxy) 是一款强大的开源负载均衡器和代理服务器。它主要用于提高 Web 应用程序和服务的可用性和性能。HAProxy 可以在 TCP 和 HTTP 层面上工作,并且支持多种负载均衡算法,广泛应用于高流量网站和大型分布式系统中。
社区版与企业版网站:[HAProxy Technologies ]
网站界面
企业版与社区版区别
HAProxy (High Availability Proxy)的主要功能:
1. 负载均衡:
- 支持多种负载均衡算法,如轮询(Round Robin)、最少连接(Least Connections)、源地址哈希(Source Address Hashing)等。
2. 健康检查:
- 自动检测后端服务器的健康状态,并在服务器出现故障时将其从负载均衡池中移除,以避免向故障服务器发送请求。
3. 会话保持:
- 支持基于 cookie 的会话保持,确保来自同一个客户端的请求被定向到相同的后端服务器,以维持会话的一致性。
4. 高级路由:
- 支持基于 URL、HTTP 头等的高级路由功能,允许根据请求的不同属性将流量分发到不同的后端服务器组。
5. SSL/TLS 加密:
- 支持 SSL/TLS 加密,可以在 HAProxy 和客户端之间加密通信,减轻后端服务器的加密负担。
6. TCP 和 HTTP 层代理:
- 可以在 TCP 层和 HTTP 层工作,支持 TCP 和 HTTP/HTTPS 协议。
7. 压缩和解压:
- 支持对 HTTP 响应进行压缩,减少传输的数据量,提高带宽利用率。
8. 缓存:
- 支持简单的缓存机制,可以缓存 HTTP 响应,减少后端服务器的负载。
9. 日志记录:
- 提供详细的日志记录功能,可以记录请求和响应信息,用于调试和监控。
10. 监控和统计:
- 提供详细的监控和统计信息,包括连接数、请求处理时间等,有助于管理员了解系统的运行状态。
11. 高可用性:
- 可以通过集群配置实现高可用性,确保即使某个节点出现故障,服务仍可继续运行。
12. 灵活的配置:
- 支持复杂的配置选项,可以根据需要进行高度定制。
13. 虚拟主机:
- 支持虚拟主机,允许在一个 HAProxy 实例上托管多个不同的站点。
14. 访问控制:
- 支持基于 IP 地址或 HTTP 头的访问控制,可以限制某些客户端访问特定的资源。
15. 错误页面:
- 支持自定义错误页面,当请求无法成功处理时,可以显示友好的错误信息。
16. 重定向:
- 支持 URL 重定向,可以在 HTTP 层面对 URL 进行重定向。
17. 请求和响应头部操作:
- 支持修改请求和响应头部,例如添加、删除或修改 HTTP 头部字段。
使用场景
1. Web 应用程序负载均衡:
- 为高流量的 Web 应用程序提供负载均衡服务。
2. API 网关:
- 作为 API 网关,为多个微服务提供统一的入口点。
3. 数据库负载均衡:
- 可以用于数据库读写分离或负载均衡。
4. 邮件服务器负载均衡:
- 为邮件服务器提供负载均衡和高可用性。
5. 云环境中的负载均衡:
- 在云环境中部署 HAProxy 以实现横向扩展和负载均衡。
6. 混合环境负载均衡:
- 在混合环境中(如私有云和公有云)部署 HAProxy 以统一管理负载均衡。
配置和管理和一些重要的global参数说明
- HAProxy 通过文本配置文件进行配置,该文件通常位于 `/etc/haproxy/haproxy.cfg`。
- 可以使用 `haproxy` 命令行工具启动、停止和重启服务。
实例练习
haproxy的基本部署
准备3台虚拟机 两台主机 一太haproxy服务器 三台虚拟机配置同一个网段的IP
haproxy IP :172.25.254.100
web1,web2 ip
在haproxy主机上安装haproxy 软件
服务器上配置对应环境
listen webclusterbind *:80mode httpbalance roundrobinserver web1 172.25.254.10:80 server web2 172.25.254.20:80
环境配置完成
常用全局参数练习
nbproc--(开启进程个数)
查看默认情况开启几个进程,有几行代表几个进程看到默认只有一个进程
pstree -p | grep haproxy
打开配置文件添加 nbproc 2
[root@haproxy ~]# vim /etc/haproxy/haproxy.cfg
重启服务查看改变
[root@haproxy ~]# systemctl restart haproxy.service
[root@haproxy ~]# pstree -p | grep haproxy
不过这样设置会造成CPU在短时间内频繁地在不同任务间切换,导致性能下降。
为了防止对应事件我们引入新的参数;
nbthread 开启多线程
注意:多进程与多线程不能同时开多个,同时打开多个会报错。
禁用之前的设置 ,和设置多线程;
重启服务
[root@haproxy ~]# systemctl restart haproxy.service
这里现实什么查看什么要不然看不到
Proxies
frontend参数介绍
bind: #指定HAProxy的监听地址,可以是IPV4或IPV6,可以同时监听多个IP或端口,可同时用于listen字段中bind [<address>]:<port_range> [, ...] [param*]#注意:如果需要绑定在非本机的IP,需要开启内核参数:net.ipv4.ip_nonlocal_bind=1
示例
frontend webcluster #可以采用后面形式命名:业务-服务-端口号bind :80,:8080bind 10.0.0.7:10080,:8801-8810,10.0.0.17:9001-9010mode http|tcp #指定负载协议类型use_backend <backend_name> #调用的后端服务器组名称
网页重定向
编辑文件
vim /etc/haproxy/haproxy.cfg
重启服务
测试
Socat 工具的使用
haproxy多进程热处理 示例1
haproxy的算法1
在主机中配置
测试
haproxy的算法2
测试
haproxy的算法3
测试
示例练习4: 状态页面监控
登陆后的监控界面