haproxy于Nginx一样都是做反向代理,但是与其相比,haproxy更专注于web代理。HAProxy是单进程多请求,也支持多进程,HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接。

      haproxy功能的实现全部基于配置文件,所以我们需要了解很多的配置指令,玩转指令,再结合实际情况,我们就玩转了haproxy,其实haproxy的配置也很简单,下面我们一起简单认识和了解一些haproxy的基本功能和相关知识。

        CentOS6.5自带的rpm包的版本完全够我们使用,所以我们直接yum安装        

# yum -y install haproxy

       查看haproxy的配置信息在/etc/haproxy/haproxy.cfg。大致整体可分为两个部分

   1:全局配置段

   2:代理功能的相关配置:

      在代理功能这块细分又分为四部分:

   1:defaults 默认,为代理提供默认属性

   2:frontend 前端,相当于Nginx的Server

   3:backend 后端,相当于Nginx的upstream server 可以定义多组

   4:listen 相当于一个frontend绑定一个backend 固定组合

      配置解说:  

(1)frontend  main *:5000
# frontend的名称监听端口
    acl url_static       path_beg              -i /static /images /javascript /stylesheets
#   acl acl的名称   acl的控制标准:路径从那开始。
    acl url_static       path_end              -i .jpg .gif .png .css .js
    use_backend static          if url_static
# 使用那个backend           在什么情况下使用这个后端
    default_backend             app
# 默认情况下使用那个backend    默认使用backend的名称

   

(2)backend static
# backend的名称 见名知意,这是静态服务器后端
    balance     roundrobin
#  关键字    负载均衡的调度方法
    server      static 127.0.0.1:4331 check
# 定义后端服务器 名称   ip地址   端口  执行健康检查

       haproxy简单代理的实现:

      实验环境:3台CentOS6.5的虚拟机 其中1台两个网卡172.16.20.1是内外ip.192.168.2.109是外网ip.并安装haproxy,开启路由转发功能,另外两台分别安装php ,ip分别是172.16.20.11,172.16.20.12网关指向172.16.20.1,并开启httpd服务,提供测试页面。

wKioL1NidDigirOcAAL_fgja718052.jpg

        配置haproxy的配置文件:    

frontend hapserver *:80
     default_backend             webserver
backend webserver
     balance    roundrobin
        server  web1    172.16.20.11:80 check
        server  web2    172.16.20.12:80 check

   这样一个简单的轮询代理就配置好了。

   下一个话题基于haproxy的动静分离:

   动静分离的思想:其实就是定义几个acl的访问控制规则,定义2组backend,当Client访问的URL匹配上我们定义的静态访问规则的时候我们就调用静态的backend,当匹配到动态的规则的时候,就调用动态的backend 或者不写直接设置成默认都可以。那么看下面的配置:

   

frontend hapserver *:80
        acl url_static       path_beg       -i /static /images /javascript /stylesheets
        acl url_static       path_end       -i .jpg .gif .png .css .js
                                                                                                                                                                                                                                        
        use_backend static          if url_static
        default_backend             dynamic
backend dynamic
     balance    roundrobin
        server  web1    172.16.20.11:80 check
backend static
    balance     roundrobin
        server  web2    172.16.20.12:80 check

 当你访问的路径是以static、images...等开始或者是.jpg...结尾的时候就调用后端服务器backend static,否则默认调用的是backend dynamic

 基于keepalived实现haproxy的高可用,双主配置我在博客<<基于keepalived实现Director、ipvs、Nginx的高可用以及Nginx的双主模型>>有介绍Nginx的高可用和双主模型,配置一样,大家可以参考此文档。

   haproxy的状态输出:要使用指令stats,配置信息如下

listen statspage                # 定义单独输出页面
    bind  *:8888                # 绑定端口在8008
    stats enable                # 启用页面输出机制
    stats auth admin:haproxy    # 启用用户认证及用户名和密码
    stats admin if true        

   

wKioL1Nig6uBcyXvAAOoKYQPKnw613.jpg

wKiom1Nig9iDQYPiAAd06XYxz_8766.jpg