DNS高可用设计--软件高可用

DNS是网络的基础服务,网络上的各类应用对DNS的依赖性很高。DNS的稳定,直接决定了上层应用服务的稳定。那如何保障DNS服务的高可用呢?
咱们先来看下高可用的概念:算法

高可用

高可用(High availability):指系统无中断地执行其功能的能力,通常用下面的公式来衡量:
image数据库

  • MTBF: Mean time between Failures,平均多久出一次故障;
  • MTTR: Mean time to recover,出故障后的恢复服务的时间。
    实现dns高可用,主要靠下降出故障、故障后快速恢复。下图是dns服务架构简图,分为管控层和解析层,后面分别描述这两层如何实现高可用。

01

管控层

管控层最主要的两个功能: DNS数据的持久化,DNS数据下发到adns(dnsserver)。
02安全

1 数据持久化
管控层接收用户配置的域名数据后,持久化存储在数据库。利用了数据库团队的X-Cluster产品,实现数据的高可用,消除了运维误操做等缘由致使的数据丢失:
数据库采用三地五副本,同城强同步方案部署;
数据库各个节点间采用Paxos 协议选主,在任意阶段出现问题后,数据内部自选主切换;
应用机房部署与数据库解耦,能够任意机房部署;
在数据库Leader 故障场景下,数据库会自动发生切换,应用连入任意节点获取当前Leader 位置后恢复应用业务。
_服务器

2 数据下发
管控与adns之间,主要经过稳定的内部网络来下发数据,数据传输出错的几率低;
管控向adns发送数据时,有数据补偿机制,对与下发失败,作屡次重试,若是重试都没法成功,报警转人工处理。网络

解析层

解析层由adns集群组成,部署在全球的上百个idc机房,经过anycast发布大量的服务ip。用户向这些ip发送dns请求,获取解析结果。
04
1 消除单点
解析层主要靠消除单点实现failover,来减小故障。架构

  • 主机到网络:每台adns经过双网口,双上联到两个不一样的交换机,避免网口单点、交换机的单点故障;
  • 集群内:adns分红多个不一样集群,每一个集群内多台adns,这些机器向交换机发布相同的IP,经过ECMP分发流量。同集群内DNS都是热备的关系,当某台adns出问题,交换机把流量分发到其它服务器。
  • 集群间:多个不一样的集群,发布相同的ip,这些集群之间,经过网络的anycast技术相互热备,某个集群不可用,流量被转到其它可用的集群。
  • NS IP:因为特殊缘由(好比运营商黑洞等),个别IP全网都没法访问。咱们对每一个NS配置多个IP,LocalDNS会基于SRTT算法,选择出最短的rt的IP,将请求转发过去,从而避开有问题的IP。

2 系统容量
监控系统实时监控各个服务器、集群的qps容量;
adns集群,部署上具有水平扩容能力,容量能达到机房的带宽。运维

3 如何保证解析正确
部署数据对帐系统,对adns之间作数据对比,adns与管控的DB作数据对比;
部署拨测系统,对zone的soa作拨测,对特定域名的rr记录作拨测;
经过上面的两类手段,及时发现数据异常并做出响应,避免异常或者缩短异常的处理时间。
通常经过摘除有问题的服务器的路由,几秒钟便可生效。tcp

4 安全防御
做为面向公网的服务,网络攻击没法避免,会影响系统可用性。咱们采用了下面两类安防手段,提升dns的可用性。
1) 网络攻击防御
常见的dns攻击,是4层的ddos攻击。对于超大流量的网络攻击,利用机房部署的aliguard,作网络防御;
为了减小ddos防御系统对dns的影响,咱们设置了很高的防御阈值,对应阈值之下的ddos攻击,经过咱们高性能的dnsserver(adns)来承载攻击。
2) 应用安全
为了应对DNS投毒、欺骗等场景,咱们的dnsserver,支持dnssec;
为了应对DNS劫持,咱们支持有链接的协议,好比tcpdnshttpdnstlsdoh;
用户能够根据本身的需求,选择合适的安全方案。性能

相关文章
相关标签/搜索