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

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

  • 相关阅读:
    L3-028 森森旅游 题解(最短路)
    Codeforces Round #717 (Div. 2) 题解(A-D)
    大爽Python入门教程 总目录
    Django笔记&教程 2-4 视图常用
    python一对一教程:Computational Problems for Physics chapter 1-B Code Listings 1.7
    python一对一教程:Computational Problems for Physics chapter 1 Code Listings
    b站个人直播年报【大爽歌作】 介绍与演示
    架构漫谈阅读笔记03
    架构漫谈阅读笔记02
    架构漫谈阅读笔记01
  • 原文地址:https://www.cnblogs.com/yunqishequ/p/12582732.html
Copyright © 2011-2022 走看看