HAProxy 服务
1. 功能与作用: HAProxy 是一款高性能、开源的负载均衡器和代理服务器软件。它主要用于:
- 负载均衡: 将客户端请求分发到多个后端服务器上,提高应用的可扩展性和可用性。
- 高可用性: 通过健康检查自动屏蔽故障服务器,确保服务持续可用。
- 反向代理: 接收客户端请求并转发给后端服务器,隐藏后端服务器的细节。
- SSL 终结: 在代理层处理 SSL/TLS 加密和解密,减轻后端服务器负担。
- TCP 与 HTTP 代理: 支持四层(TCP)和七层(HTTP)代理。
2. 关键概念:
- 前端(Frontend): 定义监听的 IP 地址、端口以及如何处理传入的流量(如绑定 ACL 规则)。
- 后端(Backend): 定义一组接收流量的服务器(服务器池)以及如何将流量分发到它们(负载均衡算法)。
- 服务器(Server): 后端池中的具体应用服务器实例。
- ACL(访问控制列表): 用于根据请求内容(如 URL、Host 头、源 IP 等)做出决策(如选择后端、重定向)。
- 负载均衡算法: 决定如何选择后端服务器(如轮询
roundrobin、最少连接leastconn、源 IP 哈希source等)。 - 健康检查: 定期检查后端服务器状态,自动将不可用的服务器移出服务池。
OpenEuler 安装 HAProxy
-
使用
yum安装: OpenEuler 的官方仓库通常包含 HAProxy。打开终端,执行以下命令:bashsudo yum install haproxy -
验证安装: 安装完成后,检查 HAProxy 的版本以确认安装成功:
bashhaproxy -v
HAProxy 配置文件详解与示例
HAProxy 的主要配置文件是 /etc/haproxy/haproxy.cfg。配置文件结构清晰,通常包含以下部分:
haproxy
# /etc/haproxy/haproxy.cfg
# 全局配置 (Global settings)
global
log /dev/log local0
log /dev/log local1 notice
chroot /var/lib/haproxy
stats socket /var/lib/haproxy/stats mode 660 level admin
user haproxy
group haproxy
daemon
# 默认配置 (Default settings for frontends and backends)
defaults
log global
mode http
option httplog
option dontlognull
timeout connect 5000ms
timeout client 50000ms
timeout server 50000ms
# 前端配置 (Define where HAProxy listens)
frontend http_front
bind *:80 # 监听所有 IPv4 地址的 80 端口 (HTTP)
acl is_static path_beg -i /static /images /javascript /stylesheets # 定义 ACL 规则 (示例)
use_backend static_servers if is_static # 根据 ACL 使用特定后端
default_backend app_servers # 默认后端
# 静态内容后端
backend static_servers
balance roundrobin # 负载均衡算法
server static1 192.168.1.101:80 check # 后端服务器1,开启健康检查
server static2 192.168.1.102:80 check # 后端服务器2
# 应用后端
backend app_servers
balance leastconn # 最少连接数算法
option httpchk GET /health # HTTP 健康检查端点
server app1 192.168.1.201:8080 check
server app2 192.168.1.202:8080 check
# 状态监控页面 (Optional)
listen stats
bind *:8080 # 绑定监控页面的端口
stats enable
stats uri /haproxy?stats # 访问 URI
stats realm Haproxy\ Statistics # 认证域
stats auth admin:password # 认证用户名和密码 (请更改!)
配置文件说明:
global: 设置全局参数,如日志、运行用户、工作模式等。defaults: 为后续的frontend和backend设置默认参数(如日志选项、超时、默认模式)。frontend: 定义监听端口和如何处理请求。使用bind指定监听地址和端口。acl定义规则,use_backend根据规则选择后端,default_backend指定默认后端。backend: 定义一组服务器。balance指定负载均衡算法。server定义后端服务器地址、端口,check启用健康检查。option httpchk可指定 HTTP 健康检查的具体端点。listen(或frontend+backend): 可以合并frontend和backend为一个listen块。示例中stats部分专门用于开启一个监控页面。
管理 HAProxy 服务
-
启动服务:
bashsudo systemctl start haproxy -
设置开机自启:
bashsudo systemctl enable haproxy -
检查服务状态:
bashsudo systemctl status haproxy -
重新加载配置 (修改配置后): 修改
/etc/haproxy/haproxy.cfg后,无需完全重启服务,可以平滑重载配置:bashsudo systemctl reload haproxy -
查看日志: HAProxy 日志通常位于
/var/log/messages或配置中指定的位置(如示例中的/dev/log,需配合 syslog 配置)。使用journalctl查看:bashsudo journalctl -u haproxy
验证与监控
-
访问状态页面: 如果配置了
listen stats,可以通过浏览器访问http://<haproxy_ip>:8080/haproxy?stats,并使用配置的用户名(admin)和密码(password)登录查看服务器状态、流量统计等。 -
检查监听端口: 使用
netstat或ss检查 HAProxy 是否在监听配置的端口(如 80 和 8080):bashsudo ss -tuln | grep -E '(80|8080)' -
测试负载均衡: 向 HAProxy 监听的 IP 和端口(如
http://<haproxy_ip>:80)发送请求,观察请求是否被分发到不同的后端服务器(可以通过后端服务器的日志或返回内容中的特定标识来判断)。
注意事项
- 安全性:
- 务必更改
stats页面的默认用户名和密码。 - 根据安全策略调整
chroot、stats socket的权限。 - 考虑使用防火墙限制访问 HAProxy 端口的来源 IP。
- 务必更改
- 性能调优:
- 根据业务需求调整
global中的maxconn(最大连接数)。 - 调整
timeout参数以适应网络环境和应用响应时间。 - 选择合适的负载均衡算法。
- 根据业务需求调整
- 健康检查:
- 确保配置的健康检查(
check,option httpchk)能够准确反映后端应用的真实状态。 - 调整健康检查间隔(
inter)、超时(timeout)和失败阈值(rise,fall)。
- 确保配置的健康检查(
- SELinux: OpenEuler 可能启用 SELinux,如果遇到权限问题,可能需要调整策略或暂时设置为许可模式(
setenforce 0)进行测试(生产环境需谨慎)。
这个指南提供了在 OpenEuler 上使用 HAProxy 的基础知识、安装步骤、详细配置示例以及服务管理方法。请根据你的实际网络环境和应用需求调整 IP 地址、端口、负载均衡算法和健康检查配置。