【问题标题】:HAProxy : Prevent stickiness to a backup serverHAProxy:防止对备份服务器的粘性
【发布时间】:2018-05-18 18:20:26
【问题描述】:

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

上下文:

  • 在 HAProxy 配置中,我在一个后端有多个服务器,以及一个额外的备份服务器,以防其他服务器出现故障。
  • 一旦客户端从服务器获得答案,它必须坚持到该服务器进行下一次查询。
  • 出于某些充分的原因,我不能使用 cookie 来解决这个问题,而我不得不使用stick-table。

问题:

  • 当每台“正常”服务器停机时,客户端会按预期重定向到备用服务器。
  • 但是,stick-table 然后填充了客户端和备份服务器 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”选项,也许我可以使用它来根据后端服务器名称编写条件,但我不知道语法使用,或者即使可能。

欢迎提出任何想法!

【问题讨论】:

    标签: haproxy


    【解决方案1】:

    我太傻了!我对棒表配置非常着迷,以至于我没想到要查看服务器选项...

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

    永远不要将分配给该服务器的连接添加到stick-table。这个 可以与备份一起使用,以确保粘表 备份服务器的持久性已禁用。

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

    server maintenance 127.0.0.1:8085 backup non-stick
    

    ...现在一切正常。

    【讨论】:

    • 如果我可以投票 30 次,我会:)。我做了同样的事情。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-05
    • 1970-01-01
    • 2016-02-25
    • 1970-01-01
    • 2011-10-31
    相关资源
    最近更新 更多