Haproxy URL Hash
2013-05-04 by dongnan
开始之前
Haproxy 的 url hash
算法将相同的uri
总是转到同一台服务器上。
这种方式的好处,是可以用来增加上游服务器的缓存命中率。
举个栗子
使用roundrobin
的方式,请求将平均分给cache1
与cache2
服务器:
使用uri hash
的方式,请求相同的url
全部转发到了cache2
服务器:
Haproxy 配置文件
# 其它配置省略
backend cache.test.com
option forwardfor
balance uri len 15 #url hash
#option httpchk HEAD /check.html
server server1 10.0.100.73:80 check inter 2000 rise 3 fall 3 weight 3
server server2 10.0.100.75:80 check inter 2000 rise 3 fall 3 weight 3
对URI
左端(问号之前)进行哈希,用可用服务器的权重总数除以哈希值,根据结果进行分配。
只要服务器正常,同一个URI地址总是访问同一台服务器,一般用于代理缓存,以最大限度的提高缓存的命中率。
该算法只能用于HTTP
后端。该算法默认是静态的,所以运行时修改服务器的权重是无效的,但是算法会根据hash-type
的变化做调整。
算法支持两个可选参数:
len
参数指定算法只处理URI
从头开始的字符数,据此计算哈希。因为大多URI
以/
开头,所以len
最好不要设为1
。depth
参数指定URI
中最大的路径深度,据此计算哈希。请求中的每个斜线为一级。如果同时声明了这两个参数,则截取URI
时必须同时满足。
参考
- HAProxy 配置手册 4.2 balance 相关
- Haproxy基于uri hash 选择后端cache server
- 图片服务器的url hash架构