如何在服务器重启过程中避免超时

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

有两个networking服务器。 当我closures一个盒子的Apache,一切都很好。 当浏览器尝试去Apache的Web服务器closures,它会得到一个连接拒绝,它会自动尝试另一个。

但是,重新启动时,我遇到了问题。 当我重新启动服务器,而不是连接被拒绝,浏览器现在等待超时导致一个非常缓慢的网站,直到服务器恢复。

有没有办法设置networking(或CentOS),使得在重新启动期间,IP继续拒绝,而不是花费很长时间来超时?

作为一个特别的解决方法(只在没有负载均衡的情况下),你可以伴随服务器的重启,在其下一跳(交换机,路由器,防火墙)之一进行适当的configuration,

  1. 停止阿帕奇
  2. 使下一跳响应明确的“不可达”消息
  3. 重新启动服务器
  4. 撤消更改第2步

具体而言,第2步可能包含以下内容之一

  • 将Web服务器IP作为辅助IP地址添加到其一个接口(假设没有运行Web服务器)
  • 或者创build一个静态arp条目(即ip到mac的转换),它指的是一个不运行web服务器的runnnng主机
  • 或者使单个IP不可路由
  • 或者添加一个防火墙规则来拒绝(不丢弃!)端口80stream量到有问题的IP
  • 或修改您的web服务器的现有SNAT条目,以引用正在运行的主机,但不是web服务器
  • 或者将具有相同MAC地址的虚拟主机附加到相同的LAN上

也可能存在其他变体。 当然有一个重点: 不要把自己踢在脚上! 例如,

  • 引入这种错误configuration时,您可能会意外地破坏其他事情
  • 您可能忘记撤消更改
  • 您的服务器可能无法正确closures现有连接
  • 如果由于这种方法无法立即看到互联网,您重新启动的服务器可能会不高兴(它可能迫切希望检查更新,许可证或时间,或…)

另外,我没有testing任何这些方法,我只是想出了他们,认为他们应该工作。

像Zen-Loadbalancer或HA-Proxy一样使用负载均衡软件。

在那里,你可以configuration一个健康检查,在你的Web服务器上打开或者打开一个文件,并且如果这个文件不可用,则将它们从Load-Balancing中移除。

DNS循环不是为这样的事情做的,因为你的DNS不知道服务器是否不可用。 DNS将请求交给每个ip。

只是为了解释:DNS循环不是为您使用它的目的而devise的。 它只是告诉DNS以交替的方式分发可用的IP地址; 在发生故障的服务器和DNS之间没有任何反馈(如果存在的话,由于DNS的devise方式,时间问题将会阻止它得到很大的帮助)。 因此,您可以使用DNS-Round-Robin进行负载平衡(以有限的方式),但不能用于故障转移。

看到这样的引述:“如果列表中某个地址的服务失败,DNS将继续发送该地址,客户端仍将尝试访问不可用的服务。” 来自http://en.wikipedia.org/wiki/Round-robin_DNS

您closuresnetworking服务器没有任何问题的原因可能是,您的浏览器粘贴到可用的networking服务器,可能是因为某些会话cookie等。 您应该尝试使用全新的会话多次closuresWeb服务器的实验,然后您将遇到与重新启动相同的问题。

除此之外,我会第二个答案已经给:负载均衡解决scheme将做你想要的。