23decxf 发表于 2019-1-1 10:11:25

HAProxy负载均衡器后续篇

【运维网.com 独家特稿】虽然我们看HAProxy的官方文档确实配置内容比较多,但其实我们用于线上环境,仅此几条就够用了,这也是大家说HAProxy简单的原因,HAProxy的对应配置文件如下所示:


[*]global
[*]      log 127.0.0.1   local0
[*]      maxconn 4096
[*]      chroot /usr/local/haproxy
[*]      uid 99   
[*]      gid 99
[*]      daemon
[*]      nbproc 1
[*]      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 web1203.93.236.147:80 cookie app1inst1 check inter 2000 rise 2 fall 1
[*]      server web2203.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

这里要注意的几个地方是:
一、HAProyx采用的是balance source机制,它跟LVS的persistent和Nginx的ip_hash一样,是让客户机访问时始终访问后端的某一台真实的web服务器;
二、203.93.236.149是我的网站通过Keepalived生成的VIP地址;
三、 option httpchk HEAD /index.jsp HTTP/1.0 是网页临近,如果HAProxy检测不到Web的根目录下没有index.jsp,就会产生503报错。
HAProxy+keepalived/Heartbeat是我网站的第二套方案,因为刚开始网站上的LVS+Keepalived高可用架构,后来几个朋友说用手机测试时,转发很慢,有时打不开,甚有的电脑也是这样,我尝试了以下确实如此;所以用了HAProxy+Keepalived以后发现转发速度确实快多了,手机上一拍网也没有这个问题了,由于HAProxy+Keepalived在东莞的客户那里已经部署得很成功了,所以后期我也考虑将此网站设计成HAProyx+Keepalived这种架构的。
HAProxy的算法有如下8种:
一、roundrobin,表示简单的轮询,这个不多说,这个是负载均衡基本都具备的;
二、static-rr,表示根据权重,建议关注;
三、leastconn,表示最少连接者先处理,建议关注;
四、source,表示根据请求源IP,建议关注;
五、uri,表示根据请求的URI;
六、url_param,表示根据请求的URl参数'balance url_param' requires an URL parameter name
七、hdr(name),表示根据HTTP请求头来锁定每一次HTTP请求;
八、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)。





页: [1]
查看完整版本: HAProxy负载均衡器后续篇