代码之家  ›  专栏  ›  技术社区  ›  Flo

haproxy:防止粘附到备份服务器

  •  1
  • Flo  · 技术社区  · 7 年前

    我面临一个配置问题与haproxy(1.8)。

    上下文:

    • 在haproxy配置中,我在后端有几个服务器,在其他服务器关闭的情况下还有一个额外的备份服务器。
    • 一旦客户机从服务器得到了一个答案,它就必须坚持使用这个服务器进行下一次查询。
    • 出于一些好的原因,我不能用饼干来解决这个问题,我不得不用一个小桌子来代替。

    问题:

    • 当每个“正常”服务器都关闭时,客户机将按预期重定向到备份服务器。
    • 但是,存储条表中填充了客户机和备份服务器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/except”选项,也许我可以使用它根据后端服务器名称编写条件,但我对要使用的语法一无所知,甚至可能。

    欢迎有任何想法!

    1 回复  |  直到 7 年前
        1
  •  2
  •   Flo    7 年前

    我真傻!我太沉迷于StickTable配置了,以至于我不想查看服务器选项…

    有一个简单的关键词完美地解决了我的问题:不粘

    切勿将分配给此服务器的连接添加到stick table。这个 可与备份一起使用,以确保粘贴台 备份服务器禁用持久性。

    因此,我的配置示例的最后一行只是:

    server maintenance 127.0.0.1:8085 backup non-stick
    

    …现在一切都如我所料。