当前位置:文档之家› HAPROXY安装及配置详解与算法

HAPROXY安装及配置详解与算法

HAProxy安装及配置详解与算法
HAProxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。

根据官方数据,其最高极限支持10G的并发。

HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。

HAProxy 运行在当前的硬件上,完全可以支持数以万计的并发连接。

并且它的运行模式使得它可以很简单安全的整
合进您当前的架构中,同时可以保护你的web服务器不被暴露到网络上。

其支持从4层至7层的网络交换,即覆盖所有的TCP协议。

就是说,Haproxy甚至还支持Mysql的
均衡负载。

如果说在功能上,能以proxy反向代理方式实现WEB均衡负载,这样的产品有很多。

包括Nginx,ApacheProxy,lighttpd,Cheroke等。

但要明确一点的,Haproxy并不是Http服务器。

以上提到所有带反向代理均衡负载的产品,都
清一色是WEB服务器。

简单说,就是他们能自个儿提供静态(html,jpg,gif..)或动态(php,cgi..)
文件的传输以及处理。

而Haproxy仅仅,而且专门是一款的用于均衡负载的应用代理。

其自身并不能提
供http服务。

但其配置简单,拥有非常不错的服务器健康检查功能还有专门的系统状态监控页面,当其代理的后端服务器出现故障,HAProxy会自动将该服务器摘除,故障恢复后再自动将该服务器加入。

自1.3版本开始还引入了frontend,backend,frontend根据任意HTTP请求头内容做规则匹配,然后把请求定向到相关的backend。

1.安装
官方版本获取地址:http://haproxy.1wt.eu/,不过官方页面已经打不开了,请自行搜索!
上面中的26是linux系统内核,通过命令#uname-a可查看,我使用的是CentOS
#tar xzvf haproxy-1.4.24.tar.gz
#cd haproxy-1.4.24
#make TARGET=linux26PREFIX=/usr/local/haproxy
#make install PREFIX=/usr/local/haproxyb
2.配置
安装完毕后,进入安装目录配置文件,默认情况下目录里是没有.cfg配置文件的,可以回到安装文件目录下将examples下的haproxy.cfg拷贝到usr/local/haproxy下。

#cd/usr/local/haproxy
#vi haproxy.cfg
默认文件内容如下:(注意!!标示开始的为默认的配置文件没有的)
3.加上日志支持
是根据上面的global和default里的log配置#vim/etc/syslog.conf
在最下边增加
local3.*/var/log/haproxy.log
local0.*/var/log/haproxy.log
#vim/etc/sysconfig/syslog
修改:SYSLOGD_OPTIONS="-r-m0"
启日志服务service syslog restart
然后就可查看日志了
#tail–f/var/log/harpoxy.log
4.设置开机启动
为了方便系统在开机时加载,还可以创建启动脚本:
保存后赐予可执行权限
#chmod+x/etc/rc.d/init.d/haproxy
就可以使用service haproxy start|stop|restart来控制服务的启动停止跟重启。

并通过以下命令加载到开机服务启动列表
#chkconfig–add haproxy
5.启动参数
haproxy-f<配置文件>
[-n最大并发连接总数][-N每个侦听的最大并发数][-d][-D][-q][-V][-c][-p<pid文件>][-s][-l][-dk]
[-ds][-de][-dp][-db][-m<内存限制M>][{-sf|-st}pidlist...]
-d前台,debug模式
-D daemon模式启动
-q安静模式,不输出信息
-V详细模式
-c对配置文件进行语法检查
-s显示统计数据
-l显示详细统计数据
-dk不使用kqueue
-ds不使用speculative epoll
-de不使用epoll
-dp不使用poll
-db禁用后台模式,程序跑在前台
-sf<pidlist>程序启动后向pidlist里的进程发送FINISH信号,参数放在命令行的最后-st<pidlist>程序启动后向pidlist里的进程发送TERMINATE信号,参数放在命令行的最后
6.启动服务
启动服务:
#/usr/local/haproxy/sbin/haproxy-f/usr/local/haproxy/haproxy.cfg
重启服务:
#/usr/local/haproxy/sbin/haproxy-f/usr/local/haproxy/haproxy.cfg-st`cat /usr/local/haproxy/logs/haproxy.pid`
停止服务:
#killall haproxy
6.查看状态
在浏览器中输入haproxy监控地
址:http://ipaddress:8080/admin_status
7.Haproxy的算法
HAProxy的算法有如下8种:
1).roundrobin,表示简单的轮询,这个不多说,这个是负载均衡基本都具备的;
2).static-rr,表示根据权重,建议关注;
3).leastconn,表示最少连接者先处理,建议关注;
4).source,表示根据请求源IP,建议关注;
5).uri,表示根据请求的URI;
6).url_param,表示根据请求的URl参数’balance url_param’requires an URL parameter name
7).hdr(name),表示根据HTTP请求头来锁定每一次HTTP请求;
8).rdp-cookie(name),表示根据据cookie(name)来锁定并哈希每一次TCP请求。

其实这些算法各有各的用法,我们平时应用得比较多的应该是roundrobin、source和lestconn,大家可以重点关注下。

这里我用HAProxy+Keepalived时没有考虑HAProxy进程级别的高HA,一来是因为淘宝也在用它作为负载均衡器,稳定性肯定不需要怀疑;二来在测试时发现确实相当的稳定,杀掉
HAProxy进程还必须用kill-9。

有一点要提醒大家,HAProxy是支持虚拟主机的,这个其实很好验证,我们做个1+1的架构,后面随便放台Nginx或Aapceh的web服务器就可能验证这种说法了;另外,经过与Nginx的正则对比,我们也确实发现HAProxy的正则处理能力上不如Nginx的强大和灵活的,我们这里也可以采取一个折衷的方案,后面的web服务器我们都用Nginx来作,如果是jsp应用,可以用Nginx+tomat,如果是跑PHP 的,可以用Nginx+FastCGI(PHP5)。

相关主题