当服务器 IP 更改时,现有 TCP(例如 http/mysql)连接是否保持运行

Luk*_*ins 3 tcpip nginx tcp haproxy keepalived

我们有一些 PHP-FPM 服务器,当它们需要数据库连接时,它们会连接到 HAProxy 服务器,该服务器会选择要使用的数据库服务器并打开连接。当我们想要对 HAProxy 服务器进行一些维护(例如需要重新启动 HAProxy 的配置更改)时,过程如下:

  1. 关闭 HAProxy 服务器上的 Keepalived
  2. 等待浮动IP转移到备份HAProxy服务器(也运行Keepalived)
  3. 等到 HAProxy stats 只报告一个连接(我们检查有多少连接)
  4. 重启HAProxy
  5. 重启Keepalived

当第 2 步发生时,此时打开的 mysql 连接会发生什么?根据此 TCP 会话和 IP 更改问题,连接将被丢弃。真的是这样吗?如果是这样,可以采取什么措施来防止这种情况发生?是否可以以某种方式强制连接使用服务器的主要(非浮动)IP?

我们也有一个类似的设置,两个 Nginx 服务器上运行了 Keepalived,我们计划执行相同的过程。如果我们这样做,同样的问题也适用 - 当 IP 移动到另一台服务器时,现有的 http 连接会发生什么?

我感谢您的帮助。

Tom*_*Tom 5

他们断开连接。TCP 没有用于更改 IP 地址的协议部分,因此客户端不会知道它已经神奇地更改了。必须建立新的连接。

  • 您的信息有点过时了。2013 年 1 月发布的 RFC 6824 确实允许 TCP 在 IP 地址更改时保持连接有效。参考实现作为 Linux 的补丁存在,iOS 7 也支持它。 (2认同)
  • 不是关于 webapp 和数据库之间的连接的问题吗?在这种情况下,我希望一方控制连接的两端,在这种情况下 MPTCP 可能是一种选择。 (2认同)