如何避免服务器重启时超时

如何避免服务器重启时超时

我在使用 DNS 循环进行故障转移的站点遇到了问题。

有两个 Web 服务器。当我关闭其中一个服务器上的 Apache 时,一切都正常。当浏览器尝试访问关闭了 Apache 的 Web 服务器时,它会被拒绝连接,并自动尝试另一个服务器。

但是,当我重启服务器时,我遇到了问题。当我重启服务器时,浏览器不再拒绝连接,而是等待超时,导致网站速度非常慢,直到服务器恢复。

有没有办法设置网络(或 CentOS),以便在重新启动期间,该 IP 继续拒绝而不是花很长时间超时?

答案1

作为特别指定解决方法(仅在遗憾没有负载均衡器的情况下),你可以在服务器重启时在其下一跳(交换机、路由器、防火墙)处进行适当的配置,例如,

  1. 停止 Apache
  2. 让下一跳以明确的“不可达”消息做出响应
  3. 重启服务器
  4. 撤消第 2 步所做的更改

具体来说,步骤 2 可能包括以下内容之一

  • 将 Web 服务器 IP 作为辅助 IP 地址添加到其中一个接口(假设其上没有运行 Web 服务器)
  • 或者创建一个静态 arp 条目(即 ip 到 mac 的转换),指向一个没有运行 web 服务器的正在运行的主机
  • 或者使该 IP 不可路由
  • 或者添加防火墙规则来拒绝(不是丢弃!)到相关 IP 的 80 端口流量
  • 或者修改 Web 服务器的现有 SNAT 条目,使其指向正在运行但不是 Web 服务器的主机
  • 或者将具有相同 MAC 地址的虚拟主机连接到同一个局域网

可能还有其他变体。当然,有一点很重要:别搬起石头砸自己的脚!例如,

  • 引入此类错误配置可能会意外破坏其他功能
  • 您可能会忘记撤消更改
  • 你的服务器可能无法正确关闭现有连接
  • 如果由于这种方法而无法立即看到互联网,您重新启动的服务器可能会不高兴(它可能迫切想要检查更新、许可证、时间等......)

另外,我自己并没有测试过这些方法,我只是想出了这些方法,并且认为它们应该工作。

答案2

使用带有健康检查的负载均衡软件,例如Zen-Loadbalancer或者HA代理

您可以在那里配置一个健康检查,它会 ping 或打开您 Web 服务器上的一个文件,如果该文件不可用,则将其从负载平衡中删除。

DNS 循环不适用于此类情况,因为您的 DNS 不知道服务器是否可用。DNS 会交替向每个 IP 发出请求。

答案3

解释一下:DNS 轮询不是针对您使用它的目的而设计的。它只是告诉 DNS 以交替的方式分发可用的 IP 地址;故障服务器和 DNS 之间没有反馈(如果有,由于 DNS 的设计方式,时间问题会阻止它提供太多帮助)。因此,您可以将 DNS-Round-Robin 用于负载平衡(以有限的方式),但不能用于故障转移。

请参阅此引文:“如果列表中某个地址上的服务发生故障,DNS 将继续分发该地址,而客户端仍将尝试访问无法运行的服务。”来自 http://en.wikipedia.org/wiki/Round-robin_DNS

关闭网络服务器后您没有遇到任何问题的原因可能是,您的浏览器会坚持使用正常运行的网络服务器,这可能是因为某些会话 cookie 或类似原因。您应该尝试多次关闭网络服务器,使用全新的会话 - 您应该会遇到与重新启动相同的问题。

除此之外,我赞同已经给出的答案:负载均衡器解决方案可以满足您的要求。

相关内容