当任何 haproxy 后端恢复正常时,终止与所有后端的 tcp 连接

当任何 haproxy 后端恢复正常时,终止与所有后端的 tcp 连接

我在 HAProxy 后面有 2 个节点的 postgres 集群,这两个节点中的任何一个都可以是主节点和副本节点(角色由单独的系统 - stolon 管理)。我想在主 postgres 节点恢复时强制 HAProxy 重置 tcp 连接。我知道有标记关机备份会话它可以实现重置连接,但是有两个要求:

  • 它关闭标记为备份的服务器上的会话。
  • 仅当标记的服务器未处于备份状态时才会关闭会话。

在我的设置中,由于两个节点中的任何一个都可以是主节点或备份节点(即我没有将节点 A 静态分配为主节点,将节点 B 静态分配为副本节点),因此我无法通过设置 on-marked-up shutdown-backup-sessions 来实现它

当任何后端节点被标记时,还有其他方法可以重置所有后端连接吗?

如能得到任何帮助或指点,我们将非常感激。

答案1

这可能会有帮助https://www.haproxy.com/blog/introduction-to-haproxy-stick-tables/#making-decisions-based-on-stick-tables

实际上他们使用的是粘性表,并且只会存储单个条目。来自同一文档的一些参考资料

backend mysql
    mode tcp
    stick-table type integer size 1 expire 1d
    stick on int(1)
    server primary 192.168.122.60:3306 check on-marked-down shutdown-sessions
    server backup 192.168.122.61:3306 check backup on-marked-down shutdown-sessions

on-marked-down shutdown-sessions 会导致 HAproxy 在后端发生故障时关闭与后端的所有现有连接。通常,HAProxy 允许现有连接完成,如果连接继续工作,则可能导致主键重复,如果连接停止工作,则可能导致查询超时。

希望这会有所帮助,请根据您的经验随意为问题添加更多细节。

相关内容