设为首页 收藏本站
查看: 1075|回复: 0

[经验分享] haproxy 简介与常用配置

[复制链接]

尚未签到

发表于 2019-1-2 07:13:50 | 显示全部楼层 |阅读模式
  haproxy
  

  1. 简介
  haproxy是一个代理服务器,提供高可用性和负载均衡,以及对基于TCP和HTTP的应用的代理。非常适合高负载的和需要在七层进行处理的场景。它实现了一种单进程、事件驱动的模型。可以支持数万的并发连接。之所以说它在性能上表现优越主要是因为它采用了当下比较先进的技术,例如:epoll、splice、Single-buffering 、MRU、弹性二叉树等。
  

  2. Harpoxy所支持的代理模型:
  ● TCP
  ● HTTP
  ● Health
  
  
  3. 所支持的负载均衡算法:
  roundrobin:
  即动态轮询,所谓轮询,即所定义的服务器根据权重轮流进行派发请求;所谓动态,即服务器的权重可以在运行的时候进行调整,无需重启服务,以支持服务器的慢启动功能。
  

  static-rr:
  静态轮询,不支持在运行中调整权重。
  

  leastconn:
  动态算法,表示哪个后端服务器接收的连接少就使用哪个服务器。这种算法非常适合长会话的服务,比LDAP、SQL等。而HTTP协议使用的是短会话,因此不适合使用此算法。
  

  source:
  默认为静态方法,可以通过修改hash-type的值将其改为动态方法。表示同一个客户端的请求发往同一个后端服务器,这种算法通常用于无cookie功能的TCP的代理模型中。它的哈希表是以客户端IP地址为键的。
  

  hash-type即哈希类型分两种:
  map-based :是静态哈希,也就是说当服务器组中的服务器数量发生改变的时候,所有之前哈希表中,客户端与服务器的一一对应的映射关系都会失效。
  consistent: 是动态哈希,也就是说当服务器组中的服务器数量发生变化的时候,之前所建立的哈希表中,客户端与服务器的一一对应的映射关系失效的只是一部分。
  

  uri:
  默认为静态方法,可以通过修改hash-type的值将其改为动态方法。哈希表以URI为键,比如,/serv/login.php?lang=en&profile=2,哈希的键即为/serv/login.php(问号左边的部分)。如果带上参数“whole”,则哈希的键即为整个URI。适合用于后端为代理缓存服务器的场景。此算法还有两个选项参数:len和depth。len表示从"/"开始的几个字符作为哈希键。depth表示从"/"开始往后几个最多几级目录的深度作为哈希的键。
  

  
  url_param:
  默认为静态方法,可以通过修改hash-type的值将其改为动态方法。所哈希的键为URI中问号右边的部分。它通过为URL指定的参数在每个HTTP GET请求中将会被检索;如果找到了指定的参数且其通过等于号“=”被赋予了一个值,那么此值将被执行hash运算并被服务器的总权重相除后派发至某匹配的服务器;此算法可以通过追踪请求中的用户标识进而确保同一个用户ID的请求将被送往同一个特定的服务器,除非服务器的总权重发生了变化;如果某请求中没有出现指定的参数或其没有有效值,则使用轮叫算法对相应请求进行调度。
  

  
  hdr():
  默认为静态方法,可以通过修改hash-type的值将其改为动态方法。对于每个HTTP请求,通过指定的HTTP首部将会被检索;如果相应的首部没有出现或其没有有效值,则使用轮叫算法对相应请求进行调度;其有一个可选选项“use_domain_only”,可在指定检索类似Host类的首部时仅计算域名部分。比如"haproxy.1wt.eu",仅计算1wt。
  

  rdp-cookie:
  rdp-cookie(name):
  
  
  
  

  4. 环境介绍:
  OS:CentOS6.5
  前端haproxy服务器:
  eth0:172.16.0.11
  eth1: 192.168.0.11
  后端web服务器:
  eth0: 192.168.0.12
  eth0: 192.168.0.13
  软件包:
  为CentOS自带的rpm包:
  haproxy-1.4.24-2.el6.x86_64
  

  5. 配置文件介绍
  主配置文件:
  /etc/haproxy/haproxy.cfg
  配置文件组成:
  全局段global常用参数:
      log    127.0.0.1     local2
  #记录日志,不过要在要在/etc/rsyslog.conf中打开对UDP的支持。然后在定义local2的日志存放路径。
  chroot     /var/lib/haproxy
  #虚拟根目录,为了增强安全性
  pidfile    /var/run/haproxy.pid
  maxconn    4000
  user    haproxy
  group    haproxy
  daemon #以后台守护进程的方式启动haproxy
  stats socket /var/lib/haproxy/stats
  #开启这些功能,可以在命令行下,来查询前端和后端服务器的状态信息。例如:echo "show info" | socat unix-connect:/var/lib/haproxy/stats stdio 还可以使用show stats、show sess、show errors等
  代理段:
  1、 defaults:
  常用参数:
  mode                    http
  #表示代理模式为http
  log                     global
  #表示会记录每个事件和流量
  option                  httplog
  #表示记录的是http的请求,会话和时钟。若代理模式是tcp的则为option tcplog。
  option                  dontlognull
  #表示不记录空连接
  option http-server-close
  #表示支持面向客户端的keep-alive,而对于面向后端服务器的keep-alive的支持,在1.5的发行版中或许会出现。虽然客户端到haproxy服务器的请求在keep-alive超时之前使用的都是同一个连接,但是负载均衡到后端的每个请求还是要进行检查并记录日志的。否则只会记录第一个请求信息。
  option forwardfor       except 127.0.0.0/8
  #表示在发往后端服务器的请求上添加一个名为"X-Forwarded-For" 的头部信息,用于记录客户端IP。except表示由本机发往后端服务器的请求中不用添加此首部。
  option                  redispatch
  #表示当连接后端失败的时候,重新分配请求道其他的服务器。
  retries                 3
  #表示连接失败后,需要重新连接其他后端服务器几次。
  timeout http-request    10s
  #表示一个完整的http请求的超时时间,也就是说当请求的头部的第一个字节被接收后到头部信息全部接收完所经过的时长。这个时间仅用于请求的首部,也就是说只要首部信息接收后,这个时间就没用了。不会管请求之后的数据(即body部分)是否被接收。
  timeout queue           1m
  #表示当连接的数量超过maxconn的设置数值后,就会对多出的请求进行排队等候,如果等待的时间超过此参数设置的值,那么就认为请求无法得到响应了。
  timeout connect         10s
  #表示haproxy服务器与后端服务器建立连接的超时时间。
  timeout client          1m
  #表示定义客户端发出请求到接收到haproxy服务器响应之间的最大时长。它的值一般与timeout server的值相同。
  timeout server          1m
  #表示定义haproxy服务器从发送请求的头部开始到后端服务器响应到达期间的最大时长。
  timeout http-keep-alive 10s
  #用来定义当一个响应发出之后,要等待下一个新请求的到来的时长。
  timeout check           10s
  #用来定义对后端进行做健康监测的超时时间。
  maxconn                 3000
  #最大可以接收的连接数。
  
  2、listen
  3、frontend
  4、backend
  

  6. 功能配置
  1、负载均衡
  frontend webs
  bind *:80
  default_backend webserver
  backend webserver
  balance roundrobin
  server web1 192.168.0.12 check weight 1 maxconn 2000
  server web2 192.168.0.13 check weight 1 maxconn 2000
  
  2、动静分离
  frontend  webs
  bind *:80
  acl     static   path_beg       -i /static /images /javascript
  acl     static  path_end        -i .html .jpg .png .gif .ico .css .js
  use_backend     web1    if static
  default_backend   web2
  backend web1
  cookie SERVERID insert indirect #用来确定哪个后端服务器进行了响应。
  server      web1 192.168.0.12:80 cookie A check weight 1 maxconn 5000
  backend web2
  cookie SERVERID insert indirect
  server      web2 192.168.0.13:80 cookie B check weight 1 maxconn 2000
  3、状态输出
  listen stats
  mode    http
  bind    *:1080
  stats    enable
  stats    hide-version
  stats    uri/stats
  stats    realmHaproxy\ Statistics
  stats    authadmin:admin
  stats    adminif TRUE
  4、会话保持
  ● 基于IP的会话持久
  balance source
  ● 基于cookie的会话持久
  cookie SERVERID insert indirect nocache
  server      web1 192.168.0.12:80 cookie A
  ● 基于session的会话持久
  apsession session_name len 64 timeout 5h request-learn
  
  
  
  
  

  
  
  
  





运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-658430-1-1.html 上篇帖子: 企业之haproxy 下篇帖子: haproxy的基本使用方法
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表