天天看點

建構企業DNS的注意事項

在對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>&gt; ${STATS}</code>

<code>  </code><code>rndc stats &gt; </code><code>/dev/null</code> <code>2&gt;&amp;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