HAProxy 及其配置详解

本篇博客主要介绍了 HAProxy 及其配置的详细含义。

HAProxy

HAProxy 提供高可用性、负载均衡以及基于 TCP 和 HTTP 应用的代理,支持虚拟主机,是免费、快速并且可靠的一种解决方案。HAProxy特别适用于那些负载特大的 web 站点,这些站点通常又需要会话保持或七层处理。HAProxy 运行在当前的硬件上,完全可以支持数以万计的并发连接,并且它的运行模式使得它可以很简单、安全地整合进当前的架构中,同时可以保护 web 服务器不被暴露在网络上。

HAProxy 配置

配置部分

HAProxy 配置中分成五部分内容,分别如下:

1、global:参数是进程级的,通常是和操作系统相关,这些参数一般只配置一次,如果配置无误,就不需要再次进行修改。

2、defaults:配置默认参数,这些参数可以被用到 frontend、backend、Listen 组件。

3、frontend:接收请求的前端虚拟节点,Frontend 可以更加规则直接指定具体使用后端的 backend。

4、backend:后端服务集群的配置,是真实服务器,一个 Backend 对应于一个或者多个实体服务器。

5、Listen:Frontend 和 backend 的组合体。

haproxy.cfg

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
### 全局配置信息 ###
# 参数是进程级的,通常和操作系统有关
global 
  maxconn 20480         # 默认最大连接数。
  log 127.0.0.1 local3  # 定义 haproxy 日志级别,可以为:err、warning、info、debug。
  chroot /var/haproxy   # chroot运行的路径。
  uid 99                # 运行haproxy进程的用户ID。
  gid 99                # 运行haproxy进程的用户组ID。
  daemon                # 以守护进程方式运行haproxy。
  nbproc 1              # 进程数量,可以设置为多个进程以提高性能。
  pidfile /var/run/haproxy.pid # haproxy进程的pid存放路径,启动进程的用户必须有权限访问此文件。
  ulimit -n 65535       # ulimit 的数量限制
### 默认配置选项 ###
# 参数可以被配置到frontend、backend和listen组件。
defaults
  log global
  mode http             # 所处理的类别,七层http,四层tcp。
  maxconn 20480         # 最大连接数。
  option httplog        # 日志类别,HTTP日志格式。
  option httpclose      # 每次请求完毕后主动关闭 http 通道。
  option dontlognull    # 不记录健康检查的日志信息。
  option forwardfor     # 如果后端服务器需要获得客户端的真实IP需要配置的参数,可以从 Http Header 中获取客户端IP。
  option redispatch     # serverId 对应的服务器挂掉后,强制定向到其他健康的服务器。
  option abortonclose   # 当服务器负载很高的时候,自动结束掉当前队列处理比较久的连接。
  stats refresh 30      # 统计页面刷新间隔。
  retries 3             # 3 次连接失败就认为服务不可用,也可以通过 “后面” 设置。
  balance roundrobin    # 设置默认的负载均衡方式,轮询方式。
  # balance source      # 设置默认的负载均衡方式,类似于 nginx 的 IP_Hash。
  # balance leastconn   # 设置默认的负载均衡方式,最小连接方式。
  contimeout 5000       # 连接超时时间。
  clitimeout 50000      # 客户端连接超时时间。
  srvtimeout 50000      # 服务器超时时间。
  timeout check 2000    # 心跳检测超时。
  
### 监控页面设置 ###
listen admin_status     # Fronted 和 Backend 的组合体,监控组的名称,按需求自定义名称。
  bind 0.0.0.0:65535    # 监听端口。
  mode http             #http 的七层模式。
  log 127.0.0.1 local3 err # 错误日志记录。
  stats refresh 5s      # 每隔5秒自动刷新监控页面。
  stats uri /admin?stats # 监控页面的url。
  stats realm xdhuxc\ xdhuxc # 监控页面显示信息。
  stats auth admin:admin     # 监控页面的用户名和密码,可以设置多个用户名。
  stats auth xdhuxc:xdhuxc   # 监控页面的用户名和密码xdhuxc/xdhuxc。
  stats hide-version         # 隐藏统计页面上的HAproxy版本信息。
  stats admin if TRUE        # 手工启用/禁用后端服务器(HAproxy-1.4.9以后版本)。
  
  errorfile 403 /etc/haproxy/errorfiles/403.http
  errorfile 500 /etc/haproxy/errorfiles/500.http
  errorfile 502 /etc/haproxy/errorfiles/502.http
  errorfile 503 /etc/haproxy/errorfiles/503.http
  errorfile 504 /etc/haproxy/errorfiles/504.http
  
  ### HAProxy 的日志记录内容设置
  capture request header Host len 40
  capture request header Content-Length len 10
  capture request header Referer len 200
  capture response header Server len 40
  capture response header Content-Length len 10
  capture response header Cache-Control len 8
  
  ### 网站监测 listen 配置
  ### 主要是监控 haproxy 后端服务器的监控状态
listen site_status
  bind 0.0.0.0:9090         # 监听端口
  mode http                 # http 的七层模式
  log 127.0.0.1 local3 err  # 日志级别
  monitor-uri /site_status  # 网站健康检查URL,用来检测HAproxy管理的网站是否可用,正常返回200,不正常返回503。
  acl site_dead nbsrv(server_web) lt 2 # 定义网站down时的策略,当挂在负载均衡上的指定backend中有效机器数小于1台时返回true。
  acl site_dead nbsrv(server_blog) lt 2
  acl site_dead nbsrv(server_bbs) lt 2
  monitor fail if site_dead  # 当满足策略的时候,返回503。
  monitor-net 192.168.16.2/32 # 来自192.168.16.2的日志信息不会被记录和转发
  monitor-net 129.168.16.3/32
  
  ### frontend 配置
  ### frontend配置里可定义多个acl进行匹配操作
frontend http_web_in
  bind 0.0.0.0:80  # 监听端口,即haproxy提供web服务的端口,和lvs的VIP端口类似。
  mode http        # http 的七层模式。
  log global       # 应用全局的日志配置。
  option httplog   # 启用http的log。
  option httpclose # 每次请求完毕后主动关闭http通道,HAProxy不支持keep-alive模式。
  option forwardfor # 如果后端服务器需要获得客户端的真实IP地址,需要配置此参数,将可以从Http header 中获得客户端IP。
  
  ### acl策略配置
  acl is_a hdr_beg(host) -i www.xdhuxc.org   # 判断域名是不是 www.xdhuxc.org,是则给予 a 服务器集群服务。
  acl is_b hdr_beg(host) -i www.xdhuxc.ocg # 判断域名是不是 www.xdhuxc.ocg,是则给予 b 服务器集群服务。
  
  use_backend a_server if is_a
  use_backend b_server if is_b
  
backend a_server
    mode http
    stats uri /haproxy
    balance roundrobin
    cookie JSESSIONID prefix
    stats hide-version
    option httpclose
    server web1 192.168.91.128:80 check
    server web2 192.168.91.129:80 check
    
backend b_server
    mode http
    stats uri /haproxy
    balance roundrobin
    cookie JSESSIONID
    stats hide-version
    option httpclose
    server web1 192.168.91.130 check

参考资料

http://blog.51cto.com/itnihao/915537

updatedupdated2020-01-062020-01-06
加载评论