HAProxy负载均衡器的配置与算法

虽然咱们看HAProxy的官方文档确实配置内容比较多,但其实咱们用于线上环境,仅此几条就够用了,这也是你们说HAProxy简单的缘由,HAProxy的对应配置文件以下所示: html

global   linux

        log 127.0.0.1   local0   web

        maxconn 4096   redis

        chroot /usr/local/haproxy   算法

        uid 99    vim

        gid 99   后端

        daemon   服务器

        nbproc 1   cookie

        pidfile /usr/local/haproxy/logs/haproxy.pid   架构

        debug  

 

defaults  

        log     127.0.0.1       local3  

        mode    http  

        option httplog  

        option httpclose  

        option dontlognull  

        option forwardfor  

        option redispatch  

        retries 2  

        maxconn 2000  

        balance source  

        stats   uri     /haproxy-stats  

        contimeout      5000  

        clitimeout      50000  

        srvtimeout      50000  

 

 listen 1paituan_proxy 203.93.236.149:80  

        option httpchk HEAD /index.jsp HTTP/1.0  

        server web1  203.93.236.147:80 cookie app1inst1 check inter 2000 rise 2 fall 1  

     server web2  203.93.236.146:80 cookie app1inst2 check inter 2000 rise 2 fall 1 

加上日志支持,以下所示:

#vim /etc/syslog.conf  

 

添加:  

 

local3.*        /var/log/haproxy.log  

local0.*        /var/log/haproxy.log  

 

#vim /etc/sysconfig/syslog  

 

修改:  

 

SYSLOGD_OPTIONS="-r -m 0" 

service syslog restart 

这里要注意的几个地方是:

1、HAProyx采用的是balance source机制,它跟LVS的persistent和Nginx的ip_hash同样,是让客户机访问时始终访问后端的某一台真实的web服务器;

2、203.93.236.149是个人网站经过Keepalived生成的VIP地址;

3、 option httpchk HEAD /index.jsp HTTP/1.0 是网页临近,若是HAProxy检测不到Web的根目录下没有index.jsp,就会产生503报错。

HAProxy+keepalived/Heartbeat是我网站的第二套方案,由于刚开始网站上的LVS+Keepalived高可用架构,后来几个朋友说用手机测试时,转发很慢,有时打不开,甚有的电脑也是这样,我尝试了如下确实如此;因此用了Nginx+Keepalived之后发现转发速度确实快多了,手机上一拍网也没有这个问题了,因为Nginx+Keepalived在东莞的客户那里已经部署得很成功了,因此后期我也考虑将此网站设计成HAProyx+Keepalived这种架构的。

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+Keepalived作双主架构,后来发现不是太好维护就算了。

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

余洪春(抚琴煮酒),《构建高性能的Linux服务器》一书做者,一拍网系统架构师、资深项目管理工程师,ChinaUnix集群和高可用版版主。

REF: 

基于Keepalived+Haproxy搭建四层负载均衡器

http://www.linuxde.net/2013/04/13263.html

相关文章
相关标签/搜索