我在 HAProxy 后面有 2 个节点的 postgres 集群,这两个节点中的任何一个都可以是主节点和副本节点(角色由单独的系统 - stolon 管理)。我想在主 postgres 节点恢复时强制 HAProxy 重置 tcp 连接。我知道有标记关机备份会话它可以实现重置连接,但是有两个要求:
- 它关闭标记为备份的服务器上的会话。
- 仅当标记的服务器未处于备份状态时才会关闭会话。
在我的设置中,由于两个节点中的任何一个都可以是主节点或备份节点(即我没有将节点 A 静态分配为主节点,将节点 B 静态分配为副本节点),因此我无法通过设置 on-marked-up shutdown-backup-sessions 来实现它
当任何后端节点被标记时,还有其他方法可以重置所有后端连接吗?
如能得到任何帮助或指点,我们将非常感激。
答案1
实际上他们使用的是粘性表,并且只会存储单个条目。来自同一文档的一些参考资料
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 允许现有连接完成,如果连接继续工作,则可能导致主键重复,如果连接停止工作,则可能导致查询超时。
希望这会有所帮助,请根据您的经验随意为问题添加更多细节。