haproxy负载均衡配置文档

发布时间 : 星期四 文章haproxy负载均衡配置文档更新完毕开始阅读

必把用户踢下线。与maxidle不同, 这个值是不刷新的,只在第一次访问日期计数。maxidle和maxlife可以一起使用,尤其是用户一直不关闭浏览器,可以避免在一台服务器上占用太长 时间 (eg: after a farm size change)。与maxidle的超时后强行重新分配相比,这个要更好一些。

每个HTTP后端可以只有一个持久cookie,并定义在default部分,cookie的值可以是\声明中\关键字后面的值。如果服务器没有指定cookie,则不会设置。

2 Balance

balance [ ]

balance url_param [check_post []] 定义选择后端服务的负载均衡算法

May be used in sections : defaults | frontend | listen | backend yes | no | yes | yes Arguments :

是负载均衡时选择服务器的算法,没有持续信息时可用,或连接重定向到另一个服务器。 可以是以下几种:

roundrobin 每个服务器根据权重轮流使用,如果服务器的处理时间平均分布,这是最流畅和公平的算法。算法是动态的,对于实例启动慢的服务器的权重会在运行中调整。每个 backend的活动服务器在设计上限制为4128个。在一些大的群里面, 当服务器很短的宕机后恢复回来,有时会有几百个请求被重新整合到群当中,并开始接收处理。尽管很少发生,但是很正常。这也说明了有机会监视它们,所以不必 担心。

static-rr 每个服务器根据权重轮流使用,类似roundrobin,但它是静态的,意味着运行时修改权重是无效的。另一方面,它对服务器的数量没有设计上的限制,服 务器启动后便会立即进到群中,整个分发方案会重新计算。这会略微降低CPU的运行(约1%)。

leastconn 连接数最低的服务器优先接收连接。Round-robin用于负载相同的服务器,使每台服务器都被使用。leastconn建议用于长会话服务,例如 LDAP, SQL, TSE等,而不是很适合短会话协议,如HTTP。算法是动态的,对于实例启动慢的服务器的权重会在运行中调整。

source 对源IP地址进行哈希,用可用服务器的权重总数除以哈希值,根据结果进行分配。只要服务器正常,同一个客户端IP地址总是访问同一台服务器。如果哈希的结 果随可用服务器数量而变化,那么有的客户端会定向到不同的服务器。该算法一般用于不能插入cookie的TCP模式。它还可以用于广域网上,为拒绝使用会 话cookie的客户端提供最有效的粘连。该算法默认是静态的,所以运行时修改服务器的权重是无效的,但是算法会根据\的变化做调 整。

uri 对URI左端(问号之前)进行哈希,用可用服务器的权重总数除以哈希值,根据结果进行分配。只要服务器正常,同一个URI地址总是访问同一台服务器。一般 用于代理缓

存和反病毒代理,以最大限度的提高缓存的命中率。该算法只能用于HTTP后端。该算法默认是静态的,所以运行时修改服务器的权重是无效的,但是 算法会根据\的变化做调整。

算法支持两个可选参数\和 \, 都是后跟正整数。“len”参数指定算法只处理URI从头开始的字符数,据此计算哈希。因为大多URI以\开头,所以\最好不要设为 1。\参数指定URI中最大的路径深度,据此计算哈希。请求中的每个斜线为一级。如果同时声明了这两个参数,则截取URI时必须同时满足。

url_param 在HTTP GET请求的查询串中查找中指定的URL参数。

若使用了修饰符\,如果在URL问号('?')后面的查询串中找不到参数,就会搜索HTTP POST 请求实体。或者在指定的一些字节后面尝试搜索消息体。如果搜索不到实体, 则使用round robin算法。例如,假设客户端总是在前128个字节发送LB参数,就可以指定它。默认为48。如果到达网关的字节数量不够,实体数据是检索不到的,至 少有:(default/max_wait, Content-Length or first chunk length)。如果Content-Length没有或为0,就不需要等待客户端发送更多的数据。当Content-Length有值且大 于,则等待仅限于,并假设有足够的数据用于搜索参数的存在。万一Transfer- Encoding被用了,则只能检查第一个块。如果参数值被块边界分隔开,则只能随机均衡负载了。

如果参数后面跟着 ('=') 和一个值,则可以根据这个值进行哈希,用可用服务器的权重总数除以哈希值,根据结果进行分配。

还可用于跟踪请求中的用户身份,只要服务器正常,同一个用户ID的请求总是发给同一台服务器。如果没有参数或参数没有值,则使用轮询算法。该算法只用于 HTTP后端。该算法默认是静态的,所以运行时修改服务器的权重是无效的,但是算法会根据\的变化做调整。

hdr(name) 在每个HTTP请求中查找HTTP头。与ACL函数'hdr()'一样。括号括起来的头名字不区分大小写。如果缺少头或头没有任何值,则使用roundrobin算法代替。启用参数'use_domain_only',哈希算法将只用于一些类似'Host'的特定头的主域部分。例如主机值\, 则只考虑 \。该算法默认是静态的,所以运行时修改服务器的权重是无效的,但是算法会根据\的变化做调整。

rdp-cookie

rdp-cookie(name)

为每个进来的TCP请求查询并哈希RDP cookie (或“mstshash”如果省略) 。与ACL函数 'req_rdp_cookie()'一样,name不区分大小写。该机制用于退化的持久模式,可以使同一个用户(或同一个会话ID)总是发送给同一台服务器。如果没有cookie, 则使用roundrobin算法代替。必须注意该声明要生效,前端必须确保在请求缓冲中已经有RDP cookie,所以必须使用规则tcp-request content accept' 和ACL 'req_rdp_cookie_cnt'相结合。该算法默认是静态的,所以运行时修改服务器的权重是无效的,但是算法会根据\的变化做调整。

是用于一些算法的可选参数列表,目前只有\和 \用到,例如:

balance uri [len ] [depth ]

balance url_param [check_post []]

如果没有其他算法、模式或选项的设置,后端的负载均衡算法默认为roundrobin。每个后端只能设置一种。

附录II

1 与nginx代理的对比

Nginx的优点:

1. 2. 3. 4. 5.

性能好,可以负载超过1万的并发。 功能多,除了负载均衡,还能作Web服务器,而且可以通过Geo模块来实现流量分配。 社区活跃,第三方补丁和模块很多 支持gzip proxy

工作在网络的7层之上,可以针对http应用做一些分流的策略,比如针对域名、目录结构,它的正则规则比HAProxy更为强大和灵活

6. Nginx对网络稳定性的依赖非常小,理论上能ping通就就能进行负载功能

7. Nginx安装和配置比较简单,测试起来比较方便,它基本能把错误用日志打印出来。 8. Nginx现在作为Web反向加速缓存越来越成熟了,速度比传统的Squid服务器更快,可

以考虑用其作为反向代理加速器。

9. 、Nginx可作为中层反向代理使用,这一层面Nginx基本上无对手,唯一可以对比Nginx

的就只有lighttpd了,不过lighttpd目前还没有做到Nginx完全的功能,配置也不那么清晰易读,社区资料也远远没Nginx活跃。

10. Nginx也可作为静态网页和图片服务器,这方面的性能也无对手.

Nginx的缺点:

1. 不支持session保持。(三方模块开始支持)

2. 对后端realserver的健康检查功能效果不好。而且只支持通过端口来检测,不支持通过

url来检测。

3. nginx对big request header的支持不是很好,如果client_header_buffer_size 设置的比较

小,就会返回400 bad request页面。

4. 负载均衡策略简单, 第三方提过的但也不全, 不支持url均衡. 5. 不支持tcp代理与均衡.

Haproxy的优点:

1. 支持session保持,同时支持通过获取指定的url来检测后端服务器的状态。

2. 本身就只是一款负载均衡软件;单纯从效率上来讲HAProxy会比Nginx有更出色的负载

均衡速度,在并发处理上也是优于Nginx的。 3. 支持tcp模式的负载均衡。比如可以给mysql的从服务器集群和邮件服务器做负载均衡。 4. HAProxy负载均衡策略非常多,HAProxy的负载均衡算法现在具体有8种.

缺点:

1. 不支持虚拟主机(现在开始支持).

联系合同范文客服:xxxxx#qq.com(#替换为@)