首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在HAProxy LoadBalancer中使用自定义散列函数

在HAProxy LoadBalancer中使用自定义散列函数
EN

Stack Overflow用户
提问于 2022-05-05 15:35:51
回答 1查看 478关注 0票数 2

我在前端使用HAProxy配置了一个负载均衡器,在后端我有4个服务器使用Apache服务器为请求提供服务。

代码语言:javascript
复制
#HAProxy for web servers
frontend web-frontend
  bind IPADDRESS_LB:80
  mode http
  default_backend web-backend

backend web-backend
  balance roundrobin
  server web-server1 IPADDRESS1:80 check
  server web-server2 IPADDRESS2:80 check
  server web-server3 IPADDRESS3:80 check
  server web-server4 IPADDRESS4:80 check

我的请求由两台机器中的任何一台以循环机制提供。但是现在我想实现我自己的算法,根据请求参数发送请求,例如IP。

就像实现我自己的哈希函数一样,基于这个结果,我可以将请求路由到任何一个后端服务器。

我怎么能这么做?

EN

回答 1

Stack Overflow用户

发布于 2022-05-17 12:14:15

您可以参数化在散列中使用什么(示例来源:HaProxy的博客)

在您的示例中,只需使用balance source根据源(IP)进行散列:

代码语言:javascript
复制
#HAProxy for web servers
frontend web-frontend
  bind IPADDRESS_LB:80
  mode http
  default_backend web-backend

backend web-backend
  balance source
  hash-type consistent
  server web-server1 IPADDRESS1:80 check
  server web-server2 IPADDRESS2:80 check
  server web-server3 IPADDRESS3:80 check
  server web-server4 IPADDRESS4:80 check

(hash-type consistent确保不同的IP散列给出相同的结果)

或者基于名为ip的URL参数:

代码语言:javascript
复制
#HAProxy for web servers
frontend web-frontend
  bind IPADDRESS_LB:80
  mode http
  default_backend web-backend

backend web-backend
  balance url_param ip
  hash-type consistent
  server web-server1 IPADDRESS1:80 check
  server web-server2 IPADDRESS2:80 check
  server web-server3 IPADDRESS3:80 check
  server web-server4 IPADDRESS4:80 check

若要将哈希基于多个参数,可以:

  1. 向请求中添加一个标头,其中包含您想要的哈希值
  2. 使用此标头进行平衡。

来自HaProxy的博客的示例:

代码语言:javascript
复制
  backend bk_static
    http-request set-header X-LB %[req.hdr(Host),lower]%[req.uri,lower]
    balance hdr(X-LB)
    hash-type consistent
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72129880

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档