跳转至

Haproxy URL Hash


2013-05-04 by dongnan

开始之前

Haproxy 的 url hash 算法将相同的uri总是转到同一台服务器上。 这种方式的好处,是可以用来增加上游服务器的缓存命中率。

举个栗子

使用roundrobin的方式,请求将平均分给cache1cache2服务器:

使用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架构
回到页面顶部