我正在更换我的网站example.org的服务器。 旧服务器的IP不能用于新服务器。 我想以零停机时间replace旧的服务器。
在example.org上运行着许多不同的服务,它不仅仅是一个web服务器应用程序,它也是一个邮件服务器,git服务器,笨拙的服务器等等。
我的想法是:
现在,这听起来不错,但我觉得会有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的所有其他用户使用代理。
最简单的方法是不通过旧服务器进行代理:
TTL 300秒。 TTLcaching到期。 TTL回到其原始值。 您的最大停机时间现在非常低。
为了您的顾虑:
ignoreip =为您的旧服务器设置例外。 你可以看看SSH隧道发送您的服务请求到新的服务器。 我已经看到这个主机名parsing到旧的服务器,然后通过SSH转发到新的服务器的stream量。 如果在新服务器上旧的服务器IP被忽略,那么fail2ban应该没有问题。