我有两台服务器,我们称它们为 Milo 和 Otis。现在,Milo 和 Otis 被设置为一对主动-被动高可用性服务器,其中 Milo 通常为主服务器,而 Otis 则待命等待 Milo 发生不太可能发生的故障,届时 Otis 将接管共享虚拟 IP。我有一个问题,即在故障期间 SSL 连接会发生什么。
考虑以下:
- 一些客户端(我)与 Milo 建立了 SSL 连接。
- SSL 连接设置为保持活动状态,因此假设通过 SSL 连接请求网页。页面已完全下载,连接已打开,准备处理另一个请求(假设是 css 文件之类的资产)。
- 在开始请求 css 文件之前,Milo 经历了一些灾难性的故障,现在 Otis 已经接管了。
- 现在我想要请求 css 文件,会发生什么情况?我仍然认为我与 Milo 建立了开放连接,但虚拟 IP 现在指向 Otis。
Otis 是否会自动获取 Milo 的 SSL 会话?我的浏览器是否开始与 Otis 通信,并且 Otis 说“嘿,我们应该先握手。”?任何有关此问题的评论/答案都将不胜感激。
答案1
发生故障转移时,当前活动的连接将中断。不过,这将发生在 TCP 级别,因此 SSL/TLS 甚至不会进入现场。TCP 连接要求两个端点都知道连接并拥有正确的信息(序列号、窗口大小等),因此当 IP 发生故障转移时,备份计算机将不知道主计算机已建立的 TCP 连接。当备份计算机收到属于先前 TCP 连接的数据包时,它将回复 RST 数据包,这将导致客户端关闭连接。
即使恢复了 TCP 连接,SSL/TLS 也会出现类似的情况。每个会话都需要两端的状态,包括会话密钥(这实际上是保护应用程序数据的)。备份机器不会有此会话状态,因此现有会话将被终止。