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. 逆向通达信Level-2 续四 (调试level2数据接口)

    逆向通达信Level-2 续十一 (无帐号登陆itrend研究版) 逆向通达信Level-2 续十 (trace脱壳) 逆向通达信Level-2 续九 (无帐号打开itrend研究版) 逆向通达信Le ...

  2. 解锁通达信金融终端Level-2功能

    外挂方式,不修改原程序. 逆向通达信Level-2 续十一 (无帐号登陆itrend研究版) 逆向通达信Level-2 续十 (trace脱壳) 逆向通达信Level-2 续九 (无帐号打开itren ...

  3. CSS(选择器、字体属性、文本属性、三种引入方式)

    css简介 CSS 是层叠样式表 ( Cascading Style Sheets ) 的简称. 有时我们也会称之为 CSS 样式表或级联样式表. CSS 是也是一种标记语言 CSS 主要用于设置 H ...

  4. 记录--为什么没有人能讲清楚 BFC?

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 一.你看得懂权威的解释吗? 1. CSS 规范中对 BFC 的描述 CSS 规范(英文) | 中文翻译 浮动,绝对定位的元素,非块盒的块容 ...

  5. 记录--Vue 右键菜单的秘密:自适应位置的实现方法

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 下图这个情景,你是否也遇到过? 当你右键点击网页上的某个元素时,弹出的菜单被屏幕边缘遮挡了,导致你无法看清或选择菜单项? 上图中右键菜单的 ...

  6. 《Go程序设计语言》学习笔记之结构体

    <Go程序设计语言>学习笔记之结构体 一. 环境 Centos8.5, go1.17.5 linux/amd64 二. 概念 结构体是将零个或者多个任意类型的命名变量组合在一起的聚合数据类 ...

  7. hdfs中acl权限管理的简单实用

    1.背景 在我们开发的过程中有这么一种场景, /projectA 目录是 hadoopdeploy用户创建的,他对这个目录有wrx权限,同时这个目录属于supergroup,在这个组中的用户也具有这个 ...

  8. drools执行指定的规则

    目录 1.背景 2.方案 2.1 通过AgendaFilter来实现 2.2 通过entry-point来实现 3.实现 3.1 需求 3.2 drl 文件编写 3.3 部分java代码 3.4 运行 ...

  9. Linux服务器下启动和关闭node

    首先将node工程的代码和node_modules目录上传到服务器的某一个目录下 1.用forever 进行管理 前提:linux下已经安装了node npm install -g forever / ...

  10. SqlServer查询表的所有字段属性及其是否是主外键

    CREATE PROC [dbo].[sp_help2] @TableName VARCHAR(50) = NULL AS SET NOCOUNT ON SET TRANSACTION ISOLATI ...