haproxy详解(上)

参考文件http://cbonte.github.io/haproxy-dconv

软件负载均衡一般通过两种方式来实现:基于操作系统的软负载实现和基于第三方应用的软负载实现。LVS就是基于Linux操作系统实现的一种软负载,HAProxy就是开源的并且基于第三应用实现的软负载。HAProxy相比LVS的使用要简单很多,功能方面也很丰富。当前,HAProxy支持两种主要的代理模式:"tcp"也即4层(大多用于邮件服务器、内部协议通信服务器等),和7层(HTTP)。在4层模式 下,HAProxy仅在客户端和服务器之间转发双向流量。7层模式下,HAProxy会分析协议,并且能通过允许、拒绝、交换、增加、修改或者***请求 (request)或者回应(response)里指定内容来控制协议,这种操作要基于特定规则。(新版本引入了frontend,backend指令;frontend根据任意 HTTP请求头内容做规则匹配,然后把请求定向到相关的backend.)

现在用HAProxy主要在于它有以下优点,这里我总结下:

1、HAProxy是支持虚拟主机的,通过frontend指令来实现

2、能够补充Nginx的一些缺点比如Session的保持,Cookie的引导等工作

3、支持url检测后端的服务器出问题的检测会有很好的帮助。

4、它跟LVS一样,本身仅仅就只是一款负载均衡软件;单纯从效率上来讲HAProxy更会比Nginx有更出色的负载均衡速度,在并发处理上也是优于Nginx的。

5、HAProxy可以对Mysql读进行负载均衡,对后端的MySQL节点进行检测和负载均衡,不过在后端的MySQL slaves数量超过10台时性能不如LVS,所以我向大家推荐LVS+Keepalived。

6、能对请求的url和header中的信息做匹配,有比lvs有更好的7层实现

7、HAProxy的负载均衡算法现在也越来越多了,具体有如下8种:

①roundrobin,表示简单的轮询,这个不多说,这个是负载均衡基本都具备的;

②static-rr,表示根据权重,建议关注;

③leastconn,表示最少连接者先处理,建议关注;

④source,表示根据请求源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配置中分五大部分:

global:全局配置参数,进程级的,用来控制Haproxy启动前的一些进程及系统设置

defaults:配置一些默认的参数,可以被frontend,backend,listen段继承使用

frontend:用来匹配接收客户所请求的域名,uri等,并针对不同的匹配,做不同的请求处理

backend:定义后端服务器集群,以及对后端服务器的一些权重、队列、连接数等选项的设置,我将其理解为Nginx中的upstream块

listen:frontend和backend的组合体

haproxy在默认情况不会记录日志,除了在haproxy.conf中的global段指定日志的输出外,还需要配置系统日志的配置文件

1.在haproxy中global

log127.0.0.1local3         #local3是设备,对应于 /etc/rsyslog.conf中的配置,默认回收info的日志级别

2.编辑系统日志配置 

vim  /etc/rsyslog.conf  

local3.*/var/log/haproxy.log#如果不加下面的的配置则除了在/var/log/haproxy.log中写入日志外

3.配置rsyslog的主配置文件,开启远程日志

# vim /etc/sysconfig/rsyslog

SYSLOGD_OPTIONS=”-c2-r-m0″

#-c 2 使用兼容模式,默认是 -c 5

#-r 开启远程日志

#-m 0 标记时间戳。单位是分钟,为0时,表示禁用该功能

重启 haproxy和rsyslog 


haproxy中的session保持实现

1.在client增加cookie

8backend backend_www

option forwardfor

cookie SERVERID insert indirect nocache#插入session信息

option     redispatch#当后端rs挂了,可立即切换,不会出现503错误

option httpchk HEAD / HTTP/1.0

balance roundrobin

server www1 192.168.1.198:80 cookie www1check inter 2000 rise 30 fall 15

server www2 192.168.1.52:80 cookie www2 checkinter 2000 rise 30 fall 15

2.balance source根据原ip,经过hash计算后,指定后端固定的rs

6backend backend_www

option forwardfor

option httpchk HEAD / HTTP/1.0

balancesource

server www1 192.168.1.198:80 check inter2000 rise 30 fall 15

server www2 192.168.1.52:80check inter 2000 rise 30 fall 15

你可能感兴趣的:(haproxy详解(上))