HAProxy简介及配置文件详解

时间:2021-10-30 04:36:45
一 HAProxy简介
    HAProxy提供高可用、负载均衡以及基于TCP和HTTP的应用代理,适合处理高负载站点的七层数据请求。类似的代理服务可以屏蔽内部真实服务器,防止内部服务器遭受攻击。
   HAProxy特点和优点
   1.支持原声SSL,同时支持客户端和服务器的SSL.
   2.支持IPv6和UNIX套字节(sockets
   3.支持HTTP Keep-Alive
   4.支持HTTP/1.1压缩,节省宽带
   5.支持优化健康检测机制(SSL、scripted TCP、check agent...)
   6.支持7层负载均衡
   7.可靠性和稳定性非常好。
   8.并发连接40000-50000个,单位时间处理最大请求20000个,最大数据处理10Gbps.
   9.支持8种负载均衡算法,同时支持session保持。
   10.支持虚拟主机
   11.支持连接拒绝全透明代理
   12.拥有服务器状态监控页面
   13.支持ACL.

   HAProxy为了让同一客户端访问服务器可以保持会话。有三种解决方法:客户端IPCookie以及Session
   1.HAProxy通过客户端IP进行Hash计算并保存,以此确保当相同IP访问代理服务器可以转发给固定的真实服务器。
   2.HAProxy依靠真实服务器发送客户端的Cookie信息进行会话保持。
   3.HAProxy将保存真实服务器的Session以及服务器标识,实现会话保持。
   (HAProxy只要求后端服务器能够在网络联通,也没有像LVS那样繁琐的ARP配置)
   HAProxy的balance8种负载均衡算法:
   1.roundrobin : 基于权重轮循。
   2.static-rr : 基于权重轮循。静态算法,运行时改变无法生效
   3.source : 基于请求源IP的算法。对请求的源IP进行hash运算,然后将结果与后端服务器的权重总数想除后转发至某台匹配服务器。使同一IP客户端请求始终被转发到某特定的后端服务器。
   4.leastconn : 最小连接。(适合数据库负载均衡,不适合会话短的环境) 
   5.uri : 对部分或整体URI进行hash运算,再与服务器的总权重想除,最后转发到匹配后端。
   6.uri_param : 根据URL路径中参数进行转发,保证在后端服务器数量不变的情况下,同一用户请求分发到同一机器。
   7.hdr(<name>) : 根据http头转发,如果不存在http头。则使用简单轮循。
   HAProxy主要工作模式
   1.tcp模式:该模式下,在客户端和服务器之间将建立一个全双工的连接,且不会对7层的报文做任何处理的简单模式。此模式默认,通常用于SSL、SSH、SMTP应用。
   2.http模式(一般使用):该模式下,客户端请求在转发给后端服务器之前会被深度分析,所有不与RFC格式兼容的请求都会被拒绝。
   HAProxy架构图
HAProxy简介及配置文件详解
二 HAProxy安装及配置文件参数
    HAProxy安装
 
   
  1. yum install haproxy -y
    HAProxy环境
 
   
  1. 配置文件:/etc/haproxy/haproxy.cfg
  2. global
    全局配置段
  3. 进程及安全配置相关的参数
  4. 性能调整相关参数
  5. Debug相关参数
  6. (proxies
    代理配置段)
  7. default
    默认配置 (fronttend backend listen 三个的默认参数)
  8. frontend
    前端
    定义一系列监听套字节,接收客户端请求
  9. backend
    后端
    定义一系列后端服务器,请求转发
  10. listen
    前后端直接关联
      配置文件详解
 
    
  1. global
  2.    chroot dir #工作目录chroot
  3. #全局日志配置,使用127.0.0.1的rsyslog服务中local3日志设备,等级info
  4. log 127.0.0.1 local3 info
  5. #每个进程最大并发数
  6. maxconn 4096
  7.  #后台进程数量
  8. nbproc 1
  9.  #用户
  10. user nobody
  11. group nobody
  12. #后台程序模式工作
  13. daemon
  14.    #HAProxy pid文件存储目录
  15. pidfile /var/run/haproxy-private.pid
  16.    #tune.bufsize 16384 设置buffer(B)
 
     
  1. defaults
  2. #模式(tcp http health)
  3. mode http
  4. #连接后端服务器重试次数,超出后标为不可用
  5.    retries 3
  6. timeout connect 10S #连接服务器最长等待时间(ms)
  7. timeout client 20s #连接客户端发送数据最长等待时间。
  8. timeout server 30s #服务器回复客户端最长等待时间。
  9. timeout check 5s #对后端服务器的检测超时时间。    
 
      
  1. frontend www #定义名为www的前端虚拟节点
  2.    # bind [<address>:<port_range>] interface <interface> 监听套字节定义
  3.    bind *:80
  4.    mode http
  5. option httplog #启用日志记录HTTP请求。
  6.    option forwardfor #启用后后端服务器可以获得客户端IP
  7. option httpclose #客户端和服务器完成一次连接请求后,HAProxy主动关闭TCP链接(优化选项)
  8.    log global #使用全局日志配置
  9. default_backend htmpool #指定后端服务池(backend定义htmpool)

 
       
  1. backend htmpool #定义名为htmpool的真实服务器组
  2. mode http
  3. option redispatch #用于cookie保持环境。(如后端服务器故障,客户端cookie不会刷新,用此来把用户请求强制定向到正常服务器)
  4. option abortonclose #负载均衡很高时,自动结束当前队列处理时间长的连接
  5.    balance roundrobin #负载均衡算法。
  6.    cookie SERVERID #允许向cookie插入SERVERID.下面server可以使用cookie定义
  7.    #option httpchk <method> <url> <vesion>
  8.     #mothod: OPTION、GET、HEAD (其中HEAD仅检测是否返回状态码200 更快,更简单)
  9.    option httpchk GET /index.php #启用HTTP服务状态检测功能
  10.    #server <name> <address>[:port] [param*]
  11.     #[param*]为后端设定参数
  12. #cookie server1 指定后端服务器设置cookie值,目的实现持久连接,指定的cookie值在请求时会被检查,第一次此cookie值将挑选后端服务器将一直被沿用。
  13.     #weight num权重
  14.     #check启用后端执行健康检测
  15. #inter num 健康状态检测时间间隔
  16.     #rise num 从故障状态转换至正常需成功检测次数
  17.     #fall num 从正常转换故障需失败次数
  18.     #backup 设置后端真实服务器备份服务器,仅在所有真实服务器不可用启用
  19.    server web1 192.168.1.186:80 cookie server1 weight 6 check inter 2000 rise 2 fall 3
  20.    server web2 192.168.1.188:80 cookie server2 weight 6 check inter 2000 rise 2 fall 3
 
        
  1. listen admin_stats #定义HAProxy监控页面
  2. bind 0.0.0.0:9188
  3. mode http
  4. log 127.0.0.1 local3 err
  5. stats refresh 30s #HAProxy监控页面统计自动刷新时间。
  6. stats uri /haproxy-status #设置监控页面URL路径。 http//IP:9188/haproxy-status可查看
  7. stats realm welcome login\ Haproxy #统计页面密码框提示信息
  8. stats auth admin:123456 #登录统计页面用户和密码
  9. stats hide-version #隐藏HAProxy版本信息
  10. stats admin if TRUE #设置TURE后可在监控页面手工启动关闭后端真实服务器   
    ACL权限
 
 
  1. #3.4层匹配
    dst,src 目的IP和源IP
    (写入frontend中)
  2. #禁止192.168.0.0/24网段用户访问
  3. acl
    bad src
    192.168.0.0/24
  4. block
    if bad
  5. #七层匹配
    req.hdr([<>name[,<occ>])
  6. #用户访问www.server2.com时(报头正则匹配),代理转发给server2
    -i是不区分大小写
  7. acl
    www hdr_reg
    (host)
    -i
    ^(www.server2.com)$
  8. use_backend
    server2
    if www
  9. #acl其他设置
  10. acl url_static path_end .git .png .css .js (URL请求结尾)
  11. acl host_www hdr_beg(host) -i www
  12. acl host_static hdr_beg(host) -i img. video. download. ftp. (域名开头)
    日志配置 
 
  
  1. vim
    /etc/rsyslog.d/haproxy.conf
  2. $ModLoad
    imudp
  3. $UDPServerRun
    514
  4. local3.*
    /var/log/haproxy
  5. systemctl
    restart rsyslog
   

可以考虑结合keeplive+haproxy实例高可用均衡负载架构,解决haproxy单点故障问题