- 高可用性
- 能够检测后端服务器的健康状况。如果某台后端服务器出现故障,HAProxy 会自动将其从负载均衡池中移除,直到它恢复正常后再重新加入,从而确保整个系统的持续稳定运行。 - 支持多种故障切换模式,例如主动/被动模式,当主服务器出现故障时,备用服务器能够迅速接管服务,保证业务不中断。
- 负载均衡
- 支持多种负载均衡算法,如轮询(Round Robin)、最少连接(Least Connections)等。 - 轮询算法会依次将请求分发到后端的每台服务器,适用于后端服务器性能相近的情况。最少连接算法则会将新的请求发送到当前连接数最少的服务器,这样可以更合理地利用服务器资源,适用于服务器性能有差异或者服务器处理请求的时长不同的情况。
- 性能卓越
- 它在网络层进行高效的数据转发,与应用层相比,减少了很多不必要的处理开销。 - 能够处理大量的并发连接,并且具有较低的延迟,特别适用于高流量的网站或应用。
- 支持多种协议
-
对于基于 TCP 的应用,如数据库服务、邮件服务等,HAProxy 可以在不了解应用层协议的情况下进行高效的负载均衡。
-
对于 HTTP 应用,它可以基于 URL、HTTP 头部等信息进行更精细的负载均衡和请求路由,例如将不同类型的请求分发到不同的后端服务器组。
- 安全防护
- 可以作为应用的前端防护层,提供一些基本的安全功能。例如,它可以限制客户端的连接速率,防止恶意的洪水攻击;还可以通过设置访问控制列表(ACL)来限制对后端服务器的访问,只允许特定的 IP 地址或 IP 段访问。
二、应用场景
- 大型网站
- 对于像电商网站、新闻门户等流量巨大的网站,HAProxy 可以将用户的请求均衡地分发到多台 Web 服务器上,提高网站的响应速度和吞吐量,同时保证网站的高可用性。 - 例如,在促销活动期间,网站流量会急剧增加,HAProxy 能够自动调整负载均衡策略,确保网站不会因为流量过大而崩溃。
- Web 应用集群
- 在构建 Web 应用集群时,HAProxy 可以将前端的 HTTP 请求分发到后端的多个应用服务器上,实现应用的横向扩展。不同的应用服务器可以部署在不同的物理服务器上,也可以通过容器技术部署在同一台物理服务器上,HAProxy 都能有效地管理和均衡它们之间的负载。
- 微服务架构
- 在微服务架构中,有众多的微服务实例。HAProxy 可以作为 API 网关的一部分,负责将外部请求路由到不同的微服务实例上,同时实现负载均衡和服务发现等功能。它可以根据请求的路径、方法等信息将请求准确地转发到相应的微服务,提高微服务系统的整体性能和可靠性。
三、配置和管理
- 配置文件
- HAProxy 的配置主要通过一个文本配置文件进行。在配置文件中,可以定义前端(frontend)和后端(backend)的相关参数。前端部分主要定义了监听的端口、协议等信息,后端部分则定义了后端服务器的列表以及负载均衡算法等。
- 管理方式
- 可以通过命令行工具对 HAProxy 进行管理和监控。常用的命令如`haproxy -f config_file`来启动 HAProxy 并加载指定的配置文件。 - 还有一些第三方的监控工具可以与 HAProxy 集成,实时显示服务器的负载情况、连接数、吞吐量等指标,以便管理员及时了解系统的运行状态并进行调整优化。 总之,HAProxy 是一款功能强大的负载均衡和代理软件,在现代互联网应用和企业级系统中有着广泛的应用,能够有效地提高系统的性能、可用性和可靠性。
(二)实验
主机:haproxy,服务器1、2
1、分别添加地址
在服务器1、2上安装nginx
root@webserver1 \~\]# dnf install nginx -y
\[root@webserver2 \~\]# dnf install nginx -y
\[root@webserver1 \~\]# echo webserver1 - 172.25.254.10 \> /usr/share/nginx/html/index.html
\[root@webserver1 \~\]# systemctl enable --now nginx
Created symlink /etc/systemd/system/multi-user.target.wants/nginx.service → /usr/lib/systemd/system/nginx.service.
\[root@webserver2 \~\]# echo webserver2 - 172.25.254.20 \> /usr/share/nginx/html/index.html
\[root@webserver2 \~\]# systemctl enable --now nginx
Created symlink /etc/systemd/system/multi-user.target.wants/nginx.service → /usr/lib/systemd/system/nginx.service.
2、在主机haproxy上安装haproxy
\[root@haproxy \~\]# dnf install haproxy -y
使用frontend和backend参数配置proxies
\[root@haproxy \~\]# vim /etc/haproxy/haproxy.cfg
\[root@haproxy \~\]# systemctl restart haproxy.service
###### 用curl检测主机

使用 systemctl stop nginx.service命令检测服务器
全局配置
\[root@haproxy \~\]# vim /etc/haproxy/haproxy.cfg
\[root@haproxy \~\]# systemctl restart haproxy.service
\[root@haproxy \~\]# pstree -p \| grep haproxy
###### 定义修改日
其核心命令为vim /etc/rsyslog.conf
###### haproxy代理配置
server配置\[root@haproxy \~\]# vim /etc/haproxy/haproxy.cfg
热更新
HAProxy 支持热更新配置,这意味着可以在不中断服务的情况下更新配置。以下是 HAProxy 热更新的方法:
一、使用 HAProxy 的命令行工具
1. 首先,找到 HAProxy 的运行进程 ID(PID)。通常可以在配置文件中指定的 pidfile 路径下找到该文件,文件内容即为 PID。或者通过操作系统的进程查看命令(如\`ps aux \| grep haproxy\`)来查找。
2. 然后,使用\`haproxy\`命令行工具结合\`-f\`参数指定新的配置文件,以及\`-sf\`参数指定要平滑重启的旧进程 ID。例如: - \`haproxy -f new_config.cfg -sf old_process_id\` - 这里的\`new_config.cfg\`是新的配置文件,\`old_process_id\`是旧的 HAProxy 进程 ID。执行这个命令后,HAProxy 会读取新的配置文件,启动新的进程,并将旧进程的连接平滑地迁移到新进程上。
二、发送信号
1. 另一种方法是通过向正在运行的 HAProxy 进程发送信号来实现热更新。可以使用\`kill\`命令发送\`USR2\`信号来触发配置文件的重新加载: - \`kill -USR2 \