首页 > 应用开发 > IT综合 > 软件级负载均衡器haproxy入门篇
author:zy
现在网站发展的趋势对网络负载均衡的使用是随着网站规模的提升根据不同的阶段来使用不同的技术:
一种是通过硬件来进行,常见的硬件有比较昂贵的NetScaler、F5、Radware和Array等商用的负载均衡器,它的优点就是有专业的维护团队来对这些服务进行维护、缺点就是花销太大,所以对于规模较小的网络服务来说暂时还没有需要使用;另外一种就是类似于LVS/HAProxy、Nginx的基于Linux的开源免费的负载均衡软件策略,这些都是通过软件级别来实现,所以费用非常低廉,所以也比较推荐大家采用第二种方案来实施自己网站的负载均衡需求。
HAProxy的特点是:
1、HAProxy是支持虚拟主机的,以前有朋友说这个不支持虚拟主机,我这里特此更正一下。
2、能够补充Nginx的一些缺点比如Session的保持,Cookie的引导等工作
3、支持url检测后端的服务器出问题的检测会有很好的帮助。
4、它跟LVS一样,本身仅仅就只是一款负载均衡软件;单纯从效率上来讲HAProxy更会比Nginx有更出色的负载均衡速度,在并发处理上也是优于Nginx的。
5、HAProxy可以对Mysql读进行负载均衡,对后端的MySQL节点进行检测和负载均衡,不过在后端的MySQL slaves数量超过10台时性能不如LVS,所以我向大家推荐LVS+Keepalived。
6、HAProxy的算法现在也越来越多了,具体有如下8种:
①roundrobin,表示简单的轮询,这个不多说,这个是负载均衡基本都具备的;
②static-rr,表示根据权重,建议关注;
③leastconn,表示最少连接者先处理,建议关注;
④ource,表示根据请求源IP,这个跟Nginx的IP_hash机制类似,我们用其作为解决session问题的一种方法,建议关注;
⑤ri,表示根据请求的URI;
⑥rl_param,表示根据请求的URl参数'balance url_param' requires an URL parameter name;
⑦hdr(name),表示根据HTTP请求头来锁定每一次HTTP请求;
⑧rdp-cookie(name),表示根据cookie(name)来锁定并哈希每一次TCP请求。
HAProxy is a free, very fast and reliable solution offering high availability, load balancing, and proxying for TCP and HTTP-based applications. It is particularly suited for web sites crawling under very high loads while needing persistence or Layer7 processing. Supporting tens of thousands of connections is clearly realistic with todays hardware. Its mode of operation makes its integration into existing architectures very easy and riskless, while still offering the possibility not to expose fragile web servers to the Net。
摘自官网:http://haproxy.1wt.eu
集群(RAC)、主备机 这些字眼相信大家都已很熟悉或者是听过。不外乎是多台机器对外工作,避免单台机器超频率的工作带来的处理能力下渐、系统Hang住、以及数据灾难性的丢失等的一套应对性解决方案
同理,HAProxy是一个免费的、开源的、高可用的软件级别的负载均衡解决方案。这意味着它很便宜,不需要部署多台机器也能达到这一效果。
区别于其它类似的技术,HAProxy是可以工作在网络4层(TCP)和7层(HTTP)的。并且拥有图形界面
二、haproxy集群工作流程


2.配置
安装完毕后,进入安装目录配置文件,默认情况下目录里是没有.cfg配置文件的,可以回到安装文件目录下将examples下的haproxy.cfg拷贝到/zy/haproxy/haproxy_setup下。
HAProxy配置中分五大部分:
global:全局配置参数,进程级的,用来控制Haproxy启动前的一些进程及系统设置
defaults:配置一些默认的参数,可以被frontend,backend,listen段继承使用
frontend:用来匹配接收客户所请求的域名,uri等,并针对不同的匹配,做不同的请求处理
backend:定义后端服务器集群,以及对后端服务器的一些权重、队列、连接数等选项的设置,我将其理解为Nginx中的upstream块
listen:我将其理解为frontend和backend的组合体
# cd /zy/haproxy/haproxy_setup
# vi haproxy.cfg
根据实际需求,更改配置文件,我的配置如下
|
global #全局设置
log 127.0.0.1 local0 #日志输出配置,所有日志都记录在本机,通过local0输出
#log loghost local0 info
maxconn 4096 #最大连接数
chroot /zy/haproxy/haproxy_setup
group root
daemon #以后台形式运行haproxy
nbproc 2 #启动2个haproxy实例
pidfile /zy/haproxy/haproxy_setup/haproxy.pid #将所有进程写入pid文件
#debug
#quiet
defaults #默认设置
#log global
log 127.0.0.1 local3 #日志文件的输出定向
mode http #所处理的类别,默认采用http模式,可配置成tcp作4层消息转发
option httplog #日志类别,采用httplog
option dontlognull
option forwardfor #如果后端服务器需要获得客户端真实ip需要配置的参数,可以从Http Header中获得客户端ip
option httpclose #每次请求完毕后主动关闭http通道,haproxy不支持keep-alive,只能模拟这种模式的实现
retries 3 #3次连接失败就认为服务器不可用,主要通过后面的check检查
option redispatch #当serverid对应的服务器挂掉后,强制定向到其他健康服务器
maxconn 2000 #最大连接数
stats uri /haproxy-admin #haproxy 监控页面的访问地址
contimeout 5000 #连接超时时间
clitimeout 50000 #客户端连接超时时间
srvtimeout 50000 #服务器端连接超时时间
stats auth zy:zhouyun #设置监控页面的用户和密码:zhouyun
stats realm 设置统计页面认证时的提示内容 lands
# 设置统计页面认证时的提示内容
#stats hide-version #隐藏统计页面的HAproxy版本信息
frontend http-in #前台
bind *:80
mode http
option httplog
log global
acl php url_reg -i \.php$ --访问控制列表, -i不区分大小写, \.php$ php结尾规则
acl html url_reg -i \.html$
#use_backend php-server if php --判断访问控制列表类型,如果是php则会到下方的php-server中
use_backend htmpool if html
default_backend htmpool #静态服务器池,默认服务器池
#这玩艺每次启动都在报错,可能是还没有搭健康检查吧
backend htmpool #后台
balance leastconn#负载均衡算法
option httpchk HEAD /index.htm HTTP/1.0 #健康检查
server web1 192.168.202.201:80 cookie 1 weight 5 check inter 2000 rise 2 fall 3
server web2 192.168.202.202:80 cookie 2 weight 3 check inter 2000 rise 2 fall 3
#cookie 1表示serverid为1,check inter 1500 是检测心跳频率
#rise 2是2次正确认为服务器可用,fall 3是3次失败认为服务器不可用,weight代表权重
|
|
global # 全局参数的设置
log 127.0.0.1 local0 #日志输出配置,所有日志都记录在本机,通过local0输出
chroot /zy/haproxy/haproxy_setup
#ulimit -n 65536
pidfile /zy/haproxy/haproxy_setup/haproxy.pid
log 127.0.0.1 local3 #日志文件的输出定向
stats uri /haproxy-admin #haproxy 监控页面的访问地址 contimeout 5000 #连接超时时间,设置成功连接到一台服务器的最长等待时间,默认单位是毫秒,新版本的haproxy使用timeout connect替代,该参数向后兼容 clitimeout 50000 #客户端连接超时时间,设置连接客户端发送数据时的成功连接最长等待时间,默认单位是毫秒,新版本haproxy使用timeout client替代。该参数向后兼容 srvtimeout 50000 #服务器端连接超时时间,设置服务器端回应客户度数据发送的最长等待时间,默认单位是毫秒,新版本haproxy使用timeout server替代。该参数向后兼容
# 设置统计页面认证时的提示内容 #我测试时感觉这玩艺压根就没识别 listen status# 定义一个名为status的部分 bind 0.0.0.0:80 # 定义监听的套接字 mode http # 定义为HTTP模式 log global # 继承global中log的定义
stats refresh 30s
#bind *:80
default_backend htmpool #静态服务器池,在backend section指定的
backend htmpool #后台
balance leastconn#负载均衡算法
option httpchk HEAD /index.htm HTTP/1.0 #健康检查
server web1 192.168.202.201:80 cookie 1 weight 5 check inter 2000 rise 2 fall 3
server web2 192.168.202.202:80 cookie 2 weight 3 check inter 2000 rise 2 fall 3
#cookie 1表示serverid为1,check inter 2000 是检测心跳频率
#rise 2是2次正确认为服务器可用,fall 3是3次失败认为服务器不可用,weight代表权重
|
# vim /etc/syslog.conf
在最下边增加
#vim /etc/sysconfig/syslog
修改: SYSLOGD_OPTIONS="-r -m 0"
重启日志服务service syslog restart
#service syslog restart --系统日志也是个服务
注: -r enables logging from remote machines
4.设置开机启动
为了方便系统在开机时加载,还可以创建启动脚本:
# vim /etc/rc.d/init.d/haproxy 内容如下:
|
#! /bin/sh
set -e
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/zy/haproxy/haproxy_setup/sbin
PROGDIR=/zy/haproxy/haproxy_setup
PROGNAME=haproxy
DAEMON=$PROGDIR/sbin/$PROGNAME
CONFIG=$PROGDIR/$PROGNAME.conf
PIDFILE=$PROGDIR/$PROGNAME.pid
DESC="HAProxy daemon"
SCRIPTNAME=/etc/init.d/$PROGNAME
# Gracefully exit if the package has been removed.
test -x $DAEMON || exit 0
start()
{
echo -n "Starting $DESC: $PROGNAME"
$DAEMON -f $CONFIG
echo "."
}
stop()
{
echo -n "Stopping $DESC: $PROGNAME"
haproxy_pid=cat $PIDFILE
kill $haproxy_pid
echo "."
}
restart()
{
echo -n "Restarting $DESC: $PROGNAME"
$DAEMON -f $CONFIG -p $PIDFILE -sf $(cat $PIDFILE)
echo "."
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
restart
;;
*)
echo "Usage: $SCRIPTNAME {start|stop|restart}" >&2
exit 1
;;
esac
exit 0
|
保存后赐予可执行权限
# chmod +x /etc/rc.d/init.d/haproxy
就可以使用 service haproxy start|stop|restart 来控***务的启动停止跟重启。
还可以通过以下命令加载到开机服务启动列表
# chkconfig --add haproxy
5.启动服务
6.举例
在浏览器中输入haproxy监控地址:http://192.168.202.201/haproxy-admin,如图所示
参考文献:
http://network.51cto.com/art/201110/295955_1.htm
http://blog.csdn.net/maijian/article/details/6082283
http://blog.sina.com.cn/s/blog_51d3553f0100u1bb.html
http://andrewyu.blog.51cto.com/1604432/647907
http://blog.chinaunix.net/space.php?uid=22600159&do=blog&id=2124188
http://sookk8.blog.51cto.com/455855/579719
http://freehat.blog.51cto.com/1239536/1347882
http://www.cnblogs.com/dkblog/archive/2012/03/13/2393321.html
http://jlsfwq.blog.51cto.com/818700/165617
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/30109892/viewspace-1870482/ ,如需转载,请注明出处,否则将追究法律责任。