一、haproxy相关参数
(一)负载均衡算法
roundrobin:基于权重进行轮叫,在服务器的处理时间保持均匀分布时,这是最平衡、最公平的算法。此算法是动态的,这表示其权重可以在运行时进行调整,不过,在设计上,每个后端服务器仅能最多接受4128个连接;
static-rr:基于权重进行轮叫,与roundrobin类似,但是为静态方法,在运行时调整其服务器权重不会生效;不过,其在后端服务器连接数上没有限制;
leastconn:新的连接请求被派发至具有最少连接数目的后端服务器;在有着较长时间会话的场景中推荐使用此算法,如LDAP、SQL等,其并不太适用于较短会话的应用层协议,如HTTP;此算法是动态的,可以在运行时调整其权重;
source:将请求的源地址进行hash运算,并由后端服务器的权重总数相除后派发至某匹配的服务器;这可以使得同一个客户端IP的请求始终被派发至某特定的服务器;不过,当服务器权重总数发生变化时,如某服务器宕机或添加了新的服务器,许多客户端的请求可能会被派发至与此前请求不同的服务器;常用于负载均衡无cookie功能的基于TCP的协议;其默认为静态,不过也可以使用hash-type修改此特性;
uri:对URI的左半部分(“问题”标记之前的部分)或整个URI进行hash运算,并由服务器的总权重相除后派发至某匹配的服务器;这可以使得对同一个URI的请求总是被派发至某特定的服务器,除非服务器的权重总数发生了变化;此算法常用于代理缓存或反病毒代理以提高缓存的命中率;需要注意的是,此算法仅应用于HTTP后端服务器场景;其默认为静态算法,不过也可以使用hash-type修改此特性;
url_param:通过
hdr(
(二)mode
mode { tcp|http|health }
设定实例的运行模式或协议。当实现内容交换时,前端和后端必须工作于同一种模式(一般说来都是HTTP模式),否则将无法启动实例。
tcp:实例运行于纯TCP模式,在客户端和服务器端之间将建立一个全双工的连接,且不会对7层报文做任何类型的检查;此为默认模式,通常用于SSL、SSH、SMTP等应用;
http:实例运行于HTTP模式,客户端请求在转发至后端服务器之前将被深度分析,所有不与RFC格式兼容的请求都会被拒绝;
health:实例工作于health模式,其对入站请求仅响应“OK”信息并关闭连接,且不会记录任何日志信息;此模式将用于响应外部组件的健康状态检查请求;目前业讲,此模式已经废弃,因为tcp或http模式中的monitor关键字可完成类似功能;
(三)maxconn
设定一个前端的最大并发连接数,因此,其不能用于backend区段。对于大型站点来说,可以尽可能提高此值以便让haproxy管理连接队列,从而避免无法应答用户请求。当然,此最大值不能超出“global”段中的定义。此外,需要留心的是,haproxy会为每个连接维持两个缓冲,每个缓冲的大小为8KB,再加上其它的数据,每个连接将大约占用17KB的RAM空间。这意味着经过适当优化后,有着1GB的可用RAM空间时将能维护40000-50000并发连接。
(四)cookie
cookie
(五)weight
权重,默认为1,最大值为256,0表示不参与负载均衡;
option forwardfor
option forwardfor [ except
允许在发往服务器的请求首部中插入“X-Forwarded-For”首部。
if-none:仅在此首部不存在时才将其添加至请求报文问道中。
HAProxy工作于反向代理模式,其发往服务器的请求中的客户端IP均为HAProxy主机的地址而非真正客户端的地址,这会使得服务器端的日志信息记录不了真正的请求来源,“X-Forwarded-For”首部则可用于解决此问题。HAProxy可以向每个发往服务器的请求上添加此首部,并以客户端IP为其value。
(六)ACL
用法:
acl 名称 方法 -i (忽略大小写) [匹配的路径或文件]
acl方法
hdr_beg(host) #精确匹配主机
hdr_reg(host) #正则匹配主机
path_beg #匹配路径
path_end #匹配路径结尾
实例
acl bbs hdr_reg(host) -i ^(bbs.test.com|forum.test.com) #使用正则匹配 acl bbs_path path_beg -i /bbs#url路径 acl youxi path_beg -i /youxi acl static path_end -i .html .css .js #url 结尾文件 acl php path_end -i .php acl jsp path_end -i .jsp .do use_backend bbs_pool if bbs or bbs_path #注意 "or" use_backend youxi_pool if youxi use_backend static_pool if static use_backend php_pool if php use_backend jsp_pool if jsp redirect prefix http://www.baidu.com code 301 if youxi #跳转到百度,并返回301代码 default_backend www.test.com default_backend #没有满足条件的时候使用默认的后端服务器 |
(七)健康检查
1.基于tcp端口
server app 192.168.100.115:80 cookie 1 check port 80 inter 5000 rise 3 fall 3 weight 1
1) check port 80 表示对80端口进行健康检查,也可以直接写成check。
2) inter 5000 fail 3 表示每5秒检查一次,一共检查5次。如果有问题就会摘掉出问题的机器。
3) 如果结尾不加"inter 5000 fail 3",则默认情况每2秒检查一次,一共检查3次。如果有问题就会摘掉出问题的机器。
4) 相关参数
-inter:2000 不加该参数,正常情况默认每两秒检查一次。
-rise :2 不加该参数,在real server宕机后恢复前,检查2次OK,认为其复活,并加入集群组中来。
-fail :3 意思是不加该参数,检查3次后,认为real server宕机,剔除集群组。
-port :default server port 不加该参数,默认就是端口检查。
2.基于http
访问某个指定的页面
option httpchk HEAD /check.html HTTP/1.0 #或option httpchk GET /check.html
server app 192.168.100.115:80 cookie 1 inter 5000 rise 3 fall 3 weight 1
3.基于某个域名
option httpchk HEAD /check.html HTTP/1.0\r\nHost:www.sina.com
server app 192.168.100.115:80 cookie 1 inter 5000 rise 3 fall 3 weight 1
4.其他服务的健康检查
option ldap-check
Use LDAPv3 health checks for server testing
option mysql-check [ user
Use MySQL health checks for server testing
option smtpchk
Use SMTP health checks for server testing