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服务,提供测试页面。
配置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
haproxy实现的web反向代理,动静分离,以及基于keepalived实现的haproxy的高可用,布布扣,bubuko.com