Postfix – Performance Tuning – DNS Latenz reduzieren

Bei einem stark frequentiertem Mailserver auf Basis von Postfix gibt es oft noch einiges an Optimierungspotenzial. Eine Möglichkeit ist das Verringern von DNS-Lookup Wartezeiten.

Das Tutorial bezieht sich auf CentOS, eventuell kommt es bei anderen Distributionen zu leichten Abweichungen.

Installation eines lokalen DNS-Cache (BIND)

In der Postfix Dokumentation wird für „größere“ Mailserver-Systeme die Verwendung eines lokalen DNS-Servers angeraten. Für jede eingehende sowie ausgehende E-Mail werden je nach Konfiguration einige DNS-Lookups durchgeführt. Diese dauern in der Regel nur ein paar Millisekunden. Bei einem gewissen E-Maildurchsatz pro Sekunde kann Postfix aber durch die verkürzte Antwortzeit eines lokalen DNS-Caches einiges am Perfomance hinzugewinnen. Zuerst erfolgt die Installation von BIND und den passenden Werkzeugen.

yum install bind
yum install bind-utils

Dann fügen wir in /etc/named.conf in der Sektion option die Definition eines Forwarders hinzu.

options {
        ...

        forwarders {
                8.8.8.8;
        };

        ...
};

Nun werden alle Anfragen die BIND nicht selbst auflösen kann an den DNS-Server von Google weitergegeben und lokal gecached. Es kann natürlich auch ein anderer Nameserver verwendet werden. Wir fügen BIND nun noch in den Autostart hinzu und starten den Dienst neu.

#CentOS 6 
chkconfig named on
service named restart

#CentOS 7
systemctl enable named.service
systemctl restart named.service

Wir können den Erfolg nun kontrollieren indem wir DNS-Lookups mit unseren DNS-Cache ausführen. Der erste Aufruf dauert etwas länger weil BIND die Daten noch nicht im Cache gespeichert hat.

dig @127.0.0.1 der-linux-admin.de

; <<>> DiG 9.9.4-RedHat-9.9.4-14.el7 <<>> @127.0.0.1 der-linux-admin.de
; (1 server found)
;; global options: +cmd
;; Got answer:
...
;; Query time: 127 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Mo Aug 25 14:38:30 UTC 2014
;; MSG SIZE  rcvd: 274

Der zweite Aufruf dagegen funktioniert schon schneller.

dig @127.0.0.1 der-linux-admin.de

; <<>> DiG 9.9.4-RedHat-9.9.4-14.el7 <<>> @127.0.0.1 der-linux-admin.de
; (1 server found)
;; global options: +cmd
;; Got answer:
...
;; Query time: 1 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Mo Aug 25 14:40:24 UTC 2014
;; MSG SIZE  rcvd: 274

Wie wir sehen ist die Antwortzeit für den DNS-Lookup von 127 msec auf gerade mal 1 msec gesunken. Nun weisen wir unser System an den lokalen DNS-Server zu verwenden. Dazu passen wir die Zeilen in /etc/resolv.conf an. Wir ändern den bisherigen Nameserver-Eintrag auf unseren lokalen DNS-Server BIND.

nameserver 127.0.0.1

Nun sollte unser Server und somit auch Postfix und für alle DNS-Lookups unseren DNS-Cache befragen.

IPv6 DNS-Lookups ausschalten

Postfix ist in den Standardeinstellungen so konfiguriert, dass dieser mit IPv4 und auch mit IPv6 umgehen kann. IPv6 wird dabei sogar bevorzugt. Postfix frag nun also zuerst nach ob für eine Domain eine IPv6 Adresse vorhanden ist. Sollte dies nicht der Fall sein wird ein zweiter DNS-Lookup durchgeführt um die IPv4 Adresse zu ermitteln. Wir können Postfix so konfigurieren, dass nur IPv4 verwendet wird und somit mehrfache DNS-Lookups ausschalten. Dazu nehmen wir in der main.cf folgenden Änderung vor:

inet_protocols = all

ändern in

inet_protocols = ipv4

Anschliessend laden wir Postfix neu.

#CentOS 6
service postfix reload

#CentOS 7
systemctl reload postfix.service

Dies sollte schon ein spürbare Leistungsverbesserung bringen.

Fazit

Die Installation eines lokalen DNS-Caches ist eine wirkungsvolle Maßnahme um die Latenz zu entfernten DNS-Servern zu minimieren. Dies bringt bei einen Mailserver mit hohem E-Maildurchsatz schon einiges an Performance mehr. IPv6 in Postfix auszuschalten ist zwar eine Lösung, allerdings im Zuge der globalen Umstellung auf IPv6 nicht ratsam. Wir wollen uns doch keinem neuen Standard verweigern :)

Dazu lohnt ein Blick in die Dokumentation und Tuningtips für Postfix und auch die BIND Doku ist ganz nützlich.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.