将一个沉重的被贩运网站CloudFlare静态镜像为DNS

我运行了一个相当繁忙的网站,由于一些不幸的事件,我在Linode云中的机器出现故障。 而且我只有一台暴露在外部的Load Balancer机器( 一个IP )。

另外我的网站是可以镜像的超过6000个静态页面的候选人。 现在我的DNS是CloudFlare 。

我可以做些什么来维护我的网站的静态镜像,并路由到我的网站宕机。
由于我是从Linode运行的,因此我没有任何类似于Route53的东西来检测IP地址的停机时间并指向另一个IP地址。

什么是人们使用静态镜像站点和停工的策略?

首先要考虑几件不同的事情:

首先,你已经有了一个为你的网站devise的静态镜像:Cloudflare。 除了提供您的DNS,我还假设您已经将它们设置为CDN,以缓解即将到来的stream量冲击。 Cloudflare有一个名为“永远在线”的function,它只是用来做你正在寻找的东西:即使“起源”(在这种情况下是负载均衡器和/或服务器后面的服务器)去提供网站的静态副本下。 在担心更复杂的解决scheme之前,请确保先安装好。 2%的工作总是能让80%以上的问题得到解决! 事实上,您可能完全依靠Cloudflare来为您解决问题。 首先阅读Cloudflare Always On,因为Cloudflare已经设置在您的基础架构中,所以您要实现的任务要简单得多。 如果读完之后,对你来说做得不够,请继续阅读。

现在,当担心通过不同types的中断使您的网站可用时,您需要考虑几件不同的事情。 首先是目标。 您是否试图仅在停机期间保持网站可用性,还是希望维护另一个用于在不同位置之间平衡的站点? 你想阻止什么样的系统中断? 您愿意投入多less时间和/或金钱来减less停机时间?

在你设定了一些目标之后,你现在可以看看那些不同的解决scheme。 一般而言,所有用于最小化停机时间的不同策略涉及保持与主要位置中的内容同步的一个或多个“额外”位置,优选地在不同的主机提供商和networking中,以防止遍布整个公司的停机时间。 一般通过操纵DNSlogging来完成故障转移。 较大的公司有时候会使用任意播放或路由操作等IP级别的解决scheme来完成这些任务,这些任务有很多好处,但是这样做的代价很高,而且很难做到。

当有一个IP变得不可用时,有很多公司可以帮助你自动更改你的DNSlogging,但是你可以通过使用Cloudflare API(或者你的DNS提供商的API,如果你改变了)只需要一个独立位置的第二个系统,无论您的网站托pipe在哪里,都会不断检查您的网站以确保网站正常运行。 如果没有,则会打到您的DNS提供程序API并更改您的站点的DNSlogging以指向您的备份位置。 这意味着您将有监视间隔+ DNS TTL的最坏情况(在纸上)停机。 实际上,DNS可以非常积极地被caching,甚至短时间(<30秒)的TTL可能需要几个小时才能被全世界的所有客户完全清除。 移动设备特别是以这种麻烦而闻名。 有很多关于如何使用不同的监控系统来完成这个任务的教程 – 快速search“cloudflare故障转移”让我这 两个分别使用nagios和monit,但我相信有很多更容易访问。

当然,任何一种故障切换都需要一个地方来进行故障切换! 这样做有许多不同的要求,具体取决于您的特定应用程序的规格和同步要求。 一些网站,所有静态内容可以简单地复制每次更新到两个位置,无论是手动,通过自动脚本推或拉从主(奴隶+ rsync是你的朋友!),或其他方法如块复制(DRBD)或共享文件系统(GlusterFS)。 其他具有dynamic内容的站点将需要在主从设置中进行这种文件级同步和数据库复制。 请注意,如果您试图在两个位置接受写入,则数据库可能会导致各种问题,因此,如果您计划同时使用两个数据中心,则需要使用特定的数据库技术进行大量关于主/主数据库复制的研究。 将从站设置为只读副本即使发生故障也并不less见,以便在主中心再次可用时,不必从同步的从站同步数据。

考虑这种高可用性设置时,有很多不同的事情要考虑。 如果您告诉我们更多关于应用程序的细节,我相信我们可以添加更具体的build议。

而不是购买Linode的NodeBalancer适合所有即用function,你可能只需要购买另一个常规的L​​inode,并自己实现负载平衡和caching。

您可以使用nginx,并将其作为您的真实网站的代理和平衡器。

根据您是否需要您的网站每隔几个小时/天更改一次,可以使用多个nginxfunction来保存来自上游Linode的内容。

http://nginx.org/en/docs/http/ngx_http_proxy_module.html

一个你可能会觉得非常有用的function是proxy_cache 。 另一个是proxy_store

proxy_cache指令集非常灵活,使得nginx可以configuration为自动存储和过期所有页面,或自动提供陈旧的页面,只有上游不可用(例如看看proxy_cache_use_stale )。 尽pipeproxy_store可能会与手动清除所有rm -rf脚本一起实施,具体取决于您的需要。

当然,如果你已经在Linode为你的负载均衡器支付了20美元/月(如果你没有超出预算),那么你可以取消它,并且观察CloudFlare,Incapsula和其他类似的产品,版本可以configuration为caching各种内容(包括dynamic生成的内容,例如在Incapsula开始时为10 $ / mo)。

最佳速度,最佳可靠性,最安全

如果您的网站是静态的,那么您应该考虑将其托pipe在纯粹的CDN上,那么您不需要负载均衡器,专用服务器或vps服务器。 良好的CDNS规模,你需要和你只收取发送金额或每Xrequests取决于你与哪家公司。 关于非www的cname问题,我相信cloudsflare有一个解决方法,Rackspace和亚马逊你需要一个vpsredirect从非www到www。 在cdn上。

CDN将提供比大量专用服务器或vps更多的性能。 也是迄今为止最可靠和最安全的。

如果你有一些像联系表格这样的PHP文件,那么你可以通过使用ajax js在vps 64mb-256mb上托pipe它们。

进一步你提到镜像,全世界的cdns镜像文件这个主要原因之一如此之快,他们使用失败certificate突袭和其他故障转移冗余… cdns不能真正失败。 但是,如果你想要一个镜像说一个vps,那么你只需使用api和cron的备份。

DNS ..只是select具有任播/主动故障转移
http://dyn.com/dns/dns-comparison/

Cloudflare已经可以为你做这个了。 尽pipe一个称为Always Online™的服务(向下滚动一半)。

如果您想要自己的解决scheme,请使用代理/负载均衡器。 像haproxy这样的工作非常好。 虽然,因为这是一个静态的文件请求,所以nginx也会工作的很好。 所以,如果发生故障,代理服务器就会停止向服务器请求。 但请注意,单独使用负载平衡器不是故障转移,您需要其他Web服务器准备好在另一个失败时提供额外的负载。

如果您希望保留在一个数据中心内,则不build议您提到的DNS故障转移。 请参阅为什么不build议DNS故障转移? 这篇文章也将为您介绍一些额外的解决scheme。