答案1
首先想到的是以下几件事:
首先,您已经拥有专为此用例设计的站点静态镜像:Cloudflare。除了提供 DNS 之外,我假设您已将它们设置为 CDN,以减轻向您发起的流量冲击。Cloudflare 有一项名为 Always Online 的功能,旨在满足您的需求:即使“源站”(在本例中为负载均衡器和/或其背后的服务器)发生故障,也能提供网站的静态副本。在担心更复杂的解决方案之前,请确保您已正确设置该功能。用 2% 的工作解决 80% 以上的问题总是好的!事实上,您可能能够完全依靠 Cloudflare 为您解决问题。首先阅读 Cloudflare Always On,因为对于您来说,实施它会比任何后续操作都简单得多,因为 Cloudflare 已在您的基础设施中设置。如果您阅读后觉得它对您没有帮助,请继续阅读。
现在,在担心如何让您的网站在不同类型的中断中可用时,您需要考虑几件不同的事情。首先是目标。您是想仅在中断时保持网站可用性,还是希望同时维护用于在位置之间进行负载平衡的第二个网站?您想防止哪种系统中断?您愿意投入多少时间和/或金钱来最大限度地减少停机时间?
设定一些目标后,您现在可以查看现有的各种解决方案。一般来说,所有减少停机时间的不同策略都涉及保持一个或多个“额外”位置与主位置的内容同步,最好是在不同的托管提供商和网络中,以防止停机时间蔓延到整个公司。故障转移通常是通过操纵 DNS 记录来完成的。较大的公司有时会使用 IP 级解决方案(如任播或路由操纵)来完成任务 - 这有几个好处 - 但这样做成本高昂,而且很难做到正确。
有很多公司可以在单个 IP 不可用时自动帮助您更改 DNS 记录,但您可以利用 Cloudflare API(或您的 DNS 提供商的 API,如果您将来更改的话)自己轻松地完成此操作。所需的只是在与您的网站托管位置不同的位置安装第二个系统,该系统会不断检查您的网站以确保其正常运行。如果没有,它会访问您的 DNS 提供商 API,并更改您网站的 DNS 记录以指向您的备份位置。这意味着您将在最坏的情况下(理论上)停机时间为监控间隔 + DNS TTL。实际上,DNS 可以非常积极地缓存,即使是短(<30 秒)TTL 也可能需要几个小时才能被世界各地的所有客户端完全清除。移动设备尤其以麻烦而闻名。有很多关于如何使用不同监控系统完成此任务的教程 - 快速搜索“cloudflare 故障转移”让我这些 二分别使用 nagios 和 monit,但我确信还有很多更容易访问的。
当然,任何类型的故障转移都需要一个可以故障转移的位置!根据特定应用程序的规格和同步要求,执行此操作有许多不同的要求。一些网站都是静态内容,每次更新时只需将其复制到两个位置即可,方法是手动复制,也可以通过自动脚本从主服务器推送或拉取到从服务器(cron + rsync 是您的好帮手!),或者使用其他方法,如块复制 (DRBD) 或共享文件系统 (GlusterFS)。其他具有动态内容的网站将需要这种文件级同步和主从设置中的数据库复制。请注意,如果您尝试在两个位置接受写入,数据库可能会导致各种问题,因此如果您计划同时使用两个数据中心,请使用您的特定数据库技术对主/主数据库复制进行大量研究。即使在故障转移时,将从服务器设置为只读副本也并不少见,这样当主中心再次可用时,就不必从提升的从服务器同步数据。
在考虑这种高可用性设置时,有很多不同的事情需要考虑。如果您告诉我们更多关于您的应用程序的具体信息,我相信我们可以提供更具体的建议。
答案2
而不是购买节点平衡器Linode 具有适合所有人的即用型功能,您还不如购买另一个常规的 Linode,然后自行实现负载平衡和缓存。
您可以使用 nginx,并让其充当您真实网站的代理和平衡器。
根据您是否要求网站每隔几个小时/几天更改一次,您可以使用多个 nginx 功能来保存来自上游 Linode 的内容。
http://nginx.org/en/docs/http/ngx_http_proxy_module.html
您可能发现非常有用的一个功能是proxy_cache
。另一个功能是proxy_store
。
这proxy_cache
组指令非常灵活,可以将 nginx 配置为自动存储和过期所有页面,或者仅在上游不可用时自动提供过时的页面(例如查看proxy_cache_use_stale
)。而根据您的需要,proxy_store
可以与手动清除所有脚本一起实施。rm -rf
当然,如果您已经为 Linode 的负载均衡器支付了 20 美元/月(并且没有超出预算),那么您不妨取消它,并研究 CloudFlare、Incapsula 和其他类似产品,其中一些付费版本可以配置为缓存所有类型的内容(包括动态生成的内容,例如,Incapsula 的起价为 10 美元/月)。
答案3
最佳速度、最佳可靠性、最安全
如果您的网站是静态的,那么您应该考虑将其完全托管在 CDN 上,这样您就不需要负载平衡器、专用服务器或 vps 服务器。良好的 CDNS 可以根据您的需要进行扩展,并且您只需为发送量或每个 Xrequests 付费,具体取决于您选择的公司。关于非 www cname 问题,我相信 Cloudsflare 有一个解决方法,Rackspace 和 Amazon 您需要一个 vps 才能在 cdn 上从非 www 重定向到 www。
CDN 提供的性能比大量专用服务器或 vps 更高。而且它目前是最可靠、最安全的。
如果您有一些 php 文件(如联系表单),那么您可以使用 ajax js 将它们托管在 64mb-256mb 的 vps 上。
此外,您还提到了镜像,cdns 将文件镜像到世界各地,这是它们如此快速的主要原因之一,并且它们使用防故障 raid 和其他故障转移冗余……cdns 真的不会失败。但如果您想要一个镜像,比如 vps,那么您只需使用 api 并 cron 备份即可。
DNS..只需选择具有任播/主动故障转移功能的 DNS
http://dyn.com/dns/dns-comparison/
答案4
Cloudflare 已经可以为您做到这一点。尽管一项名为始终在线™(向下滚动大约一半)。
如果你想要自己的解决方案,请使用代理/负载平衡器。例如哈普罗西非常适合这种情况。尽管这是一个静态文件请求,nginx也能很好地工作。因此,如果一个服务器出现故障,代理只需停止从出现故障的服务器发出请求即可。但请注意,单独使用负载平衡器并不是故障转移,您需要额外的 Web 服务器来准备在另一个服务器出现故障时承担额外的负载。
如果您希望留在一个数据中心内,则不建议使用您提到的 DNS 故障转移。请参阅为什么不建议进行 DNS 故障转移?该帖子还将为您概述一些额外的解决方案。