在對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
<code>tar</code> <code>xvf bind-9.9.9-P1.</code><code>tar</code>
<code>cd</code> <code>bind-9.9.9-P1</code>
<code>cd</code> <code>contrib/</code>
<code>cd</code> <code>queryperf/</code>
<code>.</code><code>/configure</code>
<code>make</code>
<code>cp</code> <code>queryperf </code><code>/usr/bin/</code>
在目前目錄建立test.txt的測試文本,文本内容為本地需要解析的域名:
<code>[root@DNS-Server queryperf]</code><code># cat test.txt </code>
<code>view.viewtest.com A </code><code>#對A記錄解析情況進行壓測,可以根據需要添加各種解析記錄。</code>
<code>view.viewtest.com A </code><code># 一般進行壓測會添加幾萬條類似的記錄以檢視性能</code>
<code>view.viewtest.com A</code>
使用queryperf指令進行壓測:
queryperf -d test.txt -s 114.114.114.114 # -d 指定壓測的解析内容檔案 -s 指定壓測的伺服器
queryperf的使用格式:
<code>queryperf [-d datafile] [-s server_addr] [-p port] [-q num_queries]</code>
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<code>[root@DNS-Server queryperf]</code><code># queryperf -d test.txt -s 192.168.1.10</code>
<code>DNS Query Performance Testing Tool</code>
<code>Version: $Id: queryperf.c,</code><code>v</code> <code>1.12 2007</code><code>/09/05</code> <code>07:36:04 marka Exp $</code>
<code>[Status] Processing input data</code>
<code>[Status] Sending queries (beginning with 192.168.1.10)</code>
<code>[Status] Testing complete</code>
<code>Statistics:</code>
<code> </code><code>Parse input </code><code>file</code><code>: once</code>
<code> </code><code>Ended due to: reaching end of </code><code>file</code>
<code> </code><code>Queries sent: 3 queries </code><code># 查詢請求的次數</code>
<code> </code><code>Queries completed: 3 queries </code><code># 查詢完成的次數</code>
<code> </code><code>Queries lost: 0 queries</code>
<code> </code><code>Queries delayed(?): 0 queries</code>
<code> </code><code>RTT max: 0.004663 sec</code>
<code> </code><code>RTT min: 0.004651 sec</code>
<code> </code><code>RTT average: 0.004656 sec</code>
<code> </code><code>RTT std deviation: 0.000006 sec</code>
<code> </code><code>RTT out of range: 0 queries</code>
<code> </code><code>Percentage completed: 100.00%</code>
<code> </code><code>Percentage lost: 0.00%</code>
<code> </code><code>Started at: Fri Dec 9 16:26:06 2016</code>
<code> </code><code>Finished at: Fri Dec 9 16:26:06 2016</code>
<code> </code><code>Ran </code><code>for</code><code>: 0.004697 seconds </code>
<code> </code><code>Queries per second: 638.705557 qps </code><code># 并發越多,值越大,每秒執行的查詢次數</code>
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檔案,擷取每秒請求數。
示例腳本:
25
26
27
28
<code>#!/bin/sh</code>
<code>#rndc status</code>
<code>STATS=</code><code>'/var/named/chroot/var/log/named_stats'</code>
<code>if</code> <code>[[ $</code><code># -ne 1 ]]</code>
<code>then</code>
<code> </code><code>echo</code> <code>"$0 [querys]"</code>
<code> </code><code>exit</code> <code>2</code>
<code>else</code>
<code> </code><code>which</code><code>=$1</code>
<code>fi</code>
<code>if</code> <code>[[ -f </code><code>"${STATS}"</code> <code>]]</code>
<code> </code><code>echo</code> <code>> ${STATS}</code>
<code> </code><code>rndc stats > </code><code>/dev/null</code> <code>2>&1</code>
<code> </code><code>echo</code> <code>"${STATS} not found."</code>
<code>case</code> <code>${</code><code>which</code><code>} </code><code>in</code>
<code>querys)</code>
<code> </code><code>RESULT=`</code><code>awk</code> <code>'{if {$2=="QUERY"} {print $1}}'</code> <code>${STATS}`</code>
<code> </code><code>;;</code>
<code> </code><code>*)</code>
<code> </code><code>echo</code> <code>"$0 [querys]"</code>
<code> </code><code>esac</code>
<code>echo</code> <code>${RESULT}</code>
DNS日常運維規範
確定所有監控均處于生效狀态;
所有的新機器,均在saltstack上完成安裝、部署,不能單獨操作;
所有針對dns架構調整的操作,均在流量低谷進行;
對叢集擴容時,務必加入新節點做壓測,同時重新開機服務,并檢測重新開機後各項名額是否正常;
本文轉自 酥心糖 51CTO部落格,原文連結:http://blog.51cto.com/tryingstuff/1881322