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

[经验分享] HAProxy用法详解 全网最详细中文文档

[复制链接]

尚未签到

发表于 2019-1-2 09:56:14 | 显示全部楼层 |阅读模式
一、HAProxy简介
  (1)HAProxy 是一款提供高可用性、负载均衡以及基于TCP(第四层)和HTTP(第七层)应用的代理软件,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。 HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。HAProxy运行在时下的硬件上,完全可以支持数以万计的 并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中, 同时可以保护你的web服务器不被暴露到网络上。
  (2)HAProxy 实现了一种事件驱动、单一进程模型,此模型支持非常大的并发连接数。多进程或多线程模型受内存限制 、系统调度器限制以及无处不在的锁限制,很少能处理数千并发连接。事件驱动模型因为在有更好的资源和时间管理的用户端(User-Space) 实现所有这些任务,所以没有这些问题。此模型的弊端是,在多核系统上,这些程序通常扩展性较差。这就是为什么他们必须进行优化以 使每个CPU时间片(Cycle)做更多的工作。
  (3)HAProxy 支持连接拒绝 : 因为维护一个连接的打开的开销是很低的,有时我们很需要限制***蠕虫(attack bots),也就是说限制它们的连接打开从而限制它们的危害。 这个已经为一个陷于小型DDoS***的网站开发了而且已经拯救
  了很多站点,这个优点也是其它负载均衡器没有的。
  (4)HAProxy 支持全透明代理(已具备硬件防火墙的典型特点): 可以用客户端IP地址或者任何其他地址来连接后端服务器. 这个特性仅在Linux 2.4/2.6内核打了cttproxy补丁后才可以使用. 这个特性也使得为某特殊服务器处理部分流量同时又不修改服务器的地址成为可能。
  性能
  HAProxy借助于OS上几种常见的技术来实现性能的最大化。
  1,单进程、事件驱动模型显著降低了上下文切换的开销及内存占用。
  2,O(1)事件检查器(event checker)允许其在高并发连接中对任何连接的任何事件实现即时探测。
  3,在任何可用的情况下,单缓冲(single buffering)机制能以不复制任何数据的方式完成读写操作,这会节约大量的CPU时钟周期及内存带宽;
  4,借助于Linux 2.6 (>= 2.6.27.19)上的splice()系统调用,HAProxy可以实现零复制转发(Zero-copy forwarding),在linux 3.5及以上的OS中还可以实现零复制启动(zero-starting);
  5,内存分配器在固定大小的内存池中可实现即时内存分配,这能够显著减少创建一个会话的时长;
  6,树型存储:侧重于使用作者多年前开发的弹性二叉树,实现了以O(log(N))的低开销来保持计时器命令、保持运行队列命令及管理轮询及最少连接队列;
  7,优化的HTTP首部分析:优化的首部分析功能避免了在HTTP首部分析过程中重读任何内存区域;
  8,精心地降低了昂贵的系统调用,大部分工作都在用户空间完成,如时间读取、缓冲聚合及文件描述符的启用和禁用等;
  所有的这些细微之处的优化实现了在中等规模负载之上依然有着相当低的CPU负载,甚至于在非常高的负载场景中,5%的用户空间占用率和95%的系统空间占用率也是非常普遍的现象,这意味着HAProxy进程消耗比系统空间消耗低20倍以上。因此,对OS进行性能调优是非常重要的。即使用户空间的占用率提高一倍,其CPU占用率也仅为10%,这也解释了为何7层处理对性能影响有限这一现象。由此,在高端系统上HAProxy的7层性能可轻易超过硬件负载均衡设备。
  在生产环境中,在7层处理上使用HAProxy作为昂贵的高端硬件负载均衡设备故障故障时的紧急解决方案也时长可见。硬件负载均衡设备在“报文”级别处理请求,这在支持跨报文请求(request across multiple packets)有着较高的难度,并且它们不缓冲任何数据,因此有着较长的响应时间。对应地,软件负载均衡设备使用TCP缓冲,可建立极长的请求,且有着较大的响应时间。
  HAProxy目前主要有三个版本: 1.3 , 1.4 ,1.5,CentOS6.6 自带的RPM包为 1.5 的。
二,安装配置HAProxy
  以下实验环境均为CentOS6.6 i686平台。
1,安装haproxy
  1
  2
  3
  4
  5
  6
  7
  8
  9
  10
  11
  12
  13
  14
  15
  16
  17
  18
  19
  20
  21
  22
  [root@LB~]# yum install -y haproxy #直接使用RPM来安装
  [root@LB~]# rpm -qi haproxy #版本为1.5.4
  Name: haproxyRelocations:(notrelocatable)
  Version :1.5.4 Vendor:CentOS
  Release: 2.el6Build Date:Thu 23Jul 201504:26:35PM PDT
  Install Date:Sat 29Aug 201506:49:30PM PDT BuildHost:c6b9.bsys.dev.centos.org
  Group: SystemEnvironment/DaemonsSource RPM:haproxy-1.5.4-2.el6.src.rpm
  Size :2542578 License:GPLv2+
  Signature: RSA/SHA1,Fri 24Jul 201501:39:18PM PDT,Key ID0946fca2c105b9de
  Packager :CentOS BuildSystem
  URL: http://www.haproxy.org/
  Summary :HAProxy isa TCP/HTTPreverse proxy for highavailability environments
  [root@LB~]# rpm -ql haproxy
  /etc/haproxy
  /etc/haproxy/haproxy.cfg---------->配置文件
  /etc/logrotate.d/haproxy
  /etc/rc.d/init.d/haproxy
  /etc/sysconfig/haproxy
  /usr/bin/halog
  /usr/bin/iprange
  /usr/sbin/haproxy
  [root@LB~]# cd /etc/haproxy/
2,详解配置文件
  haproxy 的配置文件由两部分组成:全局设定和对代理的设定,共分为五段:global,defaults,frontend,backend,listen。
2.1 配置文件格式
  HAProxy的配置处理3类来主要参数来源:
  ——最优先处理的命令行参数;
  ——“global”配置段,用于设定全局配置参数;
  ——proxy相关配置段,如“defaults”、“listen”、“frontend”和“backend”;
  2.2 时间格式
  一些包含了值的参数表示时间,如超时时长。这些值一般以毫秒为单位,但也可以使用其它的时间单位后缀。
  1
  2
  3
  4
  5
  6
  us:微秒(microseconds),即1/1000000秒;
  ms:毫秒(milliseconds),即1/1000秒;
  s:秒(seconds);
  m:分钟(minutes);
  h:小时(hours);
  d:天(days);
2.3 全局配置
  * 进程管理及安全相关的参数
  – chroot :修改haproxy的工作目录至指定的目录并在放弃权限之前执行chroot()操作,可以提升haproxy的安全级别,不过需要注意的是要确保指定的目录为空目录且任何用户均不能有写权限;
  – daemon:让haproxy以守护进程的方式工作于后台,其等同于“-D”选项的功能,当然,也可以在命令行中以“-db”选项将其禁用;
  – gid :以指定的GID运行haproxy,建议使用专用于运行haproxy的GID,以免因权限问题带来风险;
  – group :同gid,不过指定的组名;
  – log   [max level [min level]]:定义全局的syslog服务器,最多可以定义两个;
  – log-send-hostname []:在syslog信息的首部添加当前主机名,可以为“string”指定的名称,也可以缺省使用当前主机名;
  – nbproc :指定启动的haproxy进程的个数,只能用于守护进程模式的haproxy;默认只启动一个进程,鉴于调试困难等多方面的原因,一般只在单进程仅能打开少数文件描述符的场景中才使用多进程模式;
  – pidfile:
  – uid:以指定的UID身份运行haproxy进程;
  – ulimit-n:设定每进程所能够打开的最大文件描述符数目,默认情况下其会自动进行计算,因此不推荐修改此选项;Linux默认单进程打开文件数为1024个
  – user:同uid,但使用的是用户名;
  – stats:用户访问统计数据的接口
  – node:定义当前节点的名称,用于HA场景中多haproxy进程共享同一个IP地址时;
  – description:当前实例的描述信息;
  * 性能调整相关的参数
  – maxconn :设定每个haproxy进程所接受的最大并发连接数,其等同于命令行选项“-n”;“ulimit -n”自动计算的结果正是参照此参数设定的;
  – maxpipes :haproxy使用pipe完成基于内核的tcp报文重组,此选项则用于设定每进程所允许使用的最大pipe个数;每个pipe会打开两个文件描述符,因此,“ulimit -n”自动计算时会根据需要调大此值;默认为maxconn/4,其通常会显得过大;
  – noepoll:在Linux系统上禁用epoll机制;
  – nokqueue:在BSE系统上禁用kqueue机制;
  – nopoll:禁用poll机制;
  – nosepoll:在Linux禁用启发式epoll机制;
  – nosplice:禁止在Linux套接字上使用内核tcp重组,这会导致更多的recv/send系统调用;不过,在Linux 2.6.25-28系列的内核上,tcp重组功能有bug存在;
  – spread-checks :在haproxy后端有着众多服务器的场景中,在精确的时间间隔后统一对众服务器进行健康状况检查可能会带来意外问题;此选项用于将其检查的时间间隔长度上增加或减小一定的随机时长;
  – tune.bufsize :设定buffer的大小,同样的内存条件小,较小的值可以让haproxy有能力接受更多的并发连接,较大的值可以让某些应用程序使用较大的cookie信息;默认为16384,其可以在编译时修改,不过强烈建议使用默认值;
  – tune.chksize :设定检查缓冲区的大小,单位为字节;更大的值有助于在较大的页面中完成基于字符串或模式的文本查找,但也会占用更多的系统资源;不建议修改;
  – tune.maxaccept :设定haproxy进程内核调度运行时一次性可以接受的连接的个数,较大的值可以带来较大的吞吐率,默认在单进程模式下为100,多进程模式下为8,设定为-1可以禁止此限制;一般不建议修改;
  – tune.maxpollevents :设定一次系统调用可以处理的事件最大数,默认值取决于OS;其值小于200时可节约带宽,但会略微增大网络延迟,而大于200时会降低延迟,但会稍稍增加网络带宽的占用量;
  – tune.maxrewrite :设定为首部重写或追加而预留的缓冲空间,建议使用1024左右的大小;在需要使用更大的空间时,haproxy会自动增加其值;
  – tune.rcvbuf.client :
  – tune.rcvbuf.server :设定内核套接字中服务端或客户端接收缓冲的大小,单位为字节;强烈推荐使用默认值;
  – tune.sndbuf.client:
  – tune.sndbuf.server:
  * Debug相关的参数
  1
  2
  3
  -debug
  -quiet
  * 超时时长
  1
  2
  3
  4
  5
  6
  7
  8
  9
  10
  11
  timeouthttp request:在客户端建立连接但不请求数据时,关闭客户端连接
  timeout queue:等待最大时长
  timeoutconnect: 定义haproxy将客户端请求转发至后端服务器所等待的超时时长
  timeout client:客户端非活动状态的超时时长
  timeoutserver:客户端与服务器端建立连接后,等待服务器端的超时时长,
  timeout http-keep-alive:定义保持连接的超时时长
  timeoutcheck:健康状态监测时的超时时间,过短会误判,过长资源消耗
  maxconn :每个server最大的连接数
  http-server-close: 在使用长连接时,为了避免客户端超时没有关闭长连接,此功能可以使服务器端关闭长连接
  redispatch:在使用基于cookie定向时,一旦后端某一server宕机时,会将会话重新定向至某一上游服务器,必须使用的选项
  * 实现访问控制:
  1
  2
  http-request:7层过滤
  tcp-requestcontent:tcp层过滤,四层过滤
2.4 代理
  代理相关的配置可以如下配置段中。
  1
  2
  3
  4
  –defaults
  – frontend
  –backend
  – listen
  “defaults”段用于为所有其它配置段提供默认参数,这配置默认配置参数可由下一个“defaults”所重新设定。
  “frontend”段用于定义一系列监听的套接字,这些套接字可接受客户端请求并与之建立连接。
  “backend”段用于定义一系列“后端”服务器,代理将会将对应客户端的请求转发至这些服务器。
  “listen”段通过关联“frontend”和“backend”定义了一个完整的代理,通常只对TCP流量有用。
  所有代理的名称只能使用大写字母、小写字母、数字、-(中线)、_(下划线)、.(点号)和:(冒号)。此外,ACL名称会区分字母大小写。
三、配置文件中的关键字参考
3.1 balance
  1
  2
  3
  balance[ ]
  balanceurl_param[check_post[]]
  定义负载均衡算法,可用于“defaults”、“listen”和“backend”。用于在负载均衡场景中挑选一个server,其仅应用于持久信息不可用的条件下或需要将一个连接重新派发至另一个服务器时。支持的算法有:
  3.11 roundrobin:基于权重进行轮叫,在服务器的处理时间保持均匀分布时,这是最平衡、最公平的算法。此算法是动态的,这表示其权重可以在运行时进行调整,不过,在设计上,每个后端服务器仅能最多接受4128个连接;并支持慢启动。
  3.12 static-rr:基于权重进行轮叫,与roundrobin类似,但是为静态方法,在运行时调整其服务器权重不会生效;不过,其在后端服务器连接数上没有限制;不支持慢启动,在高负荷的情况下,服务器重新上线时会立即被分配大量连接。
  3.13 leastconn(WLC):适用于长连接的会话,新的连接请求被派发至具有最少连接数目的后端服务器;在有着较长时间会话的场景中推荐使用此算法,如LDAP、SQL等,其并不太适用于较短会话的应用层协议,如HTTP;此算法是动态的,
  可以在运行时调整其权重;
  3.14 source:将请求的源地址进行hash运算,并由后端服务器的权重总数相除后派发至某匹配的服务器;这可以使得同一个客户端IP的请求始终被派发至某特定的服务器;不过,当服务器权重总数发生变化时,如某服务器宕机或添加了新的服务器,许多客户端的请求可能会被派发至与此前请求不同的服务器;常用于负载均衡无cookie功能的基于TCP的协议;其默认为静态,不过也可以使用hash-type修改此特性;
  1,对原地址hash,第一次调度时使用WLC
  source:IP层,位于同一个NAT服务器背后的多个请求都会定向至同一个upstream server,不利于负载均衡,一般只有不支持使用cookie插入又需要保持会话时使用
  cookie:应用层,有更好的负载均衡效果;
  2,hash/weight%ip :除以权重取模
  3.15 uri:对URI的左半部分(“问题”标记之前的部分)或整个URI进行hash运算,并由服务器的总权重相除后派发至某匹配的服务器;这可以使得对同一个URI的请求总是被派发至某特定的服务器,除非服务器的权重总数发生了变化;此算法常用于代理缓存或反病毒代理以提高缓存的命中率;需要注意的是,此算法仅应用于HTTP后端服务器场景;其默认为静态算法,不过也可以使用hash-type修改此特性;
  3.16 url_param:通过为URL指定的参数在每个HTTP GET请求中将会被检索;如果找到了指定的参数且其通过等于号“=”被赋予了一个值,那么此值将被执行hash运算并被服务器的总权重相除后派发至某匹配的服务器;此算法可以通过追踪请求中的用户标识进而确保同一个用户ID的请求将被送往同一个特定的服务器,除非服务器的总权重发生了变化;如果某请求中没有出现指定的参数或其没有有效值,则使用轮叫算法对相应请求进行调度;此算法默认为静态的,不过其也可以使用hash-type修改此特性;
  3.17 hdr():对于每个HTTP请求,通过指定的HTTP首部将会被检索;如果相应的首部没有出现或其没有有效值,则使用轮叫算法对相应请求进行调度;其有一个可选选项“use_domain_only”,可在指定检索类似Host类的首部时仅计算域名部分(比如通过www.feiyu.com来说,仅计算feiyu字符串的hash值)以降低hash算法的运算量;此算法默认为静态的,不过其也可以使用hash-type修改此特性;
  3.18 rdp-cookie(name)
  ,表示根据据cookie(name)来锁定并哈希每一次TCP请求。
3.2 bind
  1
  2
  3
  bind[]:[,…]
  bind[]:[,…] interface
  此指令仅能用于frontend和listen区段,用于定义一个或几个监听的套接字。
  :可选选项,其可以为主机名、IPv4地址、IPv6地址或*;省略此选项、将其指定为*或0.0.0.0时,将监听当前系统的所有IPv4地址;:可以是一个特定的TCP端口,也可是一个端口范围(如5005-5010),代理服务器将通过指定的端口来接收客户端请求;需要注意的是,每组监听的套接字在同一个实例上只能使用一次,而且小于1024的端口需要有特定权限的用户才能使用,这可能需要通过uid参数来定义;:指定物理接口的名称,仅能在Linux系统上使用;其不能使用接口别名,而仅能使用物理接口名称,而且只有管理有权限指定绑定的物理接口;
3.3 mode
  1
  mode{ tcp|http|health}
  设定实例的运行模式或协议。当实现内容交换时,前端和后端必须工作于同一种模式(一般说来都是HTTP模式),否则将无法启动实例。
  tcp:实例运行于纯TCP模式,在客户端和服务器端之间将建立一个全双工的连接,且不会对7层报文做任何类型的检查;通常用于SSL、SSH、SMTP等应用;
  http:实例运行于HTTP模式,客户端请求在转发至后端服务器之前将被深度分析,所有不与RFC格式兼容的请求都会被拒绝;此为默认模式;
  health:实例工作于health模式,其对入站请求仅响应“OK”信息并关闭连接,且不会记录任何日志信息;此模式将用于响应外部组件的健康状态检查请求;目前来讲,此模式已经废弃,因为tcp或http模式中的monitor关键字可完成类似功能;
3.4 hash-type
  1
  hash-type
  定义用于将hash码映射至后端服务器的方法;其不能用于frontend区段;可用方法有map-based和consistent,在大多数场景下推荐使用默认的map-based方法。
  map-based:hash表是一个包含了所有在线服务器的静态数组。其hash值将会非常平滑,会将权重考虑在列,但其为静态方法,对在线服务器的权重进行调整将不会生效,这意味着其不支持慢速启动。此外,挑选服务器是根据其在数组中的
  位置进行的,因此,当一台服务器宕机或添加了一台新的服务器时,大多数连接将会被重新派发至一个与此前不同的服务器上,对于缓存服务器的工作场景来说,此方法不甚适用。
  consistent:“一致性哈希算法”,hash表是一个由各服务器填充而成的树状结构,将服务器散列在hash环上;基于hash键在hash树中查找相应的服务器时,最近的服务器将被选中。此方法是动态的,支持在运行时修改服务器权重,因此兼
  容慢速启动的特性。添加一个新的服务器时,仅会对一小部分请求产生影响,因此,尤其适用于后端服务器为cache的场景。不过,此算法不甚平滑,派发至各服务器的请求未必能达到理想的均衡效果,因此,可能需要不时的调整服务器的权
  重以获得更好的均衡性。
3.5 log
  1
  2
  3
  logglobal
  log[[]]
  为每个实例启用事件和流量日志,因此可用于所有区段。每个实例最多可以指定两个log参数,不过,如果使用了“log global”且”global”段已经定了两个log参数时,多余了log参数将被忽略。
  global:当前实例的日志系统参数同”global”段中的定义时,将使用此格式;每个实例仅能定义一次“log global”语句,且其没有任何额外参数;
  :定义日志发往的位置,其格式之一可以为,其中的port为UDP协议端口,默认为514;格式之二为Unix套接字文件路径,但需要留心chroot应用及用户的读写权限;
  :可以为syslog系统的标准facility之一;
  :定义日志级别,即输出信息过滤器,默认为所有信息;指定级别时,所有等于或高于此级别的日志信息将会被发送;
3.6 maxconn
  1
  maxconn
  设定一个前端的最大并发连接数,因此,其不能用于backend区段。对于大型站点来说,可以尽可能提高此值以便让haproxy管理连接队列,从而避免无法应答用户请求。当然,此最大值不能超出“global”段中的定义。此外,需要留心的是,haproxy会为每个连接维持两个缓冲,每个缓冲的大小为8KB,再加上其它的数据,每个连接将大约占用17KB的RAM空间。这意味着经过适当优化后,有着1GB的可用RAM空间时将能维护40000-50000并发连接。
  如果为指定了一个过大值,极端场景下,其最终占据的空间可能会超出当前主机的可用内存,这可能会带来意想不到的结果;因此,将其设定了一个可接受值方为明智决定。其默认为2000。
3.7 default_backend
  1
  default_backend
  在没有匹配的”use_backend”规则时为实例指定使用的默认后端,因此,其不可应用于backend区段。在”frontend”和”backend”之间进行内容交换时,通常使用”use-backend”定义其匹配规则;而没有被规则匹配到的请求将由此参数指定的后端接收。
  :指定使用的后端的名称;
  使用案例:
  1
  2
  3
  use_backenddynamic ifurl_dyn
  use_backend staticif url_cssurl_img extension_img
  default_backenddynamic
3.8 server
  1
  server[:port][param*]
  为后端声明一个server,因此,不能用于defaults和frontend区段。
  :为此服务器指定的内部名称,其将出现在日志及警告信息中;如果设定了”http-send-server-name”,它还将被添加至发往此服务器的请求首部中;
  :此服务器的的IPv4地址,也支持使用可解析的主机名,只不过在启动时需要解析主机名至相应的IPv4地址;
  [:port]:指定将连接请求所发往的此服务器时的目标端口,其为可选项;未设定时,将使用客户端请求时的同一相端口;
  [param*]:为此服务器设定的一系参数;其可用的参数非常多,具体请参考官方文档中的说明,下面仅说明几个常用的参数;
  服务器或默认服务器参数:
  backup:设定为备用服务器,仅在负载均衡场景中的其它server均不可用于启用此server;
  check:启动对此server执行健康状态检查,其可以借助于额外的其它参数完成更精细的设定,如:
  inter :设定健康状态检查的时间间隔,单位为毫秒,默认为2000;也可以使用fastinter和downinter来根据服务器端状态优化此时间延迟;
  rise :设定健康状态检查中,某离线的server从离线状态转换至正常状态需要成功检查的次数;
  fall :确认server从正常状态转换为不可用状态需要检查的次数;
  cookie :为指定server设定cookie值,此处指定的值将在请求入站时被检查,第一次为此值挑选的server将在后续的请求中被选中,其目的在于实现持久连接的功能;
  maxconn :指定此服务器接受的最大并发连接数;如果发往此服务器的连接数目高于此处指定的值,其将被放置于请求队列,以等待其它连接被释放;
  haproxy 有n个进程,每个支持m个连接,后端有x个服务器,每个最大支持y个连接,则 n*m 启动tcp监听端口
  local2.*/var/log/haproxy.log
  [root@node1haproxy]# service rsyslog restar
  [root@LBhaproxy]# vim haproxy.cfg
  log 127.0.0.1local2 --------->在global端中添加此行
一个最简单的http服务的配置
  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
  global
  log 127.0.0.1local2
  chroot/var/lib/haproxy
  pidfile /var/run/haproxy.pid
  maxconn4000
  user haproxy
  grouphaproxy
  daemon
  statssocket /var/lib/haproxy/stats
  defaults
  modehttp
  log global
  optionhttplog
  option dontlognull
  optionhttp-server-close
  option forwardfor except127.0.0.0/8
  optionredispatch
  retries 3
  timeouthttp-request10s
  timeout queue1m
  timeoutconnect 10s
  timeout client1m
  timeoutserver 1m
  timeout http-keep-alive10s
  timeoutcheck 10s
  maxconn 3000
  frontendwebser #webser为名称
  option forwardfor
  bind *:80
  default_backend app
  backendapp
  balance roundrobin#使拥roundrobin 算法
  serverapp1 192.168.1.111:80check
  server app2192.168.1.112:80check
haproxy统计页面的输出机制
  1
  2
  3
  4
  5
  6
  7
  8
  9
  10
  11
  12
  13
  14
  15
  16
  17
  18
  19
  20
  frontendwebser
  log 127.0.0.1local3
  optionforwardfor
  bind *:80
  default_backendapp
  backend app
  cookienode insert nocache
  balance roundrobin
  serverapp1 192.168.1.111:80check cookie node1intval 2rise 1fall 2
  server app2192.168.1.112:80check cookie node2intval 2rise 1fall 2
  serverbackup 127.0.0.1:8010check backup
  listen statistics
  bind *:8009# 自定义监听端口
  stats enable# 启用基于程序编译时默认设置的统计报告
  statsauth admin:admin# 统计页面用户名和密码设置
  stats uri/admin?stats# 自定义统计页面的URL,默认为/haproxy?stats
  statshide-version# 隐藏统计页面上HAProxy的版本信息
  stats refresh30s # 统计页面自动刷新时间
  statsadmin ifTRUE #如果认证通过就做管理功能,可以管理后端的服务器
  stats realm Hapadmin# 统计页面密码框上提示文本,默认为Haproxy\ Statistics
动静分离示例:
  1
  2
  3
  4
  5
  6
  7
  8
  9
  10
  11
  12
  13
  14
  15
  frontendwebservs
  bind *:80
  aclurl_static path_beg-i/static/images/javascript/stylesheets
  acl url_static path_end-i.jpg.gif.png.css.js.html
  aclurl_php path_end-i.php
  acl host_static hdr_beg(host)-iimg.imgs.video.videos.ftp.image.download.
  use_backendstatic ifurl_static orhost_static
  use_backend dynamic ifurl_php
  default_backenddynamic
  backend static
  balanceroundrobin
  server node1192.168.1.111:80check maxconn3000
  backenddynamic
  balance roundrobin
  servernode2 192.168.1.112:80check maxconn1000
http服务器配置完整示例
  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
  #---------------------------------------------------------------------
  # Global settings
  #---------------------------------------------------------------------
  global
  # to have these messages end up in /var/log/haproxy.log you will
  # need to:
  #
  # 1) configure syslog to accept network log events. This is done
  # by adding the '-r' option to the SYSLOGD_OPTIONS in
  # /etc/sysconfig/syslog
  #
  # 2) configure local2 events to go to the /var/log/haproxy.log
  # file. A line like the following can be added to
  # /etc/sysconfig/syslog
  #
  # local2.* /var/log/haproxy.log
  #
  log 127.0.0.1local2
  chroot/var/lib/haproxy
  pidfile /var/run/haproxy.pid
  maxconn4000
  user haproxy
  grouphaproxy
  daemon
  defaults
  mode http
  logglobal
  option httplog
  optiondontlognull
  option http-server-close
  optionforwardfor except127.0.0.0/8
  option redispatch
  retries3
  timeout http-request10s
  timeoutqueue 1m
  timeout connect10s
  timeoutclient 1m
  timeout server1m
  timeouthttp-keep-alive10s
  timeout check10s
  maxconn30000
  listen stats
  modehttp
  bind 0.0.0.0:1080
  statsenable
  stats hide-version
  statsuri /haproxyadmin?stats
  stats realm Haproxy\Statistics
  statsauth admin:admin
  stats admin ifTRUE
  frontendhttp-in
  bind *:80
  modehttp
  log global
  optionhttpclose
  option logasap#不等待响应结束就记录日志,表示提前记录日志,一般日志会记录响应时长,此不记录响应时长
  optiondontlognull #不记录空信息
  capture request headerHost len20 #记录请求首部的前20个字符
  capturerequest header Referer len60 #referer跳转引用,就是上一级
  default_backend servers
  frontendhealthcheck
  bind :1099#定义外部检测机制
  modehttp
  option httpclose
  optionforwardfor
  default_backend servers
  backendservers
  balance roundrobin
  serverwebsrv1 192.168.1.111:80check maxconn2000
  server websrv2192.168.1.112:80check maxconn2000
负载均衡MySQL服务的配置示例
  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
  #---------------------------------------------------------------------
  # Global settings
  #---------------------------------------------------------------------
  global
  # to have these messages end up in /var/log/haproxy.log you will
  # need to:
  #
  # 1) configure syslog to accept network log events. This is done
  # by adding the '-r' option to the SYSLOGD_OPTIONS in
  # /etc/sysconfig/syslog
  #
  # 2) configure local2 events to go to the /var/log/haproxy.log
  # file. A line like the following can be added to
  # /etc/sysconfig/syslog
  #
  # local2.* /var/log/haproxy.log
  #
  log 127.0.0.1local2
  chroot/var/lib/haproxy
  pidfile /var/run/haproxy.pid
  maxconn4000
  user haproxy
  grouphaproxy
  daemon
  defaults
  mode tcp
  logglobal
  option httplog
  optiondontlognull
  retries 3
  timeouthttp-request10s
  timeout queue1m
  timeoutconnect 10s
  timeout client1m
  timeoutserver 1m
  timeout http-keep-alive10s
  timeoutcheck 10s
  maxconn 600
  listenstats
  mode http
  bind0.0.0.0:1080
  stats enable
  statshide-version
  stats uri/haproxyadmin?stats
  statsrealm Haproxy\Statistics
  stats auth admin:admin
  statsadmin ifTRUE
  frontend mysql
  bind *:3306
  mode tcp
  logglobal
  default_backend mysqlservers
  backendmysqlservers
  balance leastconn
  serverdbsrv1 192.168.1.111:3306check port3306 intval2 rise1 fall2 maxconn300
  server dbsrv2192.168.1.112:3306check port3306 intval2 rise1 fall2 maxconn300


运维网声明 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-658560-1-1.html 上篇帖子: 对haproxy配置学习过程中几个点进行总结 下篇帖子: 负载均衡软件HAProxy案例二 带cookie前缀和高可用的HTTP负载均衡
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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