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