什么是ha-proxy  

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

 

 

 

相比 LVS 的使用要简单很多,功能方面也很丰富。 HA-Proxy 可以在 4 , 7 两层作负载均衡, 4 层大多用于邮件服务器、内部协议通信服务器等作负载均衡, 7 层用于 Http 分析负载转发。

 

 

在 HA-Proxy 官方网站可以下载配置说明文档 (configuration.txt) 和架构文件 (architecture.txt) 作为参考。具体的使用细节不做太多介绍,这里主要通过具体的配置来大致说一下 HA-Proxy 的结构。

 

 

   

haproxy最新版 yum源 ha-proxy_网络应用

     HA-Proxy 配置中分成四部分内容,当然这些组件不是必选的,可以根据需要选择部分作为配置。 Defaults 组件是配置默认参数的,这些参数可以被利用配置到 frontend , backend , listen 组件中(当这些组件某些参数没有被配置而在 Defaults 中配置了)。 Frontend 组件是接收请求的前端虚拟节点,就类似于 LVS 中配置了 VIP 的 Load Balancer , Frontend 可以直接指定后端指向那一个 backend( 可动态选择 ) 。 Backend 是后端服务集群的配置,类似于 LVS 中的那些 Real Server ,一个 Backend 对应一个或者多个实体服务器。 Listen 是 Frontend 和 Backend 的组合体,可以直接定义一个类似于 JBoss 的 。还有一些默认的配置可以通过在配置文件中配置或者在命令行中作为参数输入。

 

安装haproxy   

tar zxvf haproxy-1.4.8.tar.gz   
 cd haproxy-1.4.8  
 uname -a //查看linux内核版本  
 make TARGET=linux26 PREFIX=/usr/local/haproxy  #TARGET是内核版本,2.6就写作26
 make install PREFIX=/usr/local/haproxy

 

 

执行/usr/local/haproxy目 录下执行haproxy,如 果如果有使用说明出现表示已经安装正常。
使用时使用haproxy -f 配置文件地址

 

 

HA-Proxy 日志配置说明:
      HA-Proxy 可以收集本机及其他后端服务器日志,但是需要在 Load Balancer 上作一些配置。 首先修改 /etc/sysconfig/syslog 文件,将 SYSLOGD_OPTIONS="-m 0” 修改为 SYSLOGD_OPTIONS="-m 0 -r -x" ,支持收集远程服务器日志。 然后修改 /etc/syslog.conf ,增加如下语句:

#add by haproxy 
 local0.*    /home/admin/tools/haproxy-1.3.17/haproxy.log  // haproxy.log  地址代表了需要存储日志的地址


执行 service syslog restart ,重新启动系统日志器
最后就是在 HA-Proxy 的配置中增加日志输出(具体可以参考后面的配置文件说明)

HA-Proxy 配置文件说明:
下面的配置文件简单来说就是配置了根据请求参数的不同,将请求分别定向到后端的app1集群和app2集群。
具体配置文件 (haproxy.cfg) 如下:

global         //全局设置
         log 127.0.0.1   local0   info    //日志输出配置,所有日志都记录在本机,通过local0输出,我们前面已经配置了local0
         maxconn   51200                //最大连接数
         user www                             //执行ha-proxy的用户
         group www                          //执行ha-proxy的组
         pidfile    /var/run/haproxy.pid       //pid 文件存放的位置
         nbproc       2                                //启动2个ha-proxy实例
         daemon                                      //以后台形式运行ha-proxy
         #debug
         #quiet

 defaults     //默认设置

         mode    http                       //默认采用http模式,可配置成tcp作4层消息转发
         option   httplog                 //采用httplog
         retries   3                          //3次连接失败就认为服务器不可用,主要通过后面的check检查
         maxconn   2000                         //最大连接数
         contimeout 5000                      //连接超时时间
         clitimeout     5000                      //客户端连接超时时间
         srvtimeout    5000                     //服务器端连接超时时间
         stats    uri     /admin?stats         //服务器状态查看页面
         stats    auth   bikong0411:bikong0411               //服务器状态查看页面身份验证,可以不设置
         option httpchk     HEAD /welcome.html   HTTP/1.1   //服务器状态设置,这里是向每一个后端服务器请求/welcome.html来检测健康状况
  frontend   http-in           //前端节点定义
      bind    :8181            //虚拟服务器监听8181端口,也可以写作ip:port这种形式
      mode   http
      log       global
      opention    httplog
      opention    httpclose        //每次请求完毕后主动关闭http通道,ha-proxy不支持keep-alive,只能模拟这种模式的实现
      opention     forwardfor        //如果后端服务器需要获得客户端真实ip需要配置的参数,可以从Http Header中获得客户端ip
       capture    request    header Host len 20 //此配置和以下类似都是抓取http请求的参数记录到日志的
       capture    request    header User-Agent len 10
      capture    request    header Referer len 20
      capture    request    header Content-Length len 10
      //控制策略设置 
    acl app1 url_sub -i app=app1   //在请求url 中含app=app1,则此策略为true,否则为false         
中含app=app2,则此策略为true,否则为false 
    acl   invalid_req   url_sub -i app=   //在请求url中若包含app=,则此策略为true,否则为false 
    acl   stat_req      url_dir -i admin   //在请求url中admin作为部分路径时,则此策略为true,否则为false 
   block if !invalid_req !stat_req      //block表示阻止,返回403状态码,表示当前url请求既不满足invalid_req策略也不满足stat_req策略 
   use_backend   app1_server if app1      //如果满足app1策略,使用app1_server做为后端集群 
    use_backend   app2_server if app2    //如果满足app2策略,使用app2_server做为后端集群 
   default_backend   app1_server                      //app1_server作为默认集群 
backend app1_server            //后端接点定义 
      mode   http 
      balance    roundrobin       //负载均衡策略配置 
      cookie      SERVERID            //允许插入serverid到cookieid中,serverid后面要定义 
      server app1_test1 192.168.1.101:80 cookie 1 check fall 5 weight 1   //真实服务器配置定义cookie1 表示serverid为1,check表示需要状态检查,fall 5 表示失败5次就认为服务器不可用,weight表示权重 
      server app1_test2 192.168.1.102:80 cookie 1 check fall 5 weight 1 
backend app2_server               //后端接点定义 
      mode http 
      server app2_test   192.168.1.103:80   check fall 5

完成配置后,执行 haproxy –f haproxy.cfg ,后台进程就可以启动了,然后在浏览器中输入刚才定义的状态检查地址http://ip:8181/admin?stats 可以看到结果.