一、使用DNS域名解析做网站服务高可用的初衷
DNS域名解析大概是最早应用在服务高可用领域的一种负载均衡技术。早期往往需要自行建设和维护DNS Server,还需要保障DNS服务本身的高可用。近年来发展起来一批专门提供DNS解析服务的厂商,不但提供免费、付费解析服务,而且会提供API供客户进行集成开发。以DNSPOD为例,最低收费的套餐应该是企业创业版套餐,大约年收费一千多块钱,以上功能均可以使用。当然也有更贵一些的服务套餐,差别在于服务的可用性保障、DNS解析服务可用的资源以及相关监控服务可使用的资源或监控频率方面。对于大多数初创企业而言,创业版套餐已经足够用的了。
每个公司都有自己特有的业务场景,而且受业务发展过程的影响,往往是成规模后才会想起来服务也是需要保障高可用的。服务的中断,也会造成公司收入的受损。就这种情况而言,评估和使用DNS负载均衡技术,是对原有系统部署架构侵入性比较小的解决方案。也就是说,你自己去准备主、备或主、主两套系统,让DNS域名解析去作随机转发或failover解析处理就可以了。我们这里讨论的是为网站服务设置域名解析failover的场景。
二、基于DNS域名解析的网站服务自动failover的配置
如果使用过nginx做负载均衡服务,可能对upstream参数会比较熟悉,在这个参数的使用中,是可以定义后端服务节点的状态,如backup, down 。如果我们希望两个后端服务节点始终是以主、备的形式提供服务的,即主挂了,请求才会转给备节点,那就可以给备节点添加上backup这样的参数配置。
基于域名解析实现的网站服务故障转移功能,大体上与这个原理相同。即会有对网站服务的健康检查,在发现域名对应的网站服务不可用时,触发定义好的变更域名解析地址的操作——将域名重新解析至网站备节点地址上去。这个过程中,还会临时把域名解析TTL时间调小到10s,这样是为了更快得让缓存失效并更新。对于一个稳定使用中的域名,建议设置TTL时间为600s。
注:域名解析TTL参数定义的是域名解析地址的缓存有效时间,这个时间并不是越小越好,试想如果每次你访问一个网站时,本地缓存的解析地址都过期了,那就要增加一次对DNS Server的访问请求。这无疑会影响网站服务的使用体验。
下图是一个对域名解析的网站服务自动failover的配置的架构示意图。
关于DNSPOD D监控
DNS解析服务自身并不会提供任何自动化的解析地址变更服务。就DNSPOD而言,其提供的增值服务功能——D监控,为客户提供了网站服务的健康检查和在主节点故障时动态将域名解析地址变更至指定的备用地址。如图所示的6个分布于全国不同位置的监控节点,它们所完成的正是这项工作任务。
域名解析切换的触发条件
就DNSPOD D监控服务而言,是全部的监控节点以每分钟或每3分钟(服务套餐不同)的频率从分布全国的6个监控节点或9个节点对网站的服务地址进行健康检查(类似于curl 检查)。当且仅当全部监控节点,均无法正常访问到指定的网站服务时,触发域名解析地址的切换。同时将该域名的TTL值临时调为10s 。
注:如果是自建DNS服务,同时也具备全国多地IDC资源的话,可以考虑自行设计和实现以上功能。这样的话,更加能按需定制,而不仅仅是对一个网站服务是否可用做判断。
三、利用DNSPOD API实现网站域名解析地址的按需调度
对于公司规模较大的企业,推荐使用API集成的方式管理公司业务域名的解析服务。同样地,也可以设计出负载均衡、故障转移这些域名解析的高可用功能来。由程序自动判断和处理,或是在公司自有的统一管控平台上面完成以上域名管理工作。这也就是现今比较流行的运维自动化领域的相关工作任务吧。
DNSPOD所提供的开发API文档如下,功能比较丰富。相信国内其他类似厂商也都有类似服务。
https://www.dnspod.cn/docs/index.html