我有一些可用性要求极高的网页内容,需要全天候在线。因此,我想知道我是否可以用多台服务器来处理一个域名,而不是依赖一台服务器?
我可以为该域名设置不同的名称服务器吗?请求会自动在这些服务器之间分配吗?就这么简单吗?
答案1
您绝对不想使用循环 DNS。主要问题是它无法以任何智能方式平衡负载,并且它没有考虑客户端的 DNS 缓存。DNS 并非用于执行负载平衡。这项技术已被弃用,您真正想要使用的是服务器负载平衡器(设备或软件,但如果您关心性能,我真的推荐设备)。
事情是这样的:
- 您设置一个域名,并将其 IP 地址与您的服务器负载均衡器 (SLB) 公共 IP 地址绑定,该地址称为 VIP(虚拟 IP 地址)。
- 当 SLB 收到连接请求时,它会在客户端和自身之间建立连接。然后,您的客户端会在该连接内发送数据(在您的情况下为 HTTP 请求)。某些 SLB 可以根据请求类型将数据流重定向到特定服务器,但目前这还有些高级。
- 然后,SLB 将在自身和另一台服务器之间建立另一个连接。它将从您指定的池中选择服务器。您可以在此处指定所有服务器的 IP 地址。根据您定义的负载平衡规则,它将选择一台或另一台服务器。一些可能的规则是循环(它将把第一个用户发送到第一台服务器,将第二个用户发送到第二台服务器,依此类推)、权重(如果服务器 1 的性能是服务器 2 的两倍,它将把两倍以上的用户发送到第一台服务器)、负载(如果服务器 2 的负载比服务器 3 高,SLB 将优先发送到服务器 3)和其他一些规则。
- 一种常用的提高性能的方法是使用 SLB 在其自身与客户端之间进行 SSL 终止,然后在其自身与服务器之间使用明文。这样,您的服务器上就不需要 SSL(节省大量性能),这在大多数情况下是可以的,因为您处于私有的、受信任的网络上;同时仍保持公共(互联网)网络所需的安全级别。
一些流行的 SLB 供应商是 F5(我个人最喜欢的,但这只是我的看法,它们往往更贵 - 有充分的理由,但这也是我的看法)、RadWare、Cisco 和 Juniper。
答案2
你确实有四个选择:
- 设置集群并将域指向集群的虚拟 IP
- 购买负载平衡设备
- 将集群置于负载平衡设备后面
- 使用所有不同服务器的 IP 设置多个记录 (DNS Round Robbin)
DNS 轮询的问题是,如果您的一台服务器出现故障,则尝试使用该 IP 的每 N 个请求都将失败。
仅使用集群和/或负载平衡器才能为您提供对硬件故障的真正容错能力,因为它们将停止向关闭的服务器发送请求。
答案3
是的,这是确保不同服务器之间负载平衡的基本方法(网络服务器)...它被称为轮询 DNS。
注意这是一种负载平衡技术,它不能保证任何单服务器故障的故障转移,即如果服务器停机并且您的客户端通过 DNS 获取其地址,则连接将失败。从统计上讲,一次又一次重新加载将与工作服务器建立连接,但这不是一个干净的解决方案。
答案4
选择负载平衡解决方案时需要注意的一点是您的网站是否需要处理会话。如果是这种情况,请确保您使用的负载平衡技术不会为给定客户端随机选择服务器,否则他们可能会因为每次都被重定向到不同的服务器而丢失您网站上的会话。