什么是ha-proxy
HA-Proxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案,特别适用于那些负载 特大的web站点。运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中, 同时可以保护你的web服务器不被暴露到网络上
相比 LVS 的使用要简单很多,功能方面也很丰富。 HA-Proxy 可以在 4 , 7 两层作负载均衡, 4 层大多用于邮件服务器、内部协议通信服务器等作负载均衡, 7 层用于 Http 分析负载转发。
在 HA-Proxy 官方网站可以下载配置说明文档 (configuration.txt) 和架构文件 (architecture.txt) 作为参考。具体的使用细节不做太多介绍,这里主要通过具体的配置来大致说一下 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 可以看到结果.