抱歉,之前说得不清楚。
我们有一个 vmware 虚拟化服务器实例,它是我们的主要生产服务器。我将一系列基于 Web 的应用程序存储在近百个唯一顶级域上。为了提供网页,我们使用 LAMP 堆栈。此服务器运行我们的主 DNS 服务器和辅助 DNS 服务器(在两个不同的 IP 地址上,而不是用于提供 Web 内容的 IP 地址)。最后,我们还使用 exim(我相信)托管我们的邮件(pop 和 smtp)。
最近,我们遇到了一些问题,导致我们的根文件系统变为只读,阻止了 apache2 或 mysql 连接并阻止了传入电子邮件。这实际上导致数千个客户端的 Web 状态和电子邮件中断。问题的性质(仍未确定,但处于控制之中)不影响绑定,因此 DNS 仍可正常解析。
从那时起,我们就开始将生产网站和相关的 mysql 数据库镜像到辅助服务器上。该服务器完全可以投入生产。
我的问题是,当我们的主生产服务器上的 Apache 出现故障(无论出于何种原因)时,推荐使用哪些故障转移方法,以便快速(如果不是自动的话)开始尽可能无缝地将流量转发到辅助服务器。
DNS 轮询对我们来说是不可取的,因为我们不希望负载分散到两台服务器上,事实上,我们只希望在主服务器无响应的情况下,辅助服务器接收 http 请求。这在一定程度上是因为我们的镜像过程是单向的,对辅助服务器的更改会反映在主服务器中,甚至会丢失。
答案1
不建议使用 DNS 循环,因为:
1- 不同的服务器可能承受的请求数量不同。因此,它们的负载会不均衡。
2- DNS 负载平衡不考虑服务器可用性。服务器 DN 记录将保留,并在发生故障时使用。
3- DNS 缓存会使情况变得更糟。您无法控制客户端的 DNS 缓存以及中间的任何中间 DNS 服务器。如果您计划将 TTL 值设得更小,它可能无法按预期工作。请查看这个帖子. 公认的答案是这样的Many DNS server do not honor your TTL
。
推荐的解决方案是安装负载均衡器(如 HAProxy)以及高可用性解决方案(如 heartbeat)。此设置应安装在两台机器上。如果一台机器发生故障,另一台机器将接管 VIP(通过 heartbeat)。正在运行的机器将负责检查后端服务器的健康状况并分配负载(通过 haproxy)。
编辑:
如果您希望服务器以主动-被动模式工作,则不需要负载平衡器。您可以安装 heartbeat 和 pacemaker 来监控系统资源,如 apache、mysql 等。可以配置集群以仅保留一个活动服务器。
答案2
在 Apache 前面安装 nginx。如果一个 Apache 服务器宕机,nginx 会将其排除,并从另一个“worker”服务器提供数据。
因此,设置应如下所示
nginx -> 工作者 #1 (Apache)、工作者 #2、工作者 #3 等等。
当然,nginx 应该安装在专用的机器上。你必须解决的一个问题是——如果 nginx 宕机了怎么办,但是……
nginx 网站:http://nginx.org
答案3
这Linux 虚拟服务器是一个建立在真实服务器集群上的高度可扩展和高可用性的服务器,带有负载均衡器。
加州大学研究生院允许几台主机共享虚拟 IP 地址,以提供自动故障转移
答案4
为了在单个站点内实现冗余,在单个 Internet 源上,您需要在前端放置集群硬件,并配备一个备用设备以随时接管故障设备的 IP 地址。但是,如果您的 ISP 发生故障,或者您的站点断电或遇到其他问题,您将无法继续工作。
如果您想要保护整个站点或 ISP 免受损失,那么实际上只有两个选项。一个是获取您自己的 BGP 自治系统编号,并运行您自己的 BGP 路由,与几个不同的 ISP 对等(好吧,付费传输)。您可以使用的最小网络块是 /24,因此您需要至少有一个这么大的网络块。然后,如果您的主站点发生故障,您可以向不同的站点通告不同的路由。
正如您所建议的,另一个选择是循环 DNS。有些人从理论上反对这样做,而且 Windows Vista 客户端非随机选择地址存在问题,但它应该可以很好地实现冗余,除非主箱/站点/互联网源出现故障,否则备份箱只会将流量反向代理回主箱。