
Wir haben Bind 9.8.1.dfsg.P1-4ubuntu0.13 in Ubuntu 12.04, das auf einem nicht stark ausgelasteten Server (durchschnittliche Auslastung: 0,19, 0,12, 0,13) läuft und Anfragen für kleine Büronetzwerke mit MacOS- und Ubuntu-Workstations bedient.
Ich habe einige DNS-Tests im Skript auf einem Container ausgeführt, der als DNS-Server läuft, und die Ergebnisse an InfluxDB gesendet.
#!/bin/bash
while true
do
rndc flush
bind_timeout=$( dig @192.168.128.3 redhat.com | grep 'Query time' | awk '{ print $4 }' )
google_timeout=$( dig @8.8.8.8 redhat.com | grep 'Query time' | awk '{ print $4 }' )
yandex_timeout=$( dig @77.88.8.8 redhat.com | grep 'Query time' | awk '{ print $4 }' )
curl -i -XPOST 'http://ts.example.lab:8086/write?db=dnstest' -d "bind,server=bind,without_cache=yes value=$bind_timeout" &
curl -i -XPOST 'http://ts.example.lab:8086/write?db=dnstest' -d "google,server=google,without_cache=yes value=$google_timeout" &
curl -i -XPOST 'http://ts.example.lab:8086/write?db=dnstest' -d "yandex,server=yandex,without_cache=yes value=$yandex_timeout" &
wait
bind_timeout=$( dig @192.168.128.3 redhat.com | grep 'Query time' | awk '{ print $4 }' )
google_timeout=$( dig @8.8.8.8 redhat.com | grep 'Query time' | awk '{ print $4 }' )
yandex_timeout=$( dig @77.88.8.8 redhat.com | grep 'Query time' | awk '{ print $4 }' )
curl -i -XPOST 'http://ts.example.lab:8086/write?db=dnstest' -d "bind,server=bind,without_cache=no value=$bind_timeout" &
curl -i -XPOST 'http://ts.example.lab:8086/write?db=dnstest' -d "google,server=google,without_cache=no value=$google_timeout" &
curl -i -XPOST 'http://ts.example.lab:8086/write?db=dnstest' -d "yandex,server=yandex,without_cache=no value=$yandex_timeout" &
wait
sleep 5
done
Ich habe festgestellt, dass Bind auf Anfragen langsamer reagiert als8.8.8.8Und77.88.8.8Dies ist in den Grafiken zu sehen:
Cache leeren vor der ersten Anfragereihe mit rndc flush
.Bind verwendet Google8.8.8.8Und8.8.4.4als Spediteure:
Leeren Sie niemals den Cache von laufenden Bind. Bind verwendet Google8.8.8.8Und8.8.4.4als Spediteure:
Leeren des Cache vor der ersten Anforderungsserie mit rndc flush
. Bind verwendet eine aktualisierte Liste von Root-Servern als Weiterleitungen:
Leeren Sie niemals den Cache eines laufenden Bind-Vorgangs. Bind verwendet eine aktualisierte Liste von Root-Servern als Weiterleitungen:
Warum ist die maximale Abfragezeit (etwa 5 K im ersten Diagramm und 2,5 K im dritten Diagramm) mit öffentlichen DNS von Google länger als bei Root-Servern?
Warum ist die Abfrage über Bind langsamer als die direkte Abfrage öffentlicher DNS-Server?
Stimmt bei meinen Tests möglicherweise etwas nicht?
AKTUALISIERUNG 1
In den Diagrammen ist eine TTL von 20 Sekunden angegeben – das ist falsch. Die TTL für redhat.com beträgt 60 Sekunden.
Antwort1
Ihre Tests messen die Gesamtzeit für die Ausführung Ihrer Abfrage, einschließlich
- Netzwerkverzögerung von und zu der Maschine, auf der Ihr Testskript ausgeführt wird
- Verarbeitungszeit auf dem zu testenden Nameserver
- Zeit, die der getestete Nameserver damit verbringt, auf Antworten von anderen Nameservern zu warten, d. h. Zeit für die Ausführung rekursiver Unterabfragen
Die Ergebnisse entsprechen weitgehend den Erwartungen.
- Wenn Sie Ihren lokalen BIND-Server abfragen, ohne den Cache zu leeren, kommt die Antwort meistens aus dem Cache. Selbst wenn die TTL für den A RR abgelaufen ist, befindet sich der NS RR noch im Cache, sodass nur der A RR selbst extern angefordert werden muss.
- Wenn Sie Ihren lokalen BIND-Server nach dem Leeren des Cache abfragen undnichtKonfigurierte Weiterleitungen, Ihr lokaler BIND-Server führt eine rekursive Abfrage aus, beginnend beim Stammserver abwärts.
- Wenn Sie nach dem Leeren des Caches eine Abfrage an Ihren lokalen BIND-Server senden und die Google-Server als Weiterleitungen konfiguriert haben, leitet Ihr lokaler BIND-Server die Abfrage unverändert an einen der Google-Server weiter, der die Abfrage dann entweder aus seinem Cache beantwortet oder eine rekursive Abfrage ausführt. Beachten Sie, dass Sie keinen Einfluss auf den Cache der Google-Server haben.
Folglich sind Abfragen an Ihren lokalen BIND-Server ohne vorheriges Leeren des Caches am schnellsten und werden nicht von der Weiterleitungskonfiguration beeinflusst. Abfragen an Ihren lokalen BIND-Server nach dem Leeren des Caches und mit den als Weiterleitungen konfigurierten Google-Servern sind langsamer als direkte Abfragen an die Google-Server, da letztere den Overhead aufweisen, der entsteht, wenn sie zuerst Ihren lokalen BIND-Server durchlaufen.