假设我在 Linux VPS 机器上运行了一个 Web 应用程序。为了应用内核升级和一些安全修复,我需要重新启动服务器。在此期间,服务器无法访问。我想知道此时是否可以向用户显示维护通知(通过 HTTP)。通知将由 PHP 脚本发送,该脚本将处理以 HTML 格式、图片或 Web 服务 XML 向客户端提供维护通知的请求。或者,如果可能的话,提供部分运行的服务。
为了实现这一点,我需要什么样的硬件和软件(请给出最低预算,我希望典型的 VPS/专用托管服务提供商可以支持这些)?
现在我已经知道我可以使用像 squid 这样的软件在 2 个 HTTP 服务器之间提供负载平衡。但是如果 squid 本身需要升级,或者托管 squid 的 CentOS 服务器需要升级,我该怎么办?另外,我实际上不需要负载平衡,如果我必须手动“切换”到维护模式,那就没问题了。有什么想法吗?
提前致谢。
答案1
如果对您来说拥有这么长的正常运行时间很重要(即在不到 5 分钟的服务器重启时间内),那么我建议您设置第二个虚拟服务器。它可以非常小,运行 lighttp 和单个静态页面 - 或者它可以是您的实时网站的副本。
然后设置心跳2在两台服务器上,并给他们共享 IP 地址主机启动时,它会响应该地址,但如果主机离线,IP 地址将自动在第二台机器上启动数秒内。
如果你决定在两台服务器上都放置网站的完整版本,我会安装董事此外心跳2这是一个负载平衡器应用程序,将运行在与 Web 服务器相同的机器上。在本例中甚至不会有几秒钟的停机时间当任一服务器发生故障时。
然后,如果你想要更高级一点,你可以从nfs 共享在另一台服务器(或服务器集群)上,这样就不需要在网络服务器之间进行同步或重复。
答案2
我们通常进行的升级是使用升级后的组件(软件、硬件等)构建一台新机器。然后,我们将生产数据加载到系统并进行全面测试。准备就绪后,我们会重新加载最新的生产数据,并将 DNS 指向新机器。
这样,新旧盒子之间就可以保持持续的可用性。
答案3
如果您需要在需要重新启动的服务器上进行升级,则至少需要一台备用计算机来托管临时网站,而原始计算机处于离线状态。一种选择是在原始网站处于离线状态时使用具有较低 TTL 的 DNS 指向新服务器。
另一个像您所说的方法是使用 squid 进行代理。我相信 squid 也可以在具有多个 squid 服务器的循环 DNS 情况下工作。
但是,如果您选择这样做,任何 DNS 传播都可能被下游服务器缓存。您可以尝试使用 30 秒 TTL 或非常小的 TTL 来缓解这种情况,但某些 DNS 服务器会忽略这一点,并仍然将值缓存更长时间。
如果你无论如何都要切换到维护模式,为什么不先等待 5 分钟重新启动,然后提前向用户发送通知呢?除了极高可用性的情况外,这在所有情况下都应该有效。
答案4
查看 Zoneedit DNS。非常他们以低成本提供 DNS 故障转移服务。