haproxy http和tcp代理详解

global:全局配置参数,进程级的,用来控制Haproxy启动前的一些进程及系统设置
defaults:配置一些默认的参数,可以被frontend,backend,listen段继承使用
frontend:用来匹配接收客户所请求的域名,uri等,并针对不同的匹配,做不同的请求处理 ,我将其理解为server
backend:定义后端服务器集群,以及对后端服务器的一些权重、队列、连接数等选项的设置,我将其理解为Nginx中的upstream块
listen:我将其理解为frontend和backend的组合体

acl(关键字) 定义acl(名称) 方法 -i (忽略大小写) [匹配的路径或文件]
hdr_beg(host) 主机头
hdr_reg(host) 主机结尾
path_beg url 目录
path_end url 结尾文件

global
  log     127.0.0.1 local2  # 定义全局日志服务器
  chroot   /usr/local/haproxy  # 修改haproxy的工作目录到制定的目录,提高安全性
  pidfile   /var/run/haproxy.pid # pid文件位置
  maxconn   4000      # 最大连接数
  user    haproxy     # 服务运行时的身份,也可以用uid来表示
  group    haproxy     # 服务运行时的身份所属的组,可以用gid来表示
  Daemon           # 服务以守护进程的身份运行
  nbproc 1 #进程数

defaults
  mode  http      # 为http服务代理,http为7层协议,tcp4层
  log   global     # 全局日志
  option httplog      # 日志类别为http日志格式
  option dontlognull   # 不记录健康查询的日志
  option httpclose   # 关闭超时的http连接
  option http-server-close  # 每次请求完后主动关闭http通道,支持客户端长连接
  option forwardfor  except 127.0.0.0/8 # 如果后端服务器需要获得客户端真实ip需要配置的参数,可以从http header中获得客户端ip
  option  redispatch   #serverid对应的服务器挂掉后,强制定向到其他健康的服务器
  retries  3       #3次连接失败就认为服务不可用,也可以通过后面设置
  timeout http-request 10s # 请求超时间
  timeout queue  1m   # 排队超时
  timeout connect 5000ms   # 连接超时
  timeout client  30000ms  # 客户端超时
  timeout server  30000ms   # 服务器端超时
  timeout http-keep-alive 10s # 保持连接超时
  timeout check  10s    # 健康检测超时
  maxconn    3000   # 每个进程最大连接数,可以在global中配置


frontend http_80_in 
       bind 0.0.0.0:80
       mode http 
       log global 
       option httplog 
       option httpclose #每次请求完毕后主动关闭http通道,HA-Proxy不支持keep-alive模式 
       option forwardfor #如果后端服务器需要获得客户端的真实IP需要配置次参数,将可以从Http Header中获得客户端IP 
       ########acl策略配置############# 
       acl itnihao_web hdr_reg(host) -i ^(www.itnihao.cn|ww1.itnihao.cn)$ 
       #如果请求的域名满足正则表达式中的2个域名返回true -i是忽略大小写 
       acl itnihao_blog hdr_dom(host) -i blog.itnihao.cn 
       #如果请求的域名满足www.itnihao.cn返回true -i是忽略大小写 


 ########acl策略匹配相应############# 
       use_backend server_web if itnihao_web 
       #当满足itnihao_web的策略时使用server_web的backend 
       use_backend server_blog if itnihao_blog 
       #当满足itnihao_blog的策略时使用server_blog的backend 
       default_backend server_bbs 
       #以上都不满足的时候使用默认server_bbs的backend 

#########tcp代理########
frontend yqd-front
       bind *:3307
       mode tcp
       default_backend yqd-back


##########backend的设置############## 
#下面我将设置三组服务器 server_web,server_blog,server_bbs
##################backend server_web####################
backend server_web 
       mode http #http的7层模式 
       balance roundrobin #负载均衡的方式,roundrobin平均方式 
       cookie SERVERID #允许插入serverid到cookie中,serverid后面可以定义 
       option httpchk GET /index.html #心跳检测的文件 
       server web1 192.168.16.2:80 cookie web1 check inter 1500 rise 3 fall 3 weight 1 
       #服务器定义,cookie 1表示serverid为web1,check inter 1500是检测心跳频率rise 3是3次正确认为服务器可用, 
       #fall 3是3次失败认为服务器不可用,weight代表权重 
       server web2 192.168.16.3:80 cookie web2 check inter 1500 rise 3 fall 3 weight 2 

###################backend server_blog######################
backend server_blog 
       mode http #http的7层模式 
       balance roundrobin #负载均衡的方式,roundrobin平均方式 
       cookie SERVERID #允许插入serverid到cookie中,serverid后面可以定义 
       option httpchk GET /index.html #心跳检测的文件 
       server blog1 192.168.16.2:80 cookie blog1 check inter 1500 rise 3 fall 3 weight 1 
       server blog2 192.168.16.3:80 cookie blog2 check inter 1500 rise 3 fall 3 weight 2 

##################backend server_bbs######################## 
backend server_bbs 
       mode http #http的7层模式 
       balance roundrobin #负载均衡的方式,roundrobin平均方式 
       cookie SERVERID #允许插入serverid到cookie中,serverid后面可以定义 
       option httpchk GET /index.html #心跳检测的文件 
       server bbs1 192.168.16.2:80 cookie bbs1 check inter 1500 rise 3 fall 3 weight 1 
       server bbs2 192.168.16.3:80 cookie bbs2 check inter 1500 rise 3 fall 3 weight 2 
##################backend yqd-back######################## 
backend yqd-back
       mode tcp
       balance leastconn
       option httpchk
       server percona-node1 192.168.1.243:3306 check port 9200 inter 12000 rise 3 fall 3
       server percona-node2 192.168.1.233:3306 check port 9200 inter 12000 rise 3 fall 3
       server percona-node3 192.168.1.244:3306 check port 9200 inter 12000 rise 3 fall 3

配置参数详解部分

HAProxy配置中分成五部分内容,当然这些组件不是必选的,可以根据需要选择部分作为配置。

=====================

global    参数是进程级的,通常和操作系统(OS)相关.这些参数一般只设置一次,如果配置无误,就不需要再次配置进行修改
defaults   配置默认参数的,这些参数可以被利用配置到frontend,backend,listen组件
frontend 接收请求的前端虚拟节点,Frontend可以根据规则直接指定具体使用后端的 backend(可动态选择)。
backend 后端服务集群的配置,是真实的服务器,一个Backend对应一个或者多个实体服务器。
listen Frontend和Backend的组合体。

======================
global
log 137.0.0.1 local0 notice

#全局的日志配置 其中日志级别是[err warning info debug].local0 是日志设备,必须为如下24种标准syslog设备的一种:

#kern user mail daemon auth syslog lpr news

#uucp cron auth2 ftp ntp audit alert cron2

#local0 local1 local2 local3 local4 local5 local6 local7
maxconn 65535 #最大连接数
user haproxy #haproxy运行的用户和组
group haproxy

#nbproc 8 #创建4个进程进入deamon模式运行。此参数要求将运行模式设置为”daemon”
daemon #使HAProxy进程进入后台运行。这是推荐的运行模式
spread-checks 5

defaults
log global
mode http #默认的模式mode { tcp|http|health },tcp是4层,http是7层,health只会返回OK
option httplog clf #采用http日志格式
option dontlognull
option dontlog-normal
stats uri /admin/status #监控haproxy状态的页面,可以使用http://IP/admin/status查看
stats auth focus:@focus123 #登录监控页面的用户名密码
stats refresh 60s #监控页面的刷新时间

#option nolinger
option redispatch #当serverId对应的服务器挂掉后,强制定向到其他健康的服务器
retries 2 #两次连接失败就认为是服务器不可用,也可以通过后面设置
option http-server-close
option abortonclose #当服务器负载很高的时候,自动结束掉当前队列处理比较久的链接
option allbackups
option forwardfor
maxconn 65535 #默认的最大连接数
timeout connect 20s #连接超时
timeout client 120s #客户端超时
timeout server 120s #服务器超时
timeout queue 5m
timeout http-keep-alive 75s
timeout http-request 30m

frontend web_in
mode http #http的七层模式
maxconn 65535
bind :8080 #监听端口为8080

acl is_down hdr_beg(host) -i down.focus.cn #如果请求的域名满足down.focus.cn返回true -i是忽略大小写
acl is_pms hdr_beg(host) -i pms.focus.cn
acl is_image hdr_beg(host) -i image.focus.cn

acl is_css path_beg /css #如果请求的路径名满足/css返回true
acl is_js path_beg /js #如果请求的路径名满足/js返回true

#acl is_dynamic path_end .html #判断文件后缀名是不是.html,如果是返回true

#acl ref hdr(Referer) -i www.focus.cn #判断http-referer是不是www.baidu.com,如果是返回true

use_backend image_nginx if is_image is_css or is_js #当满足is_image,并且满足is_css或者满足is_js的策略时,使用image_nginx的backend
use_backend down_nginx if is_down #当满足is_down的策略时,使用down_nginx的backend
use_backend pms_nginx if is_pms #当满足is_pms的策略时,使用pms_nginx的backend

#use_backend bbs_nginx if is_bbs is_dynamic !is_admin#当满足is_bbs,is_dynamic并且不满足is_admin时,使用bbs_nginxdbackend
default_backend all_nginx #以上都不满足时,使用默认的all_nginx的backend

errorfile 400 /etc/haproxy/errors/400.http #定义haproxy的错误页面
errorfile 403 /etc/haproxy/errors/403.http
errorfile 408 /etc/haproxy/errors/408.http
errorfile 500 /etc/haproxy/errors/500.http
errorfile 502 /etc/haproxy/errors/502.http
errorfile 503 /etc/haproxy/errors/503.http
errorfile 504 /etc/haproxy/errors/504.http

backend down_nginx
mode http #http的七层模式
fullconn 4096 #设置最大连接
option httpchk HEAD /noc.gif HTTP/1.1\r\nHost:image.focus.cn

#服务器的request中的域名是什么,这个在应用的检测URL对应的功能有对域名依赖的话需要设置

balance roundrobin #负载均衡的方式,roundrobin平均方式

#balance source #负载均衡的方式,source根据客户端IP进行哈希的方式

#option allbackups #在设置了backup的时候,默认第一个backup会优先,设置option allbackups后,所有备份服务器权重一样

#cookie SERVERID insert nocache indirect #允许插入serverid到cookie中,serverid后面可以定义
server Server141 192.168.242.141:80 check inter 2s minconn 64 maxconn 1024 slowstart 10s weight 100 #定义Real服务器名/ip/启用健康检查/最小连接数/最大连接数/至全速缓冲时间/weight
server Server142 192.168.242.142:80 check inter 2s minconn 64 maxconn 1024 slowstart 10s weight 100

#server Server154D 192.168.242.154:80 check cookie ServerD inter 10s maxconn 256 slowstart 10s weight 64

#cookie ServerD 表示SERVERID为ServerD;check inter 2s 是检测心跳频率

backend image_nginx
mode http
fullconn 1024
option httpchk HEAD /noc.gif HTTP/1.1\r\nHost:image.focus.cn
balance roundrobin
server Server170 192.168.242.170:80 check inter 2s minconn 64 maxconn 1024 slowstart 10s weight 100

backend pms_nginx
mode http
fullconn 1024
option httpchk HEAD /noc.gif HTTP/1.1\r\nHost:image.focus.cn
balance roundrobin
server Server170 192.168.242.170:80 check inter 2s minconn 64 maxconn 1024 slowstart 10s weight 100

backend all_nginx
mode http
fullconn 3072
option httpchk HEAD /noc.gif HTTP/1.1\r\nHost:image.focus.cn
balance roundrobin
server Server170 192.168.242.170:80 check inter 2s minconn 64 maxconn 1024 slowstart 10s weight 100
server Server141 192.168.242.141:80 check inter 2s minconn 64 maxconn 1024 slowstart 10s weight 100
server Server142 192.168.242.142:80 check inter 2s minconn 64 maxconn 1024 slowstart 10s weight 100

文档更新时间: 2020-02-08 11:30   作者:月影鹏鹏