我有一个 L4 ipvs 负载平衡器和 L7 特使平衡器设置。假设我的一个 L4 平衡器出现故障,并且由于一致的散列,现在由另一个 L4 平衡器处理(感谢 BGP)的流量被代理到同一个 L7 节点。
这应该没有任何问题,我认为这是一个常见的设置。
问题在于长时间运行的连接。当新的 L4 节点接收到流量(只是数据 - ACK/PUSH 数据包)并且该节点没有收到 SYN 数据包时,该节点只是将 RST 数据包发送到终止连接的客户端。下图说明了这一点。
这不应该发生,我的问题是,有没有办法(sysctl 配置或其他东西)是这个原因?我知道我也许可以使用 iptables 丢弃 RST 数据包,但这听起来不对。
这个特定问题实际上有一个 sysctl 变量
net.ipv4.vs.sloppy_tcp
(https://lore.kernel.org/patchwork/patch/386081/?fbclid=IwAR17t0jEvRSlvZFch1Lz_CDMjYOzUluuNGQmiyKequZK1Vq4kI75vezWEGs)可以解决这个问题。非常感谢 Patric Shuff,他帮助我解决了这个问题(关于这个主题的精彩演示 - https://www.usenix.org/conference/lisa16/conference-program/presentation/shuff)。