• 架构师成长之路6.6 DNS服务器搭建(构建企业级DNS)


    点击返回架构师成长之路

    架构师成长之路6.6 DNS服务器搭建(构建企业级DNS)

    采用LVS-DR模式负载均衡,多IDC,多套DNS集群,通过master-slave技术保证dns配置的一致性。

    1.构建高性能、高可用性DNS

    物理层:

    • 首先确保两台lvs不在同一机柜、同一物理交换机接入;
    • 其次确保将所有dns服务器也做到不在同一机柜、同一物理交换机接入。
    • 同时,在不同的idc构建多套dns集群,为客户端提供可切换的配置。

    服务层:

    • 坚决摒弃lvs上端口检测这种方式,采用自定义脚本检测,为dns的健康检测单独设置一个域名,就为了lvs检测dns是否存活而设计。

    脚本示例:
       

    客户端层:

    • 多idc之间的流量切换是通过客户端的健康检测cron实现的,脚本每分钟运行一次,分别检测每个dns集群虚地址的可用性。

    2.构建高可用性DNS

    • 通过lvs可以对每个集群做横向扩容,是否需要扩容的依据是对现有系统的压测结果,以及实时的监控数据。
    • 亦或者可以在最靠近应用层处,加上一层cache-only集群,但前提是你的线上环境中,没有任何系统依赖于dns负载均衡。

     3. 压测 

    安装queryperf

    下载bind源码:wget http://ftp.isc.org/isc/bind9/9.7.3/bind-9.7.3.tar.gz
    解压bind源码:tar zxf bind-9.7.3.tar.gz
    进入解压后bind源码目录:cd bind-9.7.3/contrib/queryperf/
    编译:./configure
    make
    会在当前目录下出现queryperf,可以将它拷贝至/usr/bin/下
    编辑域名记录文件(test.txt),格式如下:
    	www.baidu.com A
    	www.baidu.com A
    	www.baidu.com A
    	www.baidu.com A
    	www.baidu.com A
    压测命令:queryperf -d test.txt -s 8.8.8.8 

     在相同idc的压测下,单台dns-server的qps可以达到35~40k

    4. 监控   可结合zabbix监控 

    系统基础性能:

    • 使用zabbix自带模板即可。Cpu、内存、主机存活、磁盘空间、主机运行时间、系统load

    Loopback地址绑定状态监控

    • 该架构中,dnsserver在集群中充当realserver的角色,在dr中,需要绑定loopback地址方能通信,因此当loopback地址没有绑定上时,lvs健康检测通过,但是当请求到达dnsserver时,请求被拒绝,dns集群会出现异常。

    Dns数据与master一致性监控

    此处建议方案是分为两部分:

    • 一是通过写zabbix自定义discovery,扫出dns配置中所有zone,然后分别对比slave和master每个zone的serial值,当slave与master的值持续5分钟不一致时报警
    • 二是写脚本,每15分钟扫一遍master上所有域名解析结果,与每个slave的结果做对比,当出现结果不一致情况时,报警

    Dns响应时间监控

    • 远端一组主机跑在fullnat下(提供高可用),通过dig命令检测dnsserver的响应时间。

    Dns每秒请求数监控

    • 在每台dns主机上,编写zabbix脚本,分析named_stats文件,获取每秒请求数

    #!/bin/bash
    #rndc stats
    STATS='/var/named/chroot/var/log/named_stats'
    if [[ $# -ne 1 ]]
    then
      echo "$0 [querys]"
      exit 2
    else
      which=$1
    fi
    
    if [[ -f "${STATS}" ]]
    then
      echo > ${STATS}
      rndc stats >/dev/null 2>&1
    else
      echo "${STATS} not found."
      exit 2
    fi
    
    case ${which} in
    querys)
      RESULT=`awk '{if ($2=="QUERY") {print $1}}' ${STATS}`
    ;;
    *)
      echo "$0 [querys]"
      exit 2
    ;;
    esac
    
    echo ${RESULT}

    Dns可用性监控

    • 远端一组主机跑在fullnat下(提供高可用),通过host命令检测dnsserver的可用性,脚本与lvs健康检测脚本类似。

    .......

  • 相关阅读:
    rbac 授权
    docker overlayfs k8s overlayfs 目录文件太大
    pod oom
    文档怎么写
    fabric
    nacos 报错 Unknown column 'encrypted_data_key' in 'field list'
    【Oracle】RAC在启动时ohasd超时导致启动失败
    【SQLServer】查看sqlserver中的历史查询记录
    【Oracle】High CPU (%sys) Usage On Oracle Linux 6 UEK3 RAC Node
    【MySQL】MySQL 5.7中过滤复制和部分复制的变化
  • 原文地址:https://www.cnblogs.com/yaoyaojcy/p/10275087.html
Copyright © 2020-2023  润新知