HAProxy简介及配置文件详解

一 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安装
 
     
  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. blockif 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. $UDPServerRun514
  4. local3.*/var/log/haproxy
  5. systemctl restart rsyslog
   

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

发布了24 篇原创文章 · 获赞 47 · 访问量 26万+

猜你喜欢

转载自blog.csdn.net/nicajonh/article/details/78754591
今日推荐