HAProxy:防止粘性到备份服务器

时间:2018-05-18 09:51:39

标签: haproxy

我遇到了HAProxy(1.8)的配置问题。

上下文:

  • 在HAProxy配置中,我在后端有几个服务器,在其他服务器关闭时有一个额外的备用服务器。
  • 一旦客户端从服务器获得答案,它必须坚持使用此服务器进行下一次查询。
  • 由于某些充分的理由,我无法使用cookie来解决这个问题,我不得不使用一个简笔表。

问题:

  • 当每个“普通”服务器都关闭时,客户端会按预期重定向到备份服务器。
  • 但是,只需在客户端和备份服务器的ID之间建立关联,就可以填充棒表。
  • 当每个“普通”服务器都回来时,粘贴表中存在并与备份服务器的ID相关联的客户端将继续被重定向到备份服务器而不是正常服务器!

这真让我心烦意乱......

所以我的问题是:如何防止HAProxy将客户端粘贴到后端的备份服务器上?

请在下面找到配置示例:

defaults
  option redispatch

frontend fe_test
  bind 127.0.0.1:8081
  stick-table type ip size 1m expire 1h
  acl acl_test  hdr(host) -i whatever.domain.com
  ...
  use_backend be_test if acl_test
  ...

backend be_test
  mode http
  balance roundrobin
  stick on hdr(X-Real-IP) table fe_test
  option httpchk GET /check
  server test-01 server-01.lan:8080 check
  server test-02 server-02.lan:8080 check
  server maintenance 127.0.0.1:8085 backup

(我已经尝试为备份服务器添加较低的权重,但它没有解决此问题。)

我在文档中读到“stick-on”关键字有一些“if / unless”选项,也许我可以用它来编写基于后端服务器名称的条件,但我对语法没有任何线索使用,或者甚至是可能的。

欢迎任何想法!

1 个答案:

答案 0 :(得分:2)

我这么傻!我对棒表配置非常着迷,我没想到要查看服务器选项......

有一个简单的关键字可以完美地解决我的问题:不粘

  

永远不要将分配给此服务器的连接添加到操纵杆表。这个   可以与备份一起使用以确保粘贴表   备份服务器已禁用持久性。

所以我的配置示例的最后一行简单地变成了:

server maintenance 127.0.0.1:8085 backup non-stick

......现在一切都按照我的预期运作了。