消除网络服务器的单点故障?

消除网络服务器的单点故障?

我知道在 DNS 中,每个 DNS 服务器都会被尝试,看它们是否会响应

我知道,如果发生故障,电子邮件将转到列表中的下一个,或者将邮件保留一段时间

据我所知,在 Web 服务器中,浏览器会获取其中一个 Web 服务器 IP 地址并尝试,如果失败,则会放弃。这是正确的吗?如果是这样,那么将流量从失败的 IP 地址转移出去的唯一方法是使用 DNS 服务器,而且即使这样也不会立即更新。

答案1

如果您根本不希望出现单点故障,则需要进行全局服务器负载平衡——您显然不能依赖单个数据中心,即使使用冗余 BGP 配置,您的 BGP 表也会构成单点故障,如果有人推送错误的配置,就会造成混乱。

您要做的是配置 DNS 以为您的域名的 A 记录通告多个 IP 地址,指向位于不同数据中心(最好位于不同城市)的站点副本,然后浏览器将选择一个(通常是随机的,但请注意 Windows Vista,它实现了 RFC3484 的愚蠢部分,因此不是随机的),并存储其他地址。根据浏览器的不同,如果浏览器使用的地址不可用,它通常会使用其他地址之一。您的 DNS 服务器必须持续监控所有站点并停止通告任何出现故障的站点。它们还需要非常短的 TTL。有硬件解决方案可以解决此问题 - 例如 F5 的 BigIP 设备。

您还需要在数据中心之间实时复制数据库、文件和用户会话状态的方法。

显然,您还需要从所有 ISP 获取网络图和供应商列表,以确保所有网络路由在地理上完全不同,并且 ISP 不依赖相同的上游供应商。此外,可能还需要确保它们不在同一电网上。

有关全局服务器负载平衡的更多信息请参见此处(尽管它有点旧且过时):http://www.tenereillo.com/GSLBPageOfShame.htm

您的故障转移速度不会像 BGP 故障转移那么快,但您无法因单个错误的 BGP 配置而完全瘫痪您的站点。您可能会弄乱单个 DNS 服务器或数据中心的配置,但这不会完全瘫痪您的站点(除非您将 DNS 更新自动推送到所有 DNS 服务器)。

答案2

相反,这是确切地负载均衡器的作用是什么?我们在工作中使用硬件负载均衡器(来自 F5 网络)。我们有一个 IP 地址,负载均衡器将连接转发到其后面的多个 Web 服务器中的任何一个。

StackOverflow Networks(您的主机)使用软件负载均衡器,并且他们已经在博客上提到了这一点

我们的服务器非常好,因为它们之间共享连接状态。因此,如果主服务器挂了,另一个服务器可以从另一个服务器停止的地方继续工作,并且所有现有连接都会保持连接。

不过,应用程序会话状态需要由 Web 应用程序处理。一旦用户连接到服务,他们是保持连接到同一台实际服务器(即会话状态是特定于服务器的)还是连接到任意数量的服务器(即会话状态可通过数据库或其他方式供所有服务器使用)。如果状态未跨节点保存,那么当服务器反弹时,连接到该服务器的用户将不得不重新建立状态。

答案3

在大型网站上,您可能会为每个主机名返回多个 IP 地址,并让它们最终指向向 Web 服务器集群进行 MAC 转发的负载平衡器。通常,负载平衡器本身也具有接管/故障转移的概念。

答案4

是的,这里只有一种方法可以实现正确的即时故障转移,那就是在网络层(而不是在应用层,即 DNS 请求)。

你会想要多宿主该 IP(实际上你需要通告不小于 /24 的整个子网,并使用边界网关协议

BGP 本质上广告如何访问您的网络。

相关内容