改变服务器的IP,停机时间为零

我正在更换我的网站example.org的服务器。 旧服务器的IP不能用于新服务器。 我想以零停机时间replace旧的服务器。

在example.org上运行着许多不同的服务,它不仅仅是一个web服务器应用程序,它也是一个邮件服务器,git服务器,笨拙的服务器等等。

我的想法是:

  1. 获取服务器的数据同步,以便新的服务器具有旧服务器的相同副本的数据
  2. 更新域名以使example.org指向新的IP
  3. 在旧服务器上,设置iptables规则,将http,https,smtp等所有stream量redirect到新服务器。 我不确定使用哪个IP规则,所以可以使用一些帮助。

现在,这听起来不错,但我觉得会有SSL的问题。

例如,如果用户Alice在浏览器中导航到example.org并且parsing为旧IP,由于DNS更改还没有传播给她,然后旧IP将她redirect到新IP,所以我认为她浏览器会吓坏了。 它会看到新的IP使用SSL证书example.org,而example.org明显parsing为一个不同的IP,旧的IP,因为DNScaching不更新为Alice。 所以Alice会在浏览器中看到一个巨大的红色SSL警告,说新的IP不是example.org。

邮件服务器(SSL smtp)和example.org上运行的其他服务也会出现类似的问题。 我如何解决这个问题?

一个理想的解决scheme是以某种方式使用iptables,以便旧服务器代理新服务器,而不是将用户redirect到新服务器。 这样DNScaching没有更新的用户就会这样通信:[user] <—> [old server] <—> [new server]。 他们甚至不知道新服务器是否存在,对于他们来说,看起来就像他们与旧服务器通常的通信。 我这个代理解决scheme唯一的问题是,新服务器将看到旧服务器的源IP,而不是用户的。 这可能会破坏很多事情,例如Fail2Ban可能会阻止旧服务器的IP 10分钟,因为有些用户几次input不正确的邮件密码,实质上拒绝将邮件服务器访问到没有更新DNS的所有其他用户使用代理。

最简单的方法是不通过旧服务器进行代理:

  1. 降低TTL 300秒。
  2. 至less等待旧的TTLcaching到期。
  3. 当stream量较less时更改IP。
  4. 修改TTL回到其原始值。

您的最大停机时间现在非常低。

为了您的顾虑:

  • SSL / TLS不关心IP地址,而只关心主机名。 甚至有可能拥有一个多IP集群为相同的站点提供相同的证书。 没有任何浏览器的问题。
  • Fail2ban具有白名单 :使用ignoreip =为您的旧服务器设置例外。
  • 对于这种情况,您不需要实时复制SQL。 提前移动数据库,并使旧服务器上的站点使用来自新服务器的SQL。
  • 不要代理SMTP。 即使在DNS更改之前,您也可以通过旧服务器将所有邮件中继到新邮件。 只需将旧服务器configuration为辅助MX,并使新服务器信任它即可。

你可以看看SSH隧道发送您的服务请求到新的服务器。 我已经看到这个主机名parsing到旧的服务器,然后通过SSH转发到新的服务器的stream量。 如果在新服务器上旧的服务器IP被忽略,那么fail2ban应该没有问题。