在对DNS做了一些常见的配置学习之后,我们就可以再探讨一下企业级DNS的构建方法了。企业级DNS由于要承载高并发,大流量,所以硬件性能和全局的架构设计就显得非常重要。在实际的生产环境中,如果并发量特别大的话,关闭SELINUX 和防火墙可以大幅提高DNS性能。同时,至少使用千兆网络。
DNS命名规范
-
26个英文字母
-
“0,1,2,3,4,5,6,7,8,9”十个数字
-
“-”(英文中的连词号)
-
最多63字节长度
如果不按照这个规范,需要在master-view文件上配置check-names ignore;
DNS压测
在部署线上的服务时,需要对服务的状态进行压测。对DNS压测可以使用queryperf .
测试示例:
下载bind-9.9.9-P1.tar ,并执行下面命令安装:
1
2
3
4
5
6
7
|
tar
xvf bind-9.9.9-P1.
tar
cd
bind-9.9.9-P1
cd
contrib/
cd
queryperf/
.
/configure
make
cp
queryperf
/usr/bin/
|
在当前目录创建test.txt的测试文本,文本内容为本地需要解析的域名:
1
2
3
4
|
[root@DNS-Server queryperf]
# cat test.txt
view.viewtest.com A
#对A记录解析情况进行压测,可以根据需要添加各种解析记录。
view.viewtest.com A
# 一般进行压测会添加几万条类似的记录以查看性能
view.viewtest.com A
|
使用queryperf命令进行压测:
queryperf -d test.txt -s 114.114.114.114 # -d 指定压测的解析内容文件 -s 指定压测的服务器
queryperf的使用格式:
1
|
queryperf [-d datafile] [-s server_addr] [-p port] [-q num_queries]
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
[root@DNS-Server queryperf]
# queryperf -d test.txt -s 192.168.1.10
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 192.168.1.10)
[Status] Testing complete
Statistics:
Parse input
file
: once
Ended due to: reaching end of
file
Queries sent: 3 queries
# 查询请求的次数
Queries completed: 3 queries
# 查询完成的次数
Queries lost: 0 queries
Queries delayed(?): 0 queries
RTT max: 0.004663 sec
RTT min: 0.004651 sec
RTT average: 0.004656 sec
RTT std deviation: 0.000006 sec
RTT out of range: 0 queries
Percentage completed: 100.00%
Percentage lost: 0.00%
Started at: Fri Dec 9 16:26:06 2016
Finished at: Fri Dec 9 16:26:06 2016
Ran
for
: 0.004697 seconds
Queries per second: 638.705557 qps
# 并发越多,值越大,每秒执行的查询次数
|
DNS监控
可以通过结合zabbix来实现对DNS的监控。对于DNS的监控需要注意以下几点:
系统基础性能的监控: 使用zabbix自带的模板可以实现对服务器CPU,内存,存储,磁盘,系统负载,网卡流量进行监控。
LOOPBACK地址绑定状态监控:在LVS做DNS负载均衡调度的架构中,dnsserver在集群中充当real server的角色,DR模式下,需要绑定loopback地址方能通信,因此当loopback地址没有绑定上时,lvs健康检查可以通过,但是后端的dnsserver会丢弃请求的数据包,造成dns服务不可用。(可参见LVS DR模式的实现原理)
DNS数据与master数据一致性监控:
-
通过配置zabbix自定义的discovery功能,扫出dns配置中所有zone,然后分别对比slave和master每个zone的serial值,当slave与master的值持续5分钟不一致时报警。
-
通过编写脚本,每隔15分钟扫描master上所有域名解析的结果,与每一个slave上的结果做对比,当出现不一致时报警。
DNS响应时间的监控: 远端主机跑在fullnat 模式下(提供高可用),通过dig命令检查dnsserver的响应时间。
DNS每秒请求数监控:每台dns主机上编写zabbix脚本,分析named_status文件,获取每秒请求数。
示例脚本:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
#!/bin/sh
#rndc status
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日常运维规范
确保所有监控均处于生效状态;
所有的新机器,均在saltstack上完成安装、部署,不能单独操作;
所有针对dns架构调整的操作,均在流量低谷进行;
对集群扩容时,务必加入新节点做压测,同时重启服务,并检测重启后各项指标是否正常;
本文转自 酥心糖 51CTO博客,原文链接:http://blog.51cto.com/tryingstuff/1881322