我试图实现一个低成本的解决方案,网站高可用性。我正在寻找以下场景的缺点:
我有两个服务器,具有相同的配置、内容、mysql复制(双主)。它们位于不同的数据中心--让我们称它们为serverA和serverB。用户使用serverA - serverB更像是备份。现在,我想使用DNS故障转移,在serverA关闭时将用户从serverB切换到serverA。
我的想法是在serverA和serverB上设置DNS服务器(绑定/powerdns)--让我们称它们为ns1.website.com和ns2.website.com (假设我拥有website.com)。然后,我将我的域配置为使用它们作为其名称服务器。两个DNS服务器都将返回serverA IP作为我网站的IP。如果serverA下降,我可以(手动或自动从serverB)更改服务器B的DNS配置,将serverB的IP作为网站的IP返回。当然,TTL会很低,因为它应该在DNS故障转移中。
我知道切换到serverB (DNS ttl、检测serverA故障的时间、serverB DNS重新配置等)可能需要一些时间,而且一些小部分用户无论如何也不会使用serverB。我也不介意。但是,这种做法还有哪些不利因素呢?
另一种情况是,ns1.website.com将返回serverA IP作为网站的IP,而ns2.website.com将返回serverB IP作为网站的IP。但是AFAIK客户端并不总是使用主名称服务器,有时还会使用次要名称服务器。因此,有一小部分用户会使用serverB而不是serverA,这不是我想要的。您能确认DNS客户端的行为是这样的吗?您能知道有多少百分比的客户端可能使用serverB而不是serverA (统计数字)?这也有一个缺点,当serverA恢复时,它将被自动用作网站的主服务器,这也是一种糟糕的情况(冷缓存、mysql复制可能同时失败等等)。所以我把它作为一个理论上的替代方案。
我正在考虑使用一些专业的DNS故障转移公司,但他们收取DNS请求的数量和费用非常高(为什么?)
发布于 2012-03-30 11:05:03
“故障转移”不是本地DNS服务器功能;这必须始终在另一层实现。
也就是说,执行它的方法确实有两种: georedundancy和使用anycasting的-locality (即返回的IP取决于请求的来源或其他一些标准),或者是对DNS数据的临时查询。
因为你所描述的原因,后者从来没有像前者那么快。
尽管如此,后者很容易自己实现;您所需要的只是实现ddns更新的权威服务器。
检测失败,用nsupdate更新名称服务器,并等待TTL过期。
https://serverfault.com/questions/375204
复制相似问题