haproxy详解笔记
一、概述
HAProxy(High Availability Proxy)是一款开源的高性能 TCP/HTTP 负载均衡器和代理服务器,用于将大量并发连接分发到多个服务器上,从而提高系统的可用性和负载能力。它支持多种负载均衡算法,能够根据服务器的健康状态和负载情况动态分配请求,确保高可用性和性能优化。
二、主要功能
-
负载均衡:支持多种负载均衡算法,如轮询、最少连接、加权轮询等,可根据服务器的负载情况动态分配请求。
-
健康检查:能够定期检查后端服务器的健康状态,自动移除故障服务器,并在恢复后重新加入。
-
会话保持:支持多种会话保持机制,如基于 Cookie 的会话保持,确保用户的请求被转发到同一台服务器。
-
SSL 加密:支持 SSL/TLS 加密,可以对 HTTPS 请求进行解密和重新加密。
-
HTTP/2 支持:支持 HTTP/2 协议,提高 HTTP 请求的效率。
-
连接限制与速率限制:可以限制每个客户端的连接数和请求速率,防止恶意攻击。
-
统计页面:提供一个 Web 界面,用于实时监控 HAProxy 的状态和性能指标。
三、工作原理
HAProxy 的工作原理基于代理模式,它在客户端和服务器之间充当中间人的角色。当客户端发送请求到 HAProxy 时,HAProxy 会根据配置的规则将请求转发到后端服务器,并将服务器的响应返回给客户端。HAProxy 支持两种工作模式:
-
TCP 模式(四层代理模式):直接将 TCP 连接转发到后端服务器,不解析 HTTP 内容。
-
HTTP 模式(七层代理模式):解析 HTTP 请求和响应,支持更多的 HTTP 相关功能,如会话保持、HTTP 头部修改等。
四、配置文件结构
HAProxy 的配置文件(haproxy.cfg
)是其核心,包含了所有运行时的配置信息。配置文件主要分为以下几个部分:
-
全局设置(global):定义 HAProxy 的全局参数,如日志、最大连接数、线程数等。
-
默认设置(defaults):定义默认的连接参数,如超时时间、重试次数等。
-
前端(frontend):定义监听的端口和 IP 地址,以及如何根据请求内容选择后端。
-
后端(backend):定义后端服务器的地址、端口、负载均衡算法、健康检查等。
-
监听(listen):可以同时定义前端和后端的配置,常用于管理统计页面。
以下是一个简单的配置文件示例:
# 全局设置
global
log stdout format raw local0 # 配置日志输出到标准输出,格式为 raw,日志级别为 local0
maxconn 2000 # 设置 HAProxy 允许的最大并发连接数为 2000
daemon # 以守护进程模式运行 HAProxy,使其在后台运行
# 默认设置
defaults
log global # 使用配置全局中的日志设置
mode http # 设置默认的运行模式为 HTTP 模式,解析 HTTP 请求和响应
timeout connect 5s # 设置连接超时时间为 5 秒(客户端与服务器建立连接的超时时间)
timeout client 30s # 设置客户端超时时间为 30 秒(客户端无响应的超时时间)
timeout server 30s # 设置服务器超时时间为 30 秒(服务器无响应的超时时间)
# 前端配置
frontend http_front
bind *:80 # 绑定到所有网络接口的 80 端口,监听 HTTP 请求
mode http # 设置前端运行模式为 HTTP 模式
default_backend web_servers # 默认将请求转发到名为 web_servers 的后端服务器组
# 后端配置
backend web_servers
mode http # 设置后端运行模式为 HTTP 模式
balance roundrobin # 使用轮询算法进行负载均衡,依次将请求分配到后端服务器
server server1 192.168.1.11:80 check # 定义后端服务器 server1,IP 地址为 192.168.1.11,端口为 80,启用健康检查
server server2 192.168.1.12:80 check # 定义后端服务器 server2,IP 地址为 192.168.1.12,端口为 80,启用健康检查
五、安装与部署
HAProxy 可以通过多种方式安装,包括源码编译、包管理工具(如 apt、yum)以及 Docker。以下是通过 apt 安装的示例:
apt update
apt install haproxy
安装完成后,需要根据需求编辑配置文件,并启动 HAProxy 服务:
systemctl start haproxy
六、常用命令
-
查看版本:
haproxy -v
-
检查配置文件语法:
haproxy -c -f /path/to/haproxy.cfg
-
以调试模式运行:
haproxy -D -f /path/to/haproxy.cfg
-
终止指定进程:
haproxy -st <pid>
-
查看端口和连接状态:
netstat -tuln | grep haproxy
七、应用场景
HAProxy 广泛应用于各种需要高可用性和负载均衡的场景,如:
-
Web 应用负载均衡:将 HTTP/HTTPS 请求分发到多个 Web 服务器。
-
数据库负载均衡:分发数据库连接请求。
-
微服务架构:在微服务环境中,HAProxy 可以作为服务网关。
-
云原生环境:与 Kubernetes 等容器编排工具结合,提供入口网关。