WEB架构之DNS-构建企业级DNS(03)

第1章 构建企业级DNS

1.1 硬件配置

CPU:12c以上配置,DNS只要使用CPU资源,此配置可以达到3万/s并发

内存:16G

网络:千兆

备注:服务器上线前进行压测,方便以后扩容等情况。

1.2 初始化系统

参见 系统初始优化 章节。

1.3 构建高性能、高可用DNS

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

图片[1]|WEB架构之DNS-构建企业级DNS(03)|leon的博客

1.3.1 高可用

1.3.1.1 物理层

1. 确保两台lvs不在同一机柜、同一物理交换机接入

2. 确保将所有dns服务器也做到不在同一机柜、同一物理交换机接入

3. 在不同的IDC构建多套dns集群,为客户端提供可切换的配置

1.3.1.2 服务层

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

脚本示例:

#!/bin/bash

timeout=5       # 服务不可用时间在与此处timeout时间及keeplive中的retry时间
Q="单独设计的要检测解析的域名"
host="/usr/bin/host"

# $1为要监测DNS的IP地址
if test -z "$1"; then
      echo "You need to supply a DNS server to check. Qutting"
      exit;
fi
SERVER=$1

ERC=`$host -s -W $timeout $Q $SERVER > /dev/null 2>&1; echo $?`
if [ $ERC -eq 0 ]; then
      exit 0    # 如果DNS能解析的话返回0,keeplive什么都不做
else
    exit 1      # 如果DNS不能解析或者超时则返回1,keeplive会踢掉此台DNS
fi

1.3.1.3 客户端层

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

1.3.2 高性能

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

1.4 压力测试

1.4.1 安装queryperf

[root@linux-node1 ~]# cd /server/tools/
# 12以上的新版本bind9源码中已经不包含queryperf
[root@linux-node1 tools]# wget ftp://ftp.isc.org/isc/bind9/9.12.4/bind-9.12.4.tar.gz
[root@linux-node1 tools]# tar xf bind-9.12.4.tar.gz
[root@linux-node1 tools]# cd bind-9.12.4/contrib/queryperf/
[root@linux-node1 bind-9.17.2]# ./configure
[root@linux-node1 bind-9.17.2]# make
[root@linux-node1 queryperf]# cp queryperf /usr/bin/

1.4.2 使用qeryperf

1.4.2.1 建立压测准备文件

[root@linux-node1 ~]# vim test.txt
www.leonshadow.com   A
www.leonshadow.com   A
www.leonshadow.com   A
…… (个数根据测试结果进行调整)
www.leonshadow.com   A
www.leonshadow.com   A

1.4.2.2 执行压测命令

[root@linux-node1 ~]# queryperf -s 10.10.10.102 -d test.txt

DNS Query Performance Testing Tool
Version: $Id: queryperf.c,v 1.12 2007/09/05 07:36:04 marka Exp $?

[Status] Processing input data
[Status] Sending queries (beginning with 10.10.10.102)
[Status] Testing complete

Statistics:

  Parse input file:     once
  Ended due to:         reaching end of file

  Queries sent:         59 queries      # 查询次数
  Queries completed:    59 queries
  Queries lost:         0 queries
  Queries delayed( ):   0 queries

  RTT max:         0.004210 sec
  RTT min:              0.001957 sec
  RTT average:          0.003261 sec
  RTT std deviation:    0.000665 sec
  RTT out of range:     0 queries

  Percentage completed: 100.00%         # 查询成功结果
  Percentage lost:        0.00%

  Started at:           Fri Jul 10 10:13:05 2020
  Finished at:          Fri Jul 10 10:13:05 2020
  Ran for:              0.012486 seconds

  Queries per second:   4725.292327 qps # 此配置可以支持的并发数
  • 命令解析:

-s:指定DNS服务器IP地址

-d:指定压测文件

备注:可以多做几次压力测试查看临界点在哪里。

1.5 服务监控(zabbix)

1.5.1 系统基础性能

使用zabbix自带模板即可,监控指标包括:

  1. CPU
  2. 内存
  3. 主机存活
  4. 磁盘空间
  5. 主机运行时间
  6. 系统load

1.5.2 Loopback地址VIP绑定状态监控

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

1.5.3 DNS主从数据一致性监控

1. 通过写zabbix自定义discovery,扫出dns配置中所有zone,然后分别对比slave和master每个zone的serial值,当slave与master的值持续5分钟不一致时报警。

  1. 写脚本,每15分钟扫一遍master上所有域名解析结果,与每个slave的结果做对比,当出现结果不一致情况时报警。

1.5.4 DNS响应时间监控

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

1.5.5 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}

1.5.6 DNS可用性监控

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

温馨提示:本文最后更新于2022-12-20 20:57:40,已超过492天没有更新。某些文章具有时效性,若文章内容或图片资源有错误或已失效,请联系站长。谢谢!
转载请注明本文链接:https://blog.leonshadow.cn/763482/2039.html
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享