Nach vielen Gesprächen mit meinem Kollegen und den Entwicklern von Postfix sowie div. Folien und RFCs hier aus meiner Sicht die Fakten der Lastverteilung bei Mailservern
Mailserver bzw. das zugrunde liegende Konzept wurde für Lastverteilung und Ausfallsicherheit entwickelt.
Häufig tendiert man jedoch dazu, Loadbalancer vorzuschalten – in speziellen Szenarien mag das auch Sinn machen – muss aber abgewogen werden.
Ablauf einer Mailzustellung
1. DNS-Lookup nach MX-Records für Zieldomain oder für Relayserver
Das heißt, wenn ein Relayserver für die weitere Zustellung genutzt wird, erfolgt auch ein MX-Lookup
2. Gibt ein Hostname bzw. eine Ziel-Domain keine MX-Einträge her, gibt es einen Fallback auf A-Record Lookups.
RFC 5321 sagt hier:
a, SMTP clients must look up for an MX record;
b, if no MX record for domain is present, look up for an A Resource Record (RR), and if such record is present, treat it as an MX record;
c, if an MX record is present, clients MUST NOT use an A RR.
3. Auswertung der MX/A-Records durch Mailserver – gleichwertige werden gleichbehandelt
3.1 Verhalten wenn der ausgewählte MX-Server nicht reagiert
Konnte keine Zustellung erfolgen, bzw. gab es einen Fehler verstehe ich den RFC so, dass die Zustellung verzögert werden soll und nochmal der selbe Host probiert wird.
Ich zitiere hier Wikipedia/RFC:
„The sender MUST delay retrying a particular destination after one attempt has failed.“
Leider ist nicht klar definiert, was mit failed gemeint ist – meint es hier eine Verbindung zum Mailserver, welche mit 4xxx oder 5xxx-Fehler quittiert wird oder schon die nicht Erreichbarkeit.
3.1.1 Sonderfall – A oder MX-Eintrag mit mehr IPs:
Existiert hinter einem MX-Eintrag oder A-Eintrag mehr als eine IP zietiere ich hier Wietse Venema:
„If one MX record expands into multiple IP addresses, then RFC 5321 assumes that those addresses belong to the same host, and says that the SMTP client must try those addresses in the order as presented.
That is the dumbest idea in the RFC. Postfix takes a different approach so that mail doesn’t get stuck trying the same IP addresses in the same order over and over and over again.“
4. Hinweise zur Beeinflussung von DNS-Abfragen durch Mailserver:
Definiert man in Postfix den Relayhost mit
relayhost=relay.example
führt Postfix einen MX-Lookup – und wenn dieser scheitert einen A-Lookup durch
Definiert man in Postfix den Relayhost mit
relayhost=[relay.example]
wird ein MX-Lookup unterbunden und nur ein A-Lookup gemacht. Dies ist z.B. beim Relay über den smpt-Server von 1und1 nötig, da dieser keine MX-Einträge besitzt.
Ich möchte hier noch die Empfehlung von Peer Heinlein aufgreifen, die er auf der German Unix User Group Tagung ausgesprochen hat,
zwei gleichwertige MX-Einträge zu schalten, statt A-Einträge zu zweckentfremden. Nur so erkenenn einlieferende Mailserver auch, dass es sich um zwei unabhängige Mailsystem zur Einlieferung handelt.
Quellen:
https://www.heinlein-support.de/sites/default/files/mailserver-best-practice.pdf
http://en.wikipedia.org/wiki/MX_record
http://article.gmane.org/gmane.mail.postfix.user/241327