HAProxy is free, open source software that provides a high availability load balancer and proxy server for TCP and HTTP-based applications that spreads requests across multiple servers. It is written in C and has a reputation for being fast and efficient.

Features:

  • Layer 4 (TCP) and Layer 7 (HTTP) load balancing
  • URL rewriting
  • Rate limiting
  • SSL/TLS termination
  • Gzip compression
  • Proxy Protocol support
  • Health checking
  • Connection and HTTP message logging
  • HTTP/2
  • Multithreading
  • Hitless Reloads

Performance:

Similiar:

  • LVS
  • Nginx

HAProxy 的负载均衡算法:

  • roundrobin,表示简单的轮询
  • static-rr,表示根据权重
  • leastconn,表示最少连接者先处理
  • source,表示根据请求源 IP,和 Nginx IP_hash 类似
  • uri,请求 URI
  • url_param,请求的 URI 参数
  • hdr(name), name 指定的 HTTP 首部
  • rdp-cookie(cookie), 根据 cookie(name) 哈希请求

HAProxy 关键配置

HAProxy 的配置文件共有 5 个域

  • global:用于配置全局参数
  • default:用于配置所有 frontend 和 backend 的默认属性
  • frontend:用于配置前端服务(即 HAProxy 自身提供的服务)实例
  • backend:用于配置后端服务(即 HAProxy 后面接的服务)实例组
  • listen:frontend+backend 的组合配置,可以理解成更简洁的配置方法

配置举例

HTTP

global
    daemon
    maxconn 256

defaults
    mode http
    timeout connect 5000ms
    timeout client 50000ms
    timeout server 50000ms

frontend http-in
    bind *:80
    default_backend servers

backend servers
    server server1 127.0.0.1:8000 maxconn 32

定义监控

在配置文件中增加

listen stats    #定义监控页面
    bind *:1080                     # 绑定端口 1080
    mode http                       # http mode
    stats hide-version              # Hide HAProxy version
    stats refresh 30s               # 每 30 秒更新监控数据
    stats uri /stats                # 访问监控页面的 uri
    stats realm HAProxy\ Stats      # 监控页面的认证提示
    stats auth admin:admin          # 监控页面的用户名和密码

然后通过 http://ip:1080/stats 即可访问

HAProxy 主备

现在个人代理需求不强烈,等折腾到了再搞。

reference