从阅读来看,似乎不推荐DNS故障转移,因为DNS不是为它devise的。 但是,如果在托pipe冗余内容的不同子网上有两个Web服务器,那么还有什么其他方法可以确保当一台服务器出现故障时,所有通信都会路由到实时服务器?
对我来说,DNS故障转移似乎是唯一的故障转移选项,但共识是不是一个好的select。 然而,像DNSmadeeasy.com这样的服务提供它,所以一定有优点。 任何意见?
通过“DNS故障转移”,我认为您的DNS Round Robin与一些监控相结合,即为DNS主机名发布多个IP地址,并在监视检测到服务器故障时删除死地址。 这可以适用于小型,stream量较less的网站。
按照devise,当您回答DNS请求时,您还会为您提供的响应提供一个生存时间(TTL)。 换句话说,你告诉其他的DNS服务器和caching“你可以存储这个答案,并使用它的x分钟,然后再检查我”。 缺点来自这个:
获得良好的正常运行时间的更常见的方法包括:
less数几个网站使用多数据中心设置,在数据中心之间进行“地理平衡”。
DNS故障转移defintely工作很好。 多年来,我一直在使用它来手动转移数据中心之间的stream量,或者在监视系统检测到中断,连接问题或服务器过载时自动进行。 当你看到它的工作速度,以及可以轻松移动的真实世界stream量时,你永远不会回头。 我使用Zabbix来监视我的所有系统,并显示在DNS故障转移情况下发生的事情的可视化图表,这使我所有的疑惑都结束了。 可能有less数ISP会忽略TTL,而且还有一些用户仍然使用旧浏览器 – 但是当您在两个数据中心位置每天查看数百万页面浏览量的stream量时,您将执行DNSstream量转移 – 剩余的stream量忽略TTL是可笑的。 DNS故障转移是一项坚实的技术。
DNS并不是为故障转移而devise的,但是它的devise与TTL一起使用,当与坚实的监控系统结合使用时,TTL的function非常出色,以满足故障转移需求。 TTL可以设置得很短。 我已经有效地使用了5秒的生产时间来减轻基于DNS故障转移的解决scheme的速度。 你必须有DNS服务器能够处理额外的负载 – 并命名不会削减它。 然而,当在冗余名称服务器上使用mysql复制的数据库进行备份时,powerdns符合法案。 您还需要一个可信的自动故障转移集成的稳定的分布式监视系统。 Zabbix为我工作 – 我可以几乎立即从多个分布式Zabbix系统validation中断 – 更新powerdns使用的mysqllogging,并在停电和stream量高峰期提供几乎即时的故障转移。
但是,嘿,我build立了一家提供DNS故障转移服务的公司,经过多年为大公司工作。 所以,用一粒盐来看我的意见。 如果您希望在停机期间查看大量网站的zabbixstream量图 – 亲自查看DNS故障转移的工作原理,请发送电子邮件给我,我非常乐意与您分享。
DNS故障转移的问题是,在许多情况下,它是不可靠的。 有些互联网服务提供商会忽略你的TTL,即使他们尊重你的TTL,也不会立即发生,当你的网站恢复正常时,当用户的DNScaching超时,会导致一些奇怪的会话,转移到其他服务器。
不幸的是,它几乎是唯一的select,除非你足够大来做自己的(外部)路由。
普遍的看法是,对于DNS RR,当一个IP发生故障时,一些客户端将继续使用这个被破坏的IP数分钟。 这在前面对这个问题的一些答案中已经陈述过了,并且在维基百科上也有记载。
无论如何,
http://crypto.stanford.edu/dns/dns-rebinding.pdf解释说,这是不正确的大多数当前的HTML浏览器。 他们将在几秒钟内尝试下一个IP。
http://www.tenereillo.com/GSLBPageOfShame.htm似乎更加强大:
使用多个Alogging不是交易的窍门,也不是负载平衡设备供应商所设想的特征。 由于这个原因,DNS协议被devise为支持多个Alogging。 浏览器和代理服务器以及邮件服务器等应用程序都使用DNS协议的这一部分。
也许一些专家可以评论,并给出一个更清晰的解释为什么DNS RR是不利于高可用性。
谢谢,
华伦天奴
PS:抱歉断链,但作为新用户,我不能超过1
我在生产中等stream量但关键业务的网站(跨两个地理位置)上运行DNS RR故障转移多年。
它工作正常,但我至less有三个微妙的东西,我学到了很难的方法。
1)如果在客户端可以使用任何cachingDNS的情况下,浏览器将在30秒后(上次检查时)从非工作IP故障转移到工作IP。 这基本上是一件好事。
但是如果让用户等待30秒钟是不可接受的,那么您可能需要将您的TTLlogging更新为几分钟,而不是几天或几周,以便在出现中断的情况下,可以快速删除掉服务器从你的DNS。 其他人在他们的回答中提到了这一点。
2)如果你的一个域名服务器(或者你的两个地域中的一个域名服务器)出现故障,这个服务器正在为你的循环域服务,而且如果其中一个主服务器出现故障,我隐约记得你可能遇到其他问题,试图去除如果你还没有将名称服务器的SOA TTL /有效期限设置为足够低的值,那么DNS的域名服务器就会从DNS中失效。 我可能在这里有错误的技术细节,但不止一个TTL设置,你需要正确的防范单点故障。
3)如果您发布的Web API,REST服务等,这些通常不被浏览器调用,因此在我看来,DNS故障转移开始显示真正的缺陷。 这可能是为什么有些人说,因为你把它“不推荐”。 这就是我为什么这么说的原因。 首先,使用这些URL的应用程序通常不是浏览器,因此它们缺less常见浏览器的30秒故障转移属性/逻辑。 其次,第二个DNS条目是否被调用,甚至DNS是否被重新轮询,都很大程度上取决于这些API / REST客户端所使用的编程语言中的networking库的底层编程细节,以及它们究竟是如何被调用的API / REST客户端应用程序。 (在它们覆盖下,库调用get_addr,什么时候?如果套接字挂起或closures,应用程序是否重新打开新套接字?是否有某种超时逻辑?等等)
它很便宜,经过很好的testing,而且“大部分都是有效的”。 就像大多数事情一样,你的里程可能会有所不同。
有一群人使用我们(Dyn)进行故障转移。 站点可以在发生停机时执行状态页面的原因也是一样的(想想像Twitter的失败鲸),或者只是基于TTL重新路由stream量。 有些人可能认为DNS故障转移是贫民窟……但是我们从一开始就认真地devise了故障转移的networking,所以它和硬件一样工作。 我不确定DME是怎么做到的,但是我们有17个离我们最近的任何PoP中的3个来自最近的位置监视你的服务器。 当它从三个中的其中两个检测到它已经closures时,我们只是将stream量重新路由到另一个IP。 唯一的停机时间是那些在TTL时间间隔的剩余时间内所要求的。
有些人喜欢同时使用这两个服务器…在这种情况下,可以做一些像循环负载平衡…或基于地理位置的负载平衡。 对于那些真正关心性能的人来说,我们的实时stream量pipe理器将监视每个服务器…如果其中一个较慢…根据您在主机名中链接的IP将stream量重新路由到最快的stream量。 再次…这是基于您在UI / API / Portal中放置的值而工作的。
我想我的观点是…我们专门devise了DNS故障转移。 虽然DNS最初是在创build时并没有进行故障转移,但是我们的DNSnetworking是为了实现它而devise的。 它通常可以像硬件一样有效,不会有折旧或硬件成本。 希望这样做不会让我听起来蹩脚,因为有很多其他公司这样做…我只是从我们团队的angular度来讲。 希望这可以帮助…
另一种方法是基于BGP的故障转移系统。 这不是简单的设置,但它应该是防弹的。 在一个位置设置站点A,站点B在一秒钟内全部使用本地IP地址,然后获得便携式的IP地址或其他IP地址块,并设置从便携IP到本地IP的redirect。
有一些缺陷,但是如果你需要这种控制,它比基于DNS的解决scheme更好。
另一种select是在地点A设置名称服务器1,在地点B设置名称服务器2,但是要设置每个名称服务器1,使得NS1上的所有Alogging将stream量指向位置A的IP,并且在NS2上,所有Alogging指向IP地点B.然后设置您的TTL为一个非常低的数字,并确保您的域名logging在注册商已设置为NS1和NS2。 这样,它将自动负载平衡,并故障转移,如果一个服务器或一个链接到一个位置closures。
我以一种稍微不同的方式使用了这种方法。 我有一个位置有两个ISP,并使用此方法来引导通过每个链接的stream量。 现在,它可能会比你愿意做更多的维护…但是我能够创build一个简单的软件,它自动拉NS1logging,更新选定区域的loggingIP地址,并推动这些区域NS2。
多数据中心故障转移的一个select是培训用户。 我们向我们的客户做广告,我们在多个城市和注册电子邮件中提供多台服务器,这些服务器包括直接链接到每台“服务器”的链接,以便用户知道一台服务器是否停机,可以使用到另一台服务器的链接。
这完全绕过了DNS故障转移的问题,只需维护多个域名。 使用www.company.com或company.comlogin的用户可以直接访问server1.company.com或server2.company.com,如果他们注意到使用其中一个或者另一个获得更好的性能。 如果出现故障,用户将被训练到另一台服务器。
过去十年来,我一直在使用基于DNS的站点平衡和故障转移,并且存在一些问题,但这些问题可以得到缓解。 BGP虽然在某些方面优于其他方法,但不是100%的解决scheme,或者增加了复杂性,可能还有额外的硬件成本,收敛时间等等。
我发现将本地(基于局域网)的负载均衡,GSLB和基于云的区域托pipe相结合可以很好地解决通常与DNS负载平衡相关的一些问题。
“为什么你在大多数生产环境中使用它(尽pipe总比没有好)”。
实际上,当存在地理差异时,“好胜于无”就更好地expression为“唯一的select”。 硬件负载平衡器非常适合单点存在,但单点存在也是单点故障。
有很多大美元的网站使用基于dns的stream量操作来取得良好的效果。 他们是那种知道每个小时的销售情况如何的网站。 看起来它们是“把握机会在大多数生产环境中使用”的最后一个。 事实上,他们已经仔细审查了他们的select,select了这个技术,付出了很多代价。 如果他们觉得有些更好,他们会心跳的。 他们仍然select留下的事实说明了真实世界的用法。
基于Dns的故障转移确实遭受了一定程度的延迟。 没有办法绕过它。 但是,它仍然是多stream行场景中故障转移pipe理的唯一可行方法。 作为唯一的select,它远远胜过“总比没有好”。
所有这些答案对他们都有一定的效力,但是我认为这取决于你在做什么以及你的预算是多less。 在CloudfloorDNS,我们很大一部分业务是DNS,不仅提供快速DNS,还提供低TTL选项和DNS故障转移。 如果这不起作用,我们就不会做生意了。
如果你是一个有正常运行时间的无限预算的跨国公司,是的,硬件GSLB负载平衡器和一级数据中心是伟大的,但你的DNS仍然需要快速和稳定。 许多人都知道,除了域名本身之外,DNS是任何基础架构的一个关键方面,它是networking在线状态的其他部分所能提供的最低级的服务。 从可靠的域名注册商开始,DNS就像不让域名过期一样重要。 DNS下降,这意味着您的组织的整个在线方面也下降了!
当使用DNS故障转移时,其他关键方面是服务器监控(始终需要检查多个地理位置,并且始终应检查多个(至less3个)以避免误报),并正确pipe理DNSlogging,检测到故障。 低TTL和一些故障切换的选项可以使这一个无缝的过程,并击败如果你是一个系统pipe理员醒来的半夜寻呼机。
总的来说,DNS故障切换确实有效,可以很实惠。 在大多数情况下,从我们或大多数受pipe理的DNS提供商那里,您将获得Anycast DNS以及服务器监视和故障转移,只需花费一小部分硬件选项。
所以真正的答案是肯定的,它是有效的,但这是为了每个人和每个预算? 也许不是,但是直到你尝试并为自己做testing,如果你是一个有限的IT预算,希望有最好的正常运行时间的中小企业,很难忽略。
如果您想了解更多信息,请阅读应用笔记
它们包括:故障转移,全局负载平衡以及一系列相关事宜。
如果您的后端架构允许,更好的select是使用故障转移选项的全局负载平衡。 这样,所有的服务器和带宽都在尽可能地发挥作用。 这种设置不会在故障时插入额外的可用服务器,而是从服务中撤销出现故障的服务器,直到恢复为止。
简短的答案:它的工作原理,但你必须了解的限制。
我相信故障转移的想法是为集群而devise的,但是因为它也可以单独运行,所以仍然可以在一对一的情况下运行。
今天,良好的全球负载平衡器,使用这种技术,工作得很好。 检查例如Azurestream量pipe理器https://azure.microsoft.com/en-us/services/traffic-manager/
我build议你selectA,在自己的AS上select一个多宿主的数据中心,或者B,在公有云中托pipe你的名字服务器。 EC2,HP,或者IBM将不可能倒闭。 只是一个想法。 虽然DNS可以解决问题,但在这种情况下,这只是对networking基础devise不佳的一种修复。
根据您的环境,另一种select是使用IPSLA,PBR和FHRP的组合来实现您的冗余需求。