вторник, 9 октября 2012 г.

Тестирование производительности NS-сервера (DNS)

Потребовалось мне протестировать NS-серверы на произоводительность при включенном сборе статистике по запросам. Гуглением выяснилось что существует утилита dnsperf (по аналогии с iperf), но в репозиториях убунты и дебиана она отсутствует (точнее есть в ppa, но датирована 2008 годом) и придётся собирать её ручками из исходников.

Итак, идём на ftp компании Nominum и забираем архив с исходниками последней версии (2.0.0.0-1 на момент написания):
 user@server:~/build$ wget ftp://ftp.nominum.com/pub/nominum/dnsperf/2.0.0.0/dnsperf-src-2.0.0.0-1.tar.gz
 user@server:~/build: tar xvf dnsperf-src-2.0.0.0-1.tar.gz
Чтобы скомпилировать dnsperf потребуется поставить несколько пакетов:
user@server:~/build$ sudo apt-get install libkrb5-dev libcap-dev libbind-dev libxml2-dev libssl-dev build-essential  
Для сборки требуется заголовочный файл "isc/hmacsha.h", который по какой-то причине отсутствует в дебиановском пакете libbind-dev (увидите "dns.c:46:25: error: isc/hmacsha.h: No such file or directory"), поэтому скачиваем исходники bind'а и ручками копируем необходимый файл в /lib/include:
 user@server:~/build$ apt-get source bind9  
 user@server:~/build$ sudo cp bind9-9.7.3.dfsg/lib/isc/include/isc/hmacsha.h /usr/include/isc/  
Обращаю внимание что исходники можно скачать не из-под рута (вообще под рутом лучше не сидеть). "bind9-9.7.3.dfsg" - имя каталога с исходниками bind'а.

Компилируем/собираем:
 user@server:~/build$ cd dnsperf-src-2.0.0.0-1  
 user@server:~/build/dnsperf-src-2.0.0.0-1$ ./configure  
 user@server:~/build/dnsperf-src-2.0.0.0-1$ make  
Дабы не захламлять систему предпочел не устанавливать dnsperf, а запускать прямо из каталога с исходниками. Если таки соберётесь устанавливать, то воспользуйтесь checkinstall.

Для тестов требуется файл с запросами к ns-серверу следующего формата:
<имя_записи> <тип_записи>
Пример файла:
user@server:~/build/dnsperf-src-2.0.0.0-1$ cat testqueries.txt  
yandex.ru A  
ya.ru A  
google.com A  
yandex.ru MX  
google.com MX  
На ftp-сервере Numinum есть тестовый файл с безумным количеством зон.

Теперь наконец-то можно приступить к тестированию:
 user@server:~/build/dnsperf-src-2.0.0.0-1$ ./dnsperf -p 53 -d testqueries.txt -s my-ns-server.org -l 60  
   
 [Status] Sending queries (to xxx.xxx.xxx.xxx)  
 [Status] Started at: Tue Oct 9 17:52:02 2012  
 [Status] Stopping after 60.000000 seconds  
 [Timeout] Query timed out: msg id 56113  
 [Status] Testing complete (time limit)  
   
 Statistics:  
   
  Queries sent:     4065386  
  Queries completed:  4065385 (100.00%)  
  Queries lost:     1 (0.00%)  
   
  Response codes:    NOERROR 4007017 (98.56%), SERVFAIL 39824 (0.98%), NXDOMAIN 18544 (0.46%)  
  Average packet size: request 33, response 86  
  Run time (s):     60.001270  
  Queries per second:  67754.982520  
   
  Average Latency (s): 0.001462 (min 0.000098, max 0.023186)  
  Latency StdDev (s):  0.000741  

Вкратце опишу параметры утилиты dnsperf:
  • -a local_address - адрес, с которого будут отправлены запросы
  • -b bufsize - размер буферов приёма и отправки в килобайтах
  • -c clients - количество имитируемых клиентов, для каждого клиента используется свой сокет для отправления (порт)
  • -d datafile - путь к файлу с запросами, если он не указан dnsperf будет брать запросы из стандартного ввода (stdin)
  • -D - добавляет к отправляемым запросам бит DO (DNSSEC OK)
  • -e - включает EDNS0, добавляя к отправляемым пакетам запись OPT (RFC 2671)
  • -f family - указывает какой протокол будет использовать для отправки:
    inet - IPv4
    inet6 - IPv6
    any - IPv4 и IPv6
  • -h - показать помощь
  • -l limit - указывает время тестирования в секундах
  • -n runs_through_file - сколько раз будет прогнан файл запросов
  • -p port - указывает на какой порт сервера будут отправлены запросы
  • -q num_queries - максимальное число отправляемых запросов
  • -Q max_qps - ограничивает количество отправленных запросов в секунду
  • -s server - сервер, которому будем отправлять запросы
  • -t timeout - таймаут для запросов
  • -u - использовать динамические запросы, требуется другой формат входного файла. Возможно позже его опишу
  • -v - включаем режим отладки, будут отображены некорректные запросы (SERVFAIL и т.п.)
  • -x local_port - порт с которого будут отправлены запросы
  • -y [algorithm:]name:secret - добавляет TSIG-запись ко всем отправленным пакетам. Алгоритм по умолчанию - hmac-md5
Если есть вопросы - буду рад ответить в комментариях.

Старница диагностических утилит на сайте Numinum: http://www.nominum.com/support/measurement-tools/

Комментариев нет:

Отправить комментарий