Qui*_*Par 4 domain-name-system cache mirroring static-content cloudflare
我运行着一个流量相当大的网站,由于一些不幸的事件,我在 Linode 的云中的机器宕机了。而且我只有一台暴露于外界的负载均衡器机器(一个 IP)。
此外,我的网站是可以镜像的6,000 多个静态页面的候选。现在我的 DNS 是CloudFlare。
我可以做些什么来维护我网站的静态镜像并路由到它,以防我的网站出现故障。
因为我是从 Linode 运行的,所以我没有像Route53这样的东西来检测一个 IP 地址的停机时间并指向另一个 IP 地址。
人们使用静态镜像站点和防止停机的策略是什么?
有几个不同的事情会首先浮现在脑海中:
首先,您已经拥有一个专为以下用例设计的站点静态镜像: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) 等方法。其他具有动态内容的站点将需要在主从设置中进行这种文件级同步和数据库复制。请注意,如果您尝试在两个位置接受写入,数据库可能会导致各种问题,因此,如果您计划同时使用两个数据中心,请使用您的特定数据库技术对主/主数据库复制进行大量研究。即使在故障转移时,将从站设置为只读副本也很常见,以便在主中心再次可用时不必从提升的从站同步数据。
在考虑这种高可用性设置时,需要考虑很多不同的事情。如果您告诉我们更多关于您的应用程序的细节,我相信我们可以添加更具体的建议。