Haproxy 安装与配置

一 Haproxy简介

一、HAProxy简介


HAProxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。HAProxy运行在时下的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中, 同时可以保护你的web服务器不被暴露到网络上。

HAProxy实现了一种事件驱动、单一进程模型,此模型支持非常大的并发连接数。多进程或多线程模型受内存限制 、系统调度器限制以及无处不在的锁限制,很少能处理数千并发连接。事件驱动模型因为在有更好的资源和时间管理的用户端(User-Space) 实现所有这些任务,所以没有这些问题。此模型的弊端是,在多核系统上,这些程序通常扩展性较差。这就是为什么他们必须进行优化以 使每个CPU时间片(Cycle)做更多的工作。

————百度百科

Big O: 评判数据结构复杂度
    O(1): 
    O(logN): 红黑树
    O(n)
    O(n^2)
    O(2^n)


haproxy: 弹性二叉树
    数据结构:

Remote Desktop Protocol
    Windows: 3389


HAProxy是免费、极速且可靠的用于为TCP和基于HTTP应用程序提供高可用、负载均衡和代理服务的解决方案,尤其适用于高负载且需要持久连接或7层处理机制的web站点。

HAProxy目前主要有两个版本:

1.4——提供较好的弹性:衍生于1.2版本,并提供了额外的新特性,其中大多数是期待已久的。
  客户端侧的长连接(client-side keep-alive)
  TCP加速(TCP speedups)
  响应池(response buffering)
  RDP协议
  基于源的粘性(source-based stickiness)
  更好的统计数据接口(a much better stats interfaces)
  更详细的健康状态检测机制(more verbose health checks)
  基于流量的健康评估机制(traffic-based health)
  支持HTTP认证
  服务器管理命令行接口(server management from the CLI)
  基于ACL的持久性(ACL-based persistence)
  日志分析器

1.3——内容交换和超强负载:衍生于1.2版本,并提供了额外的新特性。
  内容交换(content switching):基于任何请求标准挑选服务器池;
  ACL:编写内容交换规则;
  负载均衡算法(load-balancing algorithms):更多的算法支持;
  内容探测(content inspection):阻止非授权协议;
  透明代理(transparent proxy):在Linux系统上允许使用客户端IP直接连入服务器;
  内核TCP拼接(kernel TCP splicing):无copy方式在客户端和服务端之间转发数据以实现数G级别的数据速率;
  分层设计(layered design):分别实现套接字、TCP、HTTP处理以提供更好的健壮性、更快的处理机制及便捷的演进能力;
  快速、公平调度器(fast and fair scheduler):为某些任务指定优先级可实现理好的QoS;
  会话速率限制(session rate limiting):适用于托管环境;


支持的平台及OS:
  x86、x86_64、Alpha、SPARC、MIPS及PARISC平台上的Linux 2.4;
  x86、x86_64、ARM (ixp425)及PPC64平台上的Linux2.6;
  UltraSPARC 2和3上的Sloaris 8/9;
  Opteron和UltraSPARC平台上的Solaris 10;
  x86平台上的FreeBSD 4.1-8;
  i386, amd64, macppc, alpha, sparc64和VAX平台上的OpenBSD 3.1-current;

若要获得最高性能,需要在Linux 2.6或打了epoll补丁的Linux 2.4上运行haproxy 1.2.5以上的版本。haproxy 1.1l默认使用的polling系统为select(),其处理的文件数达数千个时性能便会急剧下降。1.2和1.3版本默认的为poll(),在有些操作系统上可会也会有性能方面的问题,但在Solaris上表现相当不错。HAProxy 1.3在Linux 2.6及打了epoll补丁的Linux 2.4上默认使用epoll,在FreeBSD上使用kqueue,这两种机制在任何负载上都能提供恒定的性能表现。

在较新版本的Linux 2.6(>=2.6.27.19)上,HAProxy还能够使用splice()系统调用在接口间无复制地转发任何数据,这甚至可以达到10Gbps的性能。

基于以上事实,在x86或x86_64平台上,要获取最好性能的负载均衡器,建议按顺序考虑以下方案。
  Linux 2.6.32及之后版本上运行HAProxy 1.4;
  打了epoll补丁的Linux 2.4上运行HAProxy 1.4;
  FreeBSD上运行HAProxy 1.4;
  Solaris 10上运行HAProxy 1.4;


性能

HAProxy借助于OS上几种常见的技术来实现性能的最大化。
  单进程、事件驱动模型显著降低了上下文切换的开销及内存占用。
  O(1)事件检查器(event checker)允许其在高并发连接中对任何连接的任何事件实现即时探测。
  在任何可用的情况下,单缓冲(single buffering)机制能以不复制任何数据的方式完成读写操作,这会节约大量的CPU时钟周期及内存带宽;
  借助于Linux 2.6 (>= 2.6.27.19)上的splice()系统调用,HAProxy可以实现零复制转发(Zero-copy forwarding),在Linux 3.5及以上的OS中还可以实现零复制启动(zero-starting);
   内存分配器在固定大小的内存池中可实现即时内存分配,这能够显著减少创建一个会话的时长;
  树型存储:侧重于使用作者多年前开发的弹性二叉树,实现了以O(log(N))的低开销来保持计时器命令、保持运行队列命令及管理轮询及最少连接队列;
  优化的HTTP首部分析:优化的首部分析功能避免了在HTTP首部分析过程中重读任何内存区域;
  精心地降低了昂贵的系统调用,大部分工作都在用户空间完成,如时间读取、缓冲聚合及文件描述符的启用和禁用等;

所有的这些细微之处的优化实现了在中等规模负载之上依然有着相当低的CPU负载,甚至于在非常高的负载场景中,5%的用户空间占用率和95%的系统空间占用率也是非常普遍的现象,这意味着HAProxy进程消耗比系统空间消耗低20倍以上。因此,对OS进行性能调优是非常重要的。即使用户空间的占用率提高一倍,其CPU占用率也仅为10%,这也解释了为何7层处理对性能影响有限这一现象。由此,在高端系统上HAProxy的7层性能可轻易超过硬件负载均衡设备。

在生产环境中,在7层处理上使用HAProxy作为昂贵的高端硬件负载均衡设备故障故障时的紧急解决方案也时长可见。硬件负载均衡设备在“报文”级别处理请求,这在支持跨报文请求(request across multiple packets)有着较高的难度,并且它们不缓冲任何数据,因此有着较长的响应时间。对应地,软件负载均衡设备使用TCP缓冲,可建立极长的请求,且有着较大的响应时间。

可以从三个因素来评估负载均衡器的性能:
  会话率
  会话并发能力
  数据率

二. Haproxy 安装配置

haproxy 配置主要分为两大部分,4个虚拟节点
[global]:全局配置段,进程级别与进程管理及安全相关及性能调整相关的参数。
[proxy]
  - defaults:配置默认参数,这些参数可以被用到frontend,backend,Listen段
  - frontend:接受请求的前端虚拟节点,定义一些和客户端请求相关的参数,可以使用use_backend调用backend节点集群
  - backend:后端服务集群的配置,定义一些和后端真正提供服务的主机相关的一些参数
  - listen:frontend和backend的结合体,不能使用use_backend 调用backend节点集群

1. 下载并编译安装
  shell>wget -c http://www.haproxy.org/download/1.6/src/haproxy-1.6.9.tar.gz -P /usr/local/src/
  shell>cd /usr/local/src
  shell>tar xfv haproxy-1.6.9.tar.gz
  
  shell>mkdir /usr/local/haproxy
  shell>cd haproxy-1.6.9
  shell>vim README
  #执行make的时候参数介绍:TARGET,ARCH,PREFIX
   TARGET:内核版本控制

    - linux22 for Linux 2.2
    - linux24 for Linux 2.4 and above (default)
    - linux24e for Linux 2.4 with support for a working epoll (> 0.21)
    - linux26 for Linux 2.6 and above
    - linux2628 for Linux 2.6.28, 3.x, and above (enables splice and tproxy)
    

    ARCH:cpu架构

    i386,i486,i586,i686,x86_64

     shell>yum install gcc openssl-devel pcre-devel zlib-devel -y # 安装依赖包

   shell>make TARGET=linux26 ARCH=x86_x64 USE_PCRE=1 USE_OPENSSL=1 USE_ZLIB=1 PREFIX=/usr/local/haproxy   # 需要根据自己的操作系统环境自行修改
  shell>make install PREFIX=/usr/local/haproxy

2. 提供配置文件
  默认源码安装haproxy不提供配置文件,但在其解压目录examples下会提供相关haproxy的实例配置,但有的版本的源码haproxy实例配置不是很全面,最笨的
  办法是使用yum安装rpm包格式的haproxy,然后复制其配置文件件作为参考,然后再将其卸载。此处提供一个简单框架的haproxy配置模板实例,详细的配置请参考官网
  http://cbonte.github.io/haproxy-dconv/1.6/configuration.html

  shell>cp -ra /usr/local/src/haproxy-1.6.9/examples /usr/local/haproxy ## 复制解压目录下的examples目录到安装目录下,以后可能会用到
  shell>mkdir /usr/local/haproxy/conf
  
  haproxy配置文件及简单参数说明:
  
########################[全局配置]##########################
global
    # 日志输出配置,所有日志都记录在本机,通过local3输出
    log 127.0.0.1     local3 

    # 设定每个haproxy进程所接受的最大并发连接数,需要参考ulimit -n
    maxconn 4096
    
    # ulimit 文件描述符数量
    #ulimit-n 819200

    #chroot /usr/share/haproxy

    # 运行haproxy用户
    user haproxy
    
    # 运行haproxy用户组
    group haproxy

    # 以后台形式运行haproxy
    daemon

    # 设置进程数量
    nbproc 1

    # 设置haproxy进程的pid文件路径
    pidfile /usr/local/haproxy/var/haproxy.pid
    
    # haproxy 调试级别,建议只在开启单进程的时候调试
    #debug
    #quiet

####################[默认配置]################################
defaults
    # 日志使用全局配置
    log    global

    # haproxy工作模式{tcp|http|health},tcp4层,http7层,health只返回OK
    mode    http

    # 日志类别,采用httplog
    option    httplog
    
    # 不记录请求报文包体数据为空的请求到日志,比如健康检查,减少写磁盘IO
    option    dontlognull
    
    # 三次连接失败就认为服务器不可达,也可以通过后面设置
    retries    3
    
    # 允许在发往服务器的请求首部中插入“X-Forwarded-For”首部,用于后端主机记录真实请求的客户端ip
    option    forwardfor  except 127.0.0.0/8

    # 每次请求完毕后主动关闭http通道,haproxy不支持keep-alive,只能通过模拟实现
    option    httpclose
    
    # 当server id对应的服务器挂掉后,强制定向到其他健康的后端服务器,以后将不支持
    option    redispatch

    # 当服务器负载很高的时候,自动结束掉当前队列处理比较久的连接
    option    abortonclose

    # 默认的最大连接数
    maxconn    4096

    # 连接超时
    timeout connect    5000ms
    
    # 客户端请求超时
    timeout    client  30000ms
    
    # 服务端响应超时
    timeout server  30000ms

    # 心跳检测超时
    timeout check 2000
    
    # 持久连接超时时间
    timeout http-keep-alive  10s
    
    # http请求超时时间
    timeout http-request 10s

    # 默认队列超时时间
    timeout queue    1m

    # 设置默认负载均衡算法{roundrobin|source|leastconn...}
    balance    roundrobin

###########################[统计页面]############################
listen admin_stats
    # 设置统计页面监听的套接字,listen虚拟节点为frontend和backend的专有通道
    bind 0.0.0.0:10800
    
    # 设置统计页面工作模式
    mode http

    # 启用状态页面功能
    stats enable

    # 采用http日志格式
    option    httplog
    
    # 是否开启错误日志并记录
    #log 127.0.0.1 local err

    # 设置访问统计页面的最大连接数
    maxconn    10
    
    # 设置统计页面的自动刷新时间
    stats refresh    30s
    
    # 访问统计页面的url
    stats    uri   /stats

    # 登录统计页面时的提示信息
    stats    realm  DongPing Haproxy
    
    # 设置统计页面的用户认证,可以设置多个用户名
    stats auth admin:admin

    # 隐藏统计页面上Haproxy的版本信息
    stats    hide-version
    
    # 设置haproxy管理页面可以执行一些特权动作,比如下线后端主机
    stats    admin   if  TRUE

##########################[设置haproxy 错误页面]##########################

errorfile 403   /usr/local/haproxy/errorfiles/403.http
errorfile 500   /usr/local/haproxy/errorfiles/500.http
errorfile 502   /usr/local/haproxy/errorfiles/502.http
errorfile 503   /usr/local/haproxy/errorfiles/503.http
errorfile 504   /usr/local/haproxy/errorfiles/504.http
 
#########################[Frontend 前端配置]##############################
frontend http-proxy
    # 定义使用的套接字
    bind    *:80

    # 抓取请求报文首部字段为Host,Referer的值到haproxy日志中
    capture request header Host len 20
    capture request header Referer len 60
    capture request header User-agent len 60
    capture request header X-Forward-For len 60
    
    # 定义一个acl规则,匹配以/{static|images|javascript|stylesheets}开头的静态资源
    acl url_static    path_beg -i /static /images /javascript    /stylesheets

    # 定义一个acl规则,匹配以.{jpg|jpeg|gif|png|css|js}结尾的静态资源
    acl url_static    path_end -i .jpg .jpeg .gif .png .css .js

    # 如果被url_static这条acl规则匹配由后端集群static_servers进行分发 
    use_backend static_servers if url_static

    # 定义请求不匹配所有规则时默认转发到的后端主机
    default_backend    dynamic_servers

##########################[backend 后端配置]###########################################
# 定义一组动态资源主机
backend dynamic_servers
    # 定义haproxy工作模式
    mode    http
    
    # 定义负载均衡算法
    balance roundrobin

    # 健康检查
    option    httpchk    /check.jsp HTTP/1.0

    # 使用基于cookie粘性的负载均衡算法
    cookie    SERVERID insert indirect nocache

    # 定义连接后端主机的一些策略
    # server name ip:port  /表示后端一台主机,name必须给出
    # cookie name     /设置插入的cookie信息
    # check inter 2000   /使用check关键字表示对后端主机检测,inter 2000表示检测时间间隔为2s
    # weight /表示权重
    # rise  /表示检测两次正确,则认为服务器可用(服务从故障到正常)
    # fall /表示检测三次失败,则认为服务器不可用(服务器从正常到故障)
    # backup /表示备用主机

    server webapp_01 192.168.3.84:8080 cookie srv1 weight 2 check inter 2000 rise 2 fall 3
    server webapp_02 192.168.3.84:8081 cookie srv2 weight 2 check inter 2000 rise 2 fall 3

    # 定义一个sorryserver,当所有后端主机不可访问时,请求调度到此主机上
    server webapp_3 192.168.3.83:8080  backup check inter 2000 rise 2 fall 3 

# 定义一组静态资源主机
backend static_servers
    mode http
    option httpchk /check.html
    balance roundrobin
    server static_01 192.168.3.84:80 check inter 2000 fall 3
    server static_02 192.168.3.84:81 check inter 2000 fall 3

#######################[tcp配置]#########################################
listen  mysql
    bind 0.0.0.0:3306
    balance leastconn
    mode tcp
    log global
    option tcplog
    maxconn 4096
    #log 127.0.0.1 local0 debug
    server dbsrv_01 192.168.3.84:3306 weight 1 check port 3306 inter 2000 rise 1 fall 2 maxconn 300
    server dbsrv_02 192.168.3.84:3307 weight 1 check port 3307 inter 2000 rise 1 fall 2 maxconn 300
    

  说明:复制上面内容,并根据具体环境修改后保存到conf下,并命名为haproxy.cfg

  3.提供错误页面,如果不把错误页面放到配置文件定义的目录里,启动haproxy将报错

   shell>cd /usr/local/haproxy

   shell>cp -ra examples/errorfiles .

  4.提供运行haproxy进程的用户和组

   shell>userdd -r -s /sbin/nologin haproxy

  

三.提供haproxy日志,默认haproxy没有提供自己的日志文件,通过配置可以把haproxy日志通过rsyslog输出到指定文件

  1.需要在haproxy配置文件添加日志输出,只需添加以下命令即可 vim conf/haproxy.cfg

  

  2.修改rsyslog相关配置,使其能接受haproxy产生的日志

  # 查看下rsyslog主配置

  图一

  

  图二

  

  图三

  

  从图一可以看到通过两个变量就可以开启udp日志接受

  从图二可以看到name.none的意思为不记录来自name的日志到指定文件

  从图三可以看到主配置文件允许在rsyslog.d 创建配置文件

  所以可以在/etc/rsyslog.d/ 创建haproxy自己的配置,方便以后的修改和管理

  shell>vim /etc/rsyslog.d/haproxy.conf

  1).复制图一中(/etc/rsyslog.conf)的三行到 /etc/rsyslog.d/haproxy.conf,修改如下

  

  注意:日志输出的文件路径很重要,一定要让运行haproxy进程的用户对此文件有写权限,否则日志不会生效

  2).修改 SYSLOGD_OPTIONS 参数的值

  shell>vim /etc/sysconfig/rsyslog

  #SYSLOGD_OPTIONS="-c 5"  # 原来的配置注销

  # -c 2 使用兼容模式,默认是-c 5

  # -r 开启远程日志
  # -m 0 标记时间戳。单位是分钟,为0时,表示禁用该功能
  SYSLOGD_OPTIONS="-c 2 -r -m 0"  # 修改后的配置

  3).修改rsyslog的主配置文件使其不记录haproxy的日志到/var/log/messages,如果不修改会记录两份一样的haproxy日志

  shell>vim /etc/rsyslog.conf

  

  只需在箭头处追加haproxy配置文件中定义的日志来源为local3.none(具体为local几需要根据haproxy配置的相对应)

  4).重启日志服务,使其重读配置文件

  shell>/etc/init.d/rsyslog restart

四.启动haproxy

   

  1 #!/bin/bash
  2 #
  3 # haproxy
  4 #
  5 # chkconfig: 35 85 15
  6 # description: HAProxy is a free, very fast and reliable solution 
  7 # offering high availability, load balancing, and 
  8 # proxying for TCP and HTTP-based applications
  9 # processname: haproxy
 10 # config: /etc/haproxy.cfg
 11 # pidfile: /var/run/haproxy.pid
 12 
 13 # Source function library.
 14 . /etc/rc.d/init.d/functions
 15 
 16 # Source networking configuration.
 17 . /etc/sysconfig/network
 18 
 19 # Check that networking is up.
 20 [ "$NETWORKING" = "no" ] && exit 0
 21 
 22 config="/usr/local/haproxy/conf/haproxy.cfg"
 23 exec="/usr/local/haproxy/sbin/haproxy"
 24 prog=$(basename $exec)
 25 
 26 [ -e /etc/sysconfig/$prog ] && . /etc/sysconfig/$prog
 27 
 28 lockfile=/var/lock/subsys/haproxy
 29 
 30 check() {
 31     $exec -c -V -f $config
 32 }
 33 
 34 start() {
 35     $exec -c -q -f $config
 36     if [ $? -ne 0 ]; then
 37         echo "Errors in configuration file, check with $prog check."
 38         return 1
 39     fi
 40  
 41     echo -n $"Starting $prog: "
 42     # start it up here, usually something like "daemon $exec"
 43     daemon $exec -D -f $config -p /var/run/$prog.pid
 44     retval=$?
 45     echo
 46     [ $retval -eq 0 ] && touch $lockfile
 47     return $retval
 48 }
 49 
 50 stop() {
 51     echo -n $"Stopping $prog: "
 52     # stop it here, often "killproc $prog"
 53     killproc $prog 
 54     retval=$?
 55     echo
 56     [ $retval -eq 0 ] && rm -f $lockfile
 57     return $retval
 58 }
 59 
 60 restart() {
 61     $exec -c -q -f $config
 62     if [ $? -ne 0 ]; then
 63         echo "Errors in configuration file, check with $prog check."
 64         return 1
 65     fi
 66     stop
 67     start
 68 }
 69 
 70 reload() {
 71     $exec -c -q -f $config
 72     if [ $? -ne 0 ]; then
 73         echo "Errors in configuration file, check with $prog check."
 74         return 1
 75     fi
 76     echo -n $"Reloading $prog: "
 77     $exec -D -f $config -p /var/run/$prog.pid -sf $(cat /var/run/$prog.pid)
 78     retval=$?
 79     echo
 80     return $retval
 81 }
 82 
 83 force_reload() {
 84     restart
 85 }
 86 
 87 fdr_status() {
 88     status $prog
 89 }
 90 
 91 case "$1" in
 92     start|stop|restart|reload)
 93         $1
 94         ;;
 95     force-reload)
 96         force_reload
 97         ;;
 98     checkconfig)
 99         check
100         ;;
101     status)
102         fdr_status
103         ;;
104     condrestart|try-restart)
105       [ ! -f $lockfile ] || restart
106     ;;
107     *)
108         echo $"Usage: $0 {start|stop|status|checkconfig|restart|try-restart|reload|force-reload}"
109         exit 2
110 esac
sysv haproxy启动脚本

   shell>chkconfig --level 35 haproxy on   ## 加入开机自启动

  shell>/usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/conf/haproxy

  注意:假如没有配置后端主机,haproxy启动的时候会警告,但不影响haproxy使用

  说明 重启haproxy命令

  shell>/usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/conf/haproxy -st `pidof haproxy`

五.测试

  shell>curl -I localhost:10800

  shell>netstat -lntup | grep -i "haproxy"

  

六.日志

  shell>tailf /var/log/haproxy.log

  1.使用capture request header 命令抓取后的haproxy输出日志

   

   说明:{}中的字符串即为capture后的结果,使用|分开,请求报文首部没有此抓取的首部则留空

  2.没有使用capture request head 命令的haproxy输出日志

   注释掉capture

    

    shell>/usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/conf/haproxy.cfg -c  #语法检测

   shell>/usr/local/haproxy/sbin/haproxy -f /usr/local/haproxy/conf/haproxy.cfg -st `pidof haproxy`

    shell>curl -I localhost:80

   

七.监控统计管理页面,haproxy的统计页可以实现强大的管理功能,最常用的就是软下线后端主机

  访问 http://192.168.3.83:10080/stats


 至此,haproxy简单的安装部署就先介绍到这里。后续具体使用请参考接下来的博客,小饿小困喝点香飘飘奶茶~~

  1 global 
  2         maxconn  10000  
  3         chroot   /usr/local/haproxy  
  4         uid      500
  5         gid      500  
  6         daemon  
  7         quiet  
  8         nbproc   1 
  9         pidfile  /usr/local/haproxy/haproxy.pid  
 10         stats socket /usr/local/haproxy/haproxy.sock mode 666 level admin
 11         stats timeout 2m
 12  ################################默认设置#####################################  
 13    
 14 defaults  
 15         log     global 
 16         log     127.0.0.1 local3 info  
 17         mode    http 
 18         option  httplog  
 19 #       option  dontlognull
 20         option  redispatch
 21         option  abortonclose
 22         stats   refresh 30 
 23         retries 3 
 24    
 25         balance roundrobin 
 26 #       balance source   
 27 #       balance leastconn
 28 
 29         maxconn 5000  
 30         contimeout 5000
 31         clitimeout 50000
 32         srvtimeout 50000 
 33         timeout check 2000 
 34         errorfile 403 /usr/local/haproxy/html/errorpage/403.html
 35         errorfile 401 /usr/local/haproxy/html/errorpage/403.html
 36 
 37         option httpclose
 38         option forceclose
 39         option http-server-close
 40         option forwardfor except 127.0.0.1 header Client-RealIP
 41 
 42  ###################################ACL及backend设置###################################  
 43    
 44 frontend http-in
 45 
 46         bind *:80
 47         ## 页面引用设定,同源网站可引用
 48         rspadd X-Frame-Options: SAMEORIGIN
 49         
 50         # 定义acl 访问控制
 51         acl manage_gydf hdr_beg(host) -i manage.gydf.com.cn
 52         acl api_gydf hdr_beg(host) -i api.gydf.com.cn
 53         acl image_gydf hdr_beg(host) -i image.gydf.com.cn
 54         acl zgc_gydf hdr_beg(host) -i zgc.gydf.com.cn
 55         acl msg_sbj hdr_beg(host) -i msg.shibaoj.com
 56         acl sso hdr_beg(host) -i sso.huaxinhengchang.com   
 57 #       acl hdapi hdr_beg(host) -i hdapi.huaxinhengchang.com   
 58         acl dpms hdr_beg(host) -i dpms.huaxinhengchang.com
 59         acl area hdr_beg(host) -i area.huaxinhengchang.com
 60         acl vp hdr_beg(host) -i vp.huaxinhengchang.com
 61         acl pifa hdr_beg(host) -i pifa.dongpi.com
 62         acl app hdr_beg(host) -i app.dongpi.com
 63         acl xpifa hdr_beg(host) -i xpifa.dongpi.com
 64         acl druid_Directory path_beg -i /druid/
 65         acl goodsSearch path_beg -i /search/demo/
 66         acl goodsSearch_html path_end -i goodsSearch.htm
 67         #acl dpms_ip src 121.69.31.48/30 121.69.26.88/30 211.103.246.200/29 211.103.246.202/32 192.168.95.0/24 118.26.132.192/27 111.203.253.224/28
 68         acl dpms_ip src 192.168.95.0/24 182.50.125.96/27 124.205.174.18/30 118.187.32.248/32
 69 #        acl hdapi_ip src 192.168.95.0/24 121.69.31.50/32
 70         #acl goodsSearch_ip src 121.69.31.48/30 192.168.95.0/24
 71         acl goodsSearch_ip src 182.50.125.96/27 192.168.95.0/24 124.205.174.18/30 118.187.32.248/32
 72         block if druid_Directory
 73         block if dpms !dpms_ip
 74 #        block if hdapi !hdapi_ip
 75         block if goodsSearch goodsSearch_html !goodsSearch_ip
 76 
 77         use_backend manage.gydf.com.cn if manage_gydf || image_gydf
 78         use_backend api.gydf.com.cn if api_gydf
 79         use_backend zgc.gydf.com.cn:80 if zgc_gydf
 80         use_backend msg.shibaoj.com:80 if msg_sbj
 81         use_backend sso.huaxinhengchang.com if sso        
 82         use_backend dpms.huaxinhengchang.com if dpms
 83         use_backend area.huaxinhengchang.com if area
 84         use_backend vp.huaxinhengchang.com if vp
 85 #        use_backend pifa.dongpi.com if pifa
 86 #        use_backend app.dongpi.com if app
 87 #        use_backend xpifa80.dongpi.com if xpifa
 88         default_backend sso.huaxinhengchang.com
 89 
 90 frontend https-in
 91     bind *:443 
 92     mode tcp 
 93     acl https_gydf dst 192.168.95.180/32
 94     acl https_sbj dst 192.168.95.184/32
 95 
 96     use_backend zgc.gydf.com.cn:443 if https_gydf
 97     use_backend msg.shibaoj.com:443 if https_sbj
 98     default_backend zgc.gydf.com.cn:443
 99 
100  ##############################sso.dongpi.com域名负载###################################
101 backend sso.huaxinhengchang.com
102         mode    http
103         balance leastconn                       
104         cookie  SERVERID                       
105         option  httpchk GET /test/cdo.jsp     
106         option  httpclose 
107         option  forwardfor
108         server BUS-15 192.168.95.15:80 cookie BUS-15 check inter 5000 fall 3 rise 2 weight 1 
109         server BUS-16 192.168.95.16:80 cookie BUS-16 check inter 5000 fall 3 rise 2 weight 1
110 
111  #########################dpms.dongpi.com域名负载###################################
112 backend dpms.huaxinhengchang.com
113         mode    http
114         balance leastconn
115         option  httpchk GET /test/cdo.jsp
116         option  httpclose
117         option  forwardfor
118         server BUS-15 192.168.95.15:80 cookie 1 check inter 5000 fall 3 rise 2 weight 1
119         server BUS-16 192.168.95.16:80 cookie 2 check inter 5000 fall 3 rise 2 weight 1
120  
121  #########################area.dongpi.com域名负载###################################
122 backend area.huaxinhengchang.com
123         mode    http
124         balance leastconn
125         option  httpchk GET /test/cdo.jsp
126         option  httpclose
127         option  forwardfor
128         server BUS-15 192.168.95.15:80 cookie 1 check inter 5000 fall 3 rise 2 weight 1
129         server BUS-16 192.168.95.16:80 cookie 2 check inter 5000 fall 3 rise 2 weight 1
130 
131  #########################vp.dongpi.com域名负载###################################
132 backend vp.huaxinhengchang.com
133         mode    http
134         balance leastconn
135         option  httpchk GET /test/cdo.jsp
136         option  httpclose
137         option  forwardfor
138         server BUS-15 192.168.95.15:80 cookie 1 check inter 5000 fall 3 rise 2 weight 1
139         server BUS-16 192.168.95.16:80 cookie 2 check inter 5000 fall 3 rise 2 weight 1
140 
141  #########################pifa.dongpi.com域名负载###################################
142 #backend pifa.dongpi.com
143 #        mode    http
144 #        balance leastconn
145 #        option  httpchk GET /errorpage/404.html
146 #        option  httpclose
147 #        option  forwardfor
148 #        server BUS-164 192.168.95.164:80 cookie BUS-15 check inter 5000 fall 3 rise 2 weight 1
149 #        server BUS-165 192.168.95.165:80 cookie BUS-16 check inter 5000 fall 3 rise 2 weight 1
150 #
151  #########################xpifa.dongpi.com 80域名负载###################################
152 #backend xpifa80.dongpi.com
153 #        mode    http
154 #        balance leastconn
155 #        option  httpchk GET /errorpage/404.html
156 #        option  httpclose
157 #        option  forwardfor
158 #        server BUS-164 192.168.95.164:80 cookie BUS-15 check inter 5000 fall 3 rise 2 weight 1
159 #        server BUS-165 192.168.95.165:80 cookie BUS-16 check inter 5000 fall 3 rise 2 weight 1
160 
161  #########################xpifa.dongpi.com 443域名负载###################################
162 #backend xpifa.dongpi.com
163 #       mode    tcp
164 #        balance roundrobin  
165 #       option ssl-hello-chk 
166 #        server BUS-164 192.168.95.164:443
167 #        server BUS-165 192.168.95.165:443
168 
169  #########################manage.gydf.com.cn 80域名负载###################################
170 backend manage.gydf.com.cn
171         mode    http
172         balance leastconn
173         option  httpchk GET /chkrs_alive.jsp
174         option  httpclose
175         option  forwardfor
176         server SBJ-164 192.168.95.164:80 cookie SBJ-164 check inter 5000 fall 3 rise 2 weight 1
177         server SBJ-165 192.168.95.165:80 cookie SBJ-165 check inter 5000 fall 3 rise 2 weight 1
178 
179  #########################api.gydf.com.cn 80域名负载###################################
180 backend api.gydf.com.cn
181         mode    http
182         balance leastconn
183         option  httpchk GET /chkrs_alive.jsp
184         option  httpclose
185         option  forwardfor
186         server SBJ-164 192.168.95.164:80 cookie SBJ-164 check inter 5000 fall 3 rise 2 weight 1
187         server SBJ-165 192.168.95.165:80 cookie SBJ-165 check inter 5000 fall 3 rise 2 weight 1
188 
189  #########################zgc.gydf.com.cn 80域名负载###################################
190 backend zgc.gydf.com.cn:80
191         mode    http
192         balance leastconn
193         option  httpchk GET /chkrs_alive.jsp
194         option  httpclose
195         option  forwardfor
196         server SBJ-164 192.168.95.164:80 cookie SBJ-164 check inter 5000 fall 3 rise 2 weight 1
197         server SBJ-165 192.168.95.165:80 cookie SBJ-165 check inter 5000 fall 3 rise 2 weight 1
198 
199  #########################zgc.gydf.com.cn 443域名负载###################################
200 backend zgc.gydf.com.cn:443
201         mode    tcp
202         balance roundrobin  
203         option ssl-hello-chk 
204         stick-table type ip size 200k expire 30m
205         stick on src
206         server SBJ-164 192.168.95.164:443
207         server SBJ-165 192.168.95.165:443
208 
209  #########################msg.shibaoj.com 80域名负载###################################
210 backend msg.shibaoj.com:80
211         mode    http
212         balance source
213         option  httpchk GET /chkrs_alive.jsp
214         option  httpclose
215         option  forwardfor
216         server WS-80 192.168.95.80:80 cookie WS-80 check inter 5000 fall 3 rise 2 weight 1
217         server WS-84 192.168.95.84:80 cookie WS-84 check inter 5000 fall 3 rise 2 weight 1
218 
219  #########################msg.shibaoj.com 443域名负载###################################
220 backend msg.shibaoj.com:443
221         mode    tcp
222         balance leastconn  
223         option ssl-hello-chk 
224         stick-table type ip size 200k expire 30m
225         stick on src
226         server WS-80 192.168.95.80:443
227         server WS-84 192.168.95.84:443
228 
229 
230  #########################app.dongpi.com域名负载###################################
231 #backend app.dongpi.com
232 #        mode    http
233 #        balance leastconn
234 #        option  httpchk GET /errorpage/404.html
235 #        option  httpclose
236 #        option  forwardfor
237 #        server BUS-164 192.168.95.164:80 cookie BUS-15 check inter 5000 fall 3 rise 2 weight 1
238 #        server BUS-165 192.168.95.165:80 cookie BUS-16 check inter 5000 fall 3 rise 2 weight 1
239 
240  ################################监控页面的设置##########################################
241 listen status 
242         bind  *:8888                    #监听端口
243         stats enable  
244         stats uri /status               #监控页面的url
245         stats auth admin:admin123       #监控页面的用户和密码admin,可以设置多个用户名
246         stats realm Haproxy statistic  #监控页面的提示信息  
247         stats admin if TRUE             #手工启用/禁用,后端服务器(haproxy-1.4.9以后版本)
248         stats hide-version             #隐藏统计页面上的haproxy版本信息
生产环境haproxy配置
原文地址:https://www.cnblogs.com/M18-BlankBox/p/6023617.html