Solaris上对比测试BIND和Nominum两个DNS软件性能

  BIND,没什么说的了,自1983年Paul Mockapetris发明后,就成为Internet中DNS的事实上的标准,由ISC(Internet Software Consortium)负责维护,具体的开发由
Nominum(www.nominum.com)公司来完成,BIND 9.x是免费软件,为Solaris的标准配置,即便电信中也绝大多数采用BIND8.x/9.x。

但2002 年10月21日,对Internet的13台DNS根域名服务器的持续了一个小时的拒绝服务攻击,给人们敲响了警钟,采用新的算法,提升DNS性能,是一 种方法,Nominum出继续升级免费的BIND外,还开发了新算法的Nominum Foundation CNS DNS软件,有好事同事,改不了工程师的老毛病,好奇并对BIND和Nominum的性能进行了对比测试,分享如下:

1。准备机器:

采用Sun Fire V240服务器,1x 1GHz USIIIi, 512MB内存,4x 1000Base-T网口,装Solaris 10, Sun Studio 10, 联通到Internet外网。

v240:/# showrev
Hostname: v240
Hostid: 838af0bd
Release: 5.10
Kernel architecture: sun4u
Application architecture: sparc
Hardware provider: Sun_Microsystems
Domain:
Kernel version: SunOS 5.10 Generic_118822-08

v240:/# cd /opt/SUNWspro/bin
v240:/# ./version
Machine hardware:   sun4u
OS version:         5.10
Processor type:     sparc
...
Sun Studio 10
        Sun Studio 10 C Compiler
        Sun Studio 10 C++ Compiler
        Sun Studio 10 Tools.h++ 7.1
...

v240:/# which cc
/opt/SUNWspro/bin/cc

2。配DNS - DIND 9.2.4

配主机文件:

v240:/# vi /etc/hosts
#
# Internet host table
#
127.0.0.1       localhost
192.168.0.55    v240 v240.example.com loghost

打开DNS开关文件:

v240:/# cd vi /etc/nsswith.conf
...
hosts:      files  dns
...

配DNS client文件,DNS client指向网通和本机:

v240# vi /etc/resolv.conf
nameserver 192.168.0.55     //本机IP
nameserver 202.x.x.x            //xxDNS

配DNS服务器rndc 文件:

v240# vi /etc/rndc.conf
# Start of rndc.conf
key "rndc-key" {
        algorithm hmac-md5;
        secret "qb2cKV1j07PXbv//QQPytA==";
};

options {
        default-key "rndc-key";
        default-server 127.0.0.1;
        default-port 953;
};
# End of rndc.conf       

配DNS服务器named.conf文件:

v240# vi /etc/named.conf
key "rndc-key" {
       algorithm hmac-md5;
       secret "qb2cKV1j07PXbv//QQPytA==";
};

controls {
       inet 127.0.0.1 port 953
               allow { 127.0.0.1; } keys { "rndc-key"; };
};

options {
                  version "$Id, worldhello.net";
                  directory "/var/named";
                  pid-file  "named.pid";
                  allow-query { any; };
                  notify yes;
                  recursion yes;
          };
          zone "." in {
                  type hint;
                  file "db.cache";
          };
          zone "example.com" in {
                  type master;
                  file "db.example.com";
          };
          zone "0.168.192.in-addr.arpa" in {
                  type master;
                  file "db.0.168.192";
          };
          zone "0.0.127.in-addr.arpa" in {
                  type master;
                  file "db.local";
          };

配DNS服务器cache文件:

v240# vi /var/named/db.cache
.                        3600000      NS    D.ROOT-SERVERS.NET.
D.ROOT-SERVERS.NET.      3600000      A     128.8.10.90
;
; formerly NS.NASA.GOV
;
.                        3600000      NS    E.ROOT-SERVERS.NET.
E.ROOT-SERVERS.NET.      3600000      A     192.203.230.10
;
; formerly NS.ISC.ORG
;
.                        3600000      NS    F.ROOT-SERVERS.NET.
F.ROOT-SERVERS.NET.      3600000      A     192.5.5.241
;
; formerly NS.NIC.DDN.MIL
;
.                        3600000      NS    G.ROOT-SERVERS.NET.
G.ROOT-SERVERS.NET.      3600000      A     192.112.36.4
;
; formerly AOS.ARL.ARMY.MIL
;
.                        3600000      NS    H.ROOT-SERVERS.NET.
H.ROOT-SERVERS.NET.      3600000      A     128.63.2.53
;
; formerly NIC.NORDU.NET
;
.                        3600000      NS    I.ROOT-SERVERS.NET.
I.ROOT-SERVERS.NET.      3600000      A     192.36.148.17
;
; temporarily housed at NSI (InterNIC)
;
.                        3600000      NS    J.ROOT-SERVERS.NET.
J.ROOT-SERVERS.NET.      3600000      A     198.41.0.10
;
; housed in LINX, operated by RIPE NCC
;
.                        3600000      NS    K.ROOT-SERVERS.NET.
K.ROOT-SERVERS.NET.      3600000      A     193.0.14.129
;
; temporarily housed at ISI (IANA)
;
.                        3600000      NS    L.ROOT-SERVERS.NET.
L.ROOT-SERVERS.NET.      3600000      A     198.32.64.12
;
; housed in Japan, operated by WIDE
;
.                        3600000      NS    M.ROOT-SERVERS.NET.
M.ROOT-SERVERS.NET.      3600000      A     202.12.27.33

配DNS服务器本机文件:

v240# vi /var/named/db.local
$TTL 5h
0.0.127.in-addr.arpa. IN SOA example.com. root.example.com. (
                1999062801      ;serial number (yyymmmdd##)
                10800           ;refresh every 3 hours
                3600            ;retry every 1 hours
                604800          ;expore after a week
                86400 )         ;TTL of 1 day
; Name servers
0.0.127.in-addr.arpa.           IN NS v240.example.com.
1                               IN PTR localhost

配DNS服务器本彧文件:

v240# vi /var/named/db.example.com
$TTL 5h
example.com. IN SOA example.com. root.example.com. (
                1999062804      ;serial number (yyymmmdd##)
                10800           ;refresh every 3 hours
                3600            ;retry every 1 hours
                604800          ;expore after a week
                86400 )         ;TTL of 1 day
; Name servers
example.com.              IN NS v240.example.com.
; Addresses
localhost                 IN A 127.0.0.1
v240.example.com.         IN A 192.168.0.55

v20z                      IN A 192.168.0.50

配DNS服务器反向文件:

v240# vi /var/named/db.0.168.192
$TTL 5h
0.168.192.in-addr.arpa. IN SOA example.com. root.example.com. (
                1999070501      ;serial number (yyymmmdd##)
                10800           ;refresh every 3 hours
                3600            ;retry every 1 hours
                604800          ;expore after a week
                86400   )       ;TTL of 1 day
; Name servers
1.1.10.in-addr.arpa.                 IN NS v240.example.com.

55                                   IN PTR v240.example.com.
50      

启动DNS服务:

v240# svcs -a |grep dns
disabled       18:11:53 svc:/network/dns/server:default
online         18:12:42 svc:/network/dns/client:default


v240# svcs -a |grep dns
v240# svcadm enable svc:/network/dns/server:default

试验DNS解析:

v240# bslookup

(可用www.sohu.com等)

v240# dig @202.106.0.20

; <<>;>; DiG 9.2.4 <<>;>; @202.106.0.20
;; global options:  printcmd
;; Got answer:
;; ->;>;HEADER<<- opcode: QUERY, status: NOERROR, id: 83
;; flags: qr rd ra; QUERY: 1, ANSWER: 13, AUTHORITY: 0, ADDITIONAL: 13

;; QUESTION SECTION:
;.                              IN      NS

;; ANSWER SECTION:
.                       86440   IN      NS      B.ROOT-SERVERS.NET.
.                       86440   IN      NS      C.ROOT-SERVERS.NET.
....


3。安装queryperf测试程序:

解queryperf包:

v240# gzcat queryperf-nominum-2.1.tar.gz |tar xvf -
x queryperf-nominum-2.1, 0 bytes, 0磁带块
x queryperf-nominum-2.1/input, 0 bytes, 0磁带块
x queryperf-nominum-2.1/input/sample.0, 101 bytes, 1磁带块
x queryperf-nominum-2.1/input/sample.1, 304 bytes, 1磁带块
...

编译:

v240# ./configure
checking for gcc... gcc
checking for C compiler default output... a.out
checking whether the C compiler works... yes
...

v240# make
gcc  -DPACKAGE_NAME=/"/" -DPACKAGE_TARNAME=/"/" -DPACKAGE_VERSION=/"/" -DPACKAGE_STRING=/"/" -DPACKAGE_BUGREPORT=/"/" -DHAVE_LIBSOCKET=1 -DHAVE_LIBNS
L=1 -DHAVE_GETADDRINFO=1 -DHAVE_GETNAMEINFO=1 -c queryperf.c
gcc  -DPACKAGE_NAME=/"/" -DPACKAGE_TARNAME=/"/" -DPACKAGE_VERSION=/"/" -DPACKAGE_STRING=/"/" -DPACKAGE_BUGREPORT=/"/" -DHAVE_LIBSOCKET=1 -DHAVE_LIBNS
L=1 -DHAVE_GETADDRINFO=1 -DHAVE_GETNAMEINFO=1  queryperf.o  -lnsl -lsocket -lresolv -lm -o queryperf
...


4。测试BIND 9.2.4

编辑包含测试域名的test文件(>; 30000个测试域名):

v240# vi test
www.sina.com.cn A
www.sohu.com    A
www.sun.com     A
...
(more than 30000)

向Sun Fire V240发出带30000测试域名的请求:
v240:/# ./queryperf -d test -s 192.168.0.55

DNS Query Performance Testing Tool

Nominum Version 2.1

Version: $Id: queryperf.c,v 1.20 2005/03/08 19:10:03 gson Exp $

[Status] Processing input data
[Status] Sending queries (beginning with 192.168.0.55)
[Timeout] Query timed out: msg id 1
[Timeout] Query timed out: msg id 3
[...
Warning: Received a response with an unexpected (maybe timed out) id: 28
[Status] Testing complete

Statistics:

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

  Queries sent:         33000 queries
  Queries completed:    32980 queries
  Queries lost:         20 queries

  Percentage completed:  99.94%
  Percentage lost:        0.06%

  Started at:           Fri Jul  8 14:48:36 2005
  Finished at:          Fri Jul  8 14:48:53 2005
  Ran for:              17.379295 seconds

  Queries per second:   1897.660406 qps

即Sun Fire V240(1x 1Ghz USIIIi, 512MB内存),在此测试环境下,处理 DNS请求1897.7个每秒,丢失率0.06%。


5。安装Nominum Foundation CNS DNS软件

修改配置并卸载BIND DNS服务:


v240:/# pkill -9 named

v240:/# svcadm disable svc:/network/dns/server:default

v240:/# vi /etc/resolv.conf
nameserver 192.168.0.20 //本机IP

解Nominum Foundation CNS包:

v240:/# uncompress cns-1.5.3.2e-2-2005.10.01-solaris-10-sparc.tar.Z
v240:/# tar xvf cns-1.5.3.2e-2-2005.10.01-solaris-10-sparc.tar

安装Nominum Foundation CNS:

v240:/# pkgadd -d nomutils-2.0.27.0.1-sol10-sparc
v240:/# pkgadd -d cns-1.5.3.2.2-sol10-sparc
v240:/# pkgadd -d nomnanny-2.0.27.0.1-sol10-sparc
v240:/# pkgadd -d nomsdk-2.0.27.1.1-sol10-sparc
v240:/# pkgadd -d snmpproxy-1.0.3.3.3-sol10-sparc
(回答都是yes)

启动Nominum Foundation CNS DNS服务:

v240:/# /etc/init.d/cns start

6。测试DNS - Nominum Foundation CNS

测试域名同BIND 9.2.4

10 或 100个并发,向Sun Fire V240发大于30000个DNS请求:

v240:/# ./queryperf -d test -s v240 -q 10

DNS Query Performance Testing Tool

Nominum Version 2.1

Version: $Id: queryperf.c,v 1.20 2005/03/08 19:10:03 gson Exp $

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

Statistics:

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

  Queries sent:         33000 queries
  Queries completed:    33000 queries
  Queries lost:         0 queries

  Percentage completed: 100.00%
  Percentage lost:        0.00%

  Started at:           Fri Jul  8 15:41:28 2005
  Finished at:          Fri Jul  8 15:41:32 2005
  Ran for:              4.336514 seconds

  Queries per second:   7609.799023 qps

即Sun Fire V240(1x 1Ghz USIIIi, 512MB内存),在此测试环境下,处理 DNS请求7609.8个每秒,无丢失0.00%。

性能提高:

7609.8个每秒 / 1897.7个每秒 = 4.01 倍
(Sun Fire V20z, 1x 1.6GHz AMD Opteron, 20354 qps)



7。结论

Nominum是 BIND和Nominum Foundation CNS的开发者,真的就在1个CPU,512MB内存的小服务器上, DNS性能能相差4倍的吗?测试数值显示的是这样,但测试方法有何不妥之处呢?我自己有点疑问,请点评。

如真是这样,常见省级DNS处理约4000qps, 岂不1个CPU就搞定啦?但电信常配Sun Fire V890服务器,8x双core,性能能否就说是16x倍呢?

你可能感兴趣的:(测试,Solaris,sun,internet,compiler,DNS服务器)