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

高可用

高可用(High availability):指系统无中断地执行其功能的能力,一般用下面的公式来衡量:

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

管控层

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

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

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

解析层

解析层由adns集群组成,部署在全球的上百个idc机房,通过anycast发布大量的服务ip。用户向这些ip发送dns请求,获取解析结果。

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记录做拨测;
通过上面的两类手段,及时发现数据异常并作出响应,避免异常或者缩短异常的处理时间。
一般通过摘除有问题的服务器的路由,几秒钟即可生效。

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

DNS高可用设计--软件高可用的更多相关文章

  1. 第 18 章 高可用设计之 MySQL 监控

    前言: 一个经过高可用可扩展设计的 MySQL 数据库集群,如果没有一个足够精细足够强大的监控系统,同样可能会让之前在高可用设计方面所做的努力功亏一篑.一个系统,无论如何设计如何维护,都无法完全避免出 ...

  2. MySql(十八):MySql架构设计——高可用设计之 MySQL 监控

    前言: 一个经过高可用可扩展设计的 MySQL 数据库集群,如果没有一个足够精细足够强大的监控系统,同样可能会让之前在高可用设计方面所做的努力功亏一篑.一个系统,无论如何设计如何维护,都无法完全避免出 ...

  3. MySql(十七):MySql架构设计——高可用设计之思路及方案

    前言: 数据库系统是一个应用系统的核心部分,要想系统整体可用性得到保证,数据库系统就不能出现任何问题.对于一个企业级的系统来说,数据库系统的可用性尤为重要.数据库系统一旦出现问题无法提供服务,所有系统 ...

  4. MySQL性能调优与架构设计——第 18 章 高可用设计之 MySQL 监控

    第 18 章 高可用设计之 MySQL 监控 前言: 一个经过高可用可扩展设计的 MySQL 数据库集群,如果没有一个足够精细足够强大的监控系统,同样可能会让之前在高可用设计方面所做的努力功亏一篑.一 ...

  5. MySQL性能调优与架构设计——第 17 章 高可用设计之思路及方案

    第 17 章 高可用设计之思路及方案 前言: 数据库系统是一个应用系统的核心部分,要想系统整体可用性得到保证,数据库系统就不能出现任何问题.对于一个企业级的系统来说,数据库系统的可用性尤为重要.数据库 ...

  6. Kafka 高可用设计

    Kafka 高可用设计 2016-02-28 杜亦舒 Kafka在早期版本中,并不提供高可用机制,一旦某个Broker宕机,其上所有Partition都无法继续提供服务,甚至发生数据丢失对于分布式系统 ...

  7. Redis源码阅读(二)高可用设计——复制

    Redis源码阅读(二)高可用设计-复制 复制的概念:Redis的复制简单理解就是一个Redis服务器从另一台Redis服务器复制所有的Redis数据库数据,能保持两台Redis服务器的数据库数据一致 ...

  8. 服务注册与发现-Eureka (高可用设计)

    什么是高可用 部署需要考虑的是什么: 1.系统遇到单点失效问题,如何能够快速切换到其他节点完成任务 2.如何应对网络故障,即系统如何设计成"故障开放型"(expecting fai ...

  9. 你以为的MongoDB副本集的高可用是真的高可用了吗?

    很久没来更新博客,自感是一个只会搬砖的劳工,总搞些MySQL相关的数据库实在无聊,且时不时遇到些不讲道理的Dev吧,真的是心累至极,有种想回头我也去干开发的冲动,当个需求者有话语权要风得风,要雨得雨多 ...

  10. php面试专题---19、MySQL高可扩展和高可用考点

    php面试专题---19.MySQL高可扩展和高可用考点 一.总结 一句话总结: 要区别分区和分库分表,分区的话对用户是透明的,分库分表的话需要程序员做点事情,主从数据库同步的话借助的是二进制日志 1 ...

随机推荐

  1. 基于ADS1292芯片的解决方案之芯片简析

    基本资料: ADS1292芯片是多通道同步采样 24 位 Δ-Σ 模数转换器 (ADC),它们具有内置的可编程增益放大器 (PGA).内部基准和板载振荡器. ADS1292 包含 便携式 低功耗医疗心 ...

  2. kettle入门教程-表同步插入

    在平时工作当中,会遇到这种情况,而且很常见.比如:增量抽取(每隔2个小时抽取截至到上次抽取时间的记录)一.操作前提:存在3张表,源表(t_student),同步日志表(t_tbrz),插入表(t_ta ...

  3. 寒武纪加速平台(MLU200系列) 摸鱼指南(三)--- 模型移植-分割网络实例

    PS:要转载请注明出处,本人版权所有. PS: 这个只是基于<我自己>的理解, 如果和你的原则及想法相冲突,请谅解,勿喷. 前置说明   本文作为本人csdn blog的主站的备份.(Bl ...

  4. 【leetcode 春季比赛3题 二叉搜索树染色】广度搜索

    暴力: import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import ja ...

  5. 元宇宙是VR虚拟现实的未来吗?

    从科幻小说到商业现实 自从 Facebook年更名为 Meta 以来,关于元宇宙的热议不断,人们对虚拟世界的兴趣也重新燃起,因为尽管虚拟现实 (VR) 的概念由来已久,但该技术现在才开始真正得以应用. ...

  6. 恶意软件开发(五)Linux shellcoding

    什么是shellcode? Shellcode通常指的是一段用于攻击的机器码(二进制代码),可以被注入到目标计算机中并在其中执行.Shellcode 的目的是利用目标系统的漏洞或弱点,以获取系统控制权 ...

  7. Java内存马1-传统web内存马

    1.前置知识 (1)Tomcat Tomcat是一个开源的.轻量级的.用于Java Servlet和JavaServer Pages(JSP)的Web应用程序服务器.它是Apache软件基金会的一个项 ...

  8. 算法学习笔记【8】| 单调队列优化DP

    单调队列:就是滑动窗口,可以求出定长 RMQ,时间复杂度线性. 优化 DP 首先把dp方程写成这个样子: 或者其他运算f[i]=max(或者其他运算){f[j]+calc(i,j)}<scrip ...

  9. 【已解决】Hadoop_07 Hadoop启动超时失败

  10. Linux——ssh登录很慢解决方法

    1.背景 在同一机房中,有多台安装了CentOS 7操作系统的服务器,它们的配置除了IP地址不同外基本相同.这些服务器的资源利用率都不高,但在使用SSH连接时,发现有几台服务器连接速度较慢,可能需要等 ...