[Postfixbuch-users] mysql results werden gecached?

Wolfgang Braun braun at knochi.ath.cx
Mi Mär 14 23:12:51 CET 2007


Hallo!

Ich bin hier gerade mit Postfix und MySQL am experimentieren, dabei sind
mir ein paar Dinge aufgefallen für die ich keine passenden Fragen
ergoogeln kann.
Ich Plane, relay/transport tables sowie später virtual_mailbox_domains,
virtual_mailbox_maps usw. in mysql zu verwalten und postfix die
Konfiguration direkt aus der DB auslesen zu lassen. Dazu folgende
Teststellung, mit mysql 4.1, postfix 2.2.4:


main.cf:

 relay_domains=mysql:/etc/postfix/mysql/relay.mysql

relay.mysql:

 hosts = inet:127.0.0.1
 user = postfix
 password = postfix
 dbname = postfix
 query = select 'OK' from kunde join relay  on kunde.id=relay.kid \
 where domain='%s' and kunde.active=1 and relay.active=1;

Die Query in mysql und mit

 postmap  -q example.org mysql:/etc/postfix/mysql/relay.mysql

getestet, funktioniert soweit alles einwandfrei und ich bin glücklich.


Hier nun die Dinge die ich noch nicht kapiere:

* Der smtpd scheint das Resultat einer Query zwischenzuspeichern?

Ich öffne eine SMTP-Verbindung und bekomme die korrekte Aussage, dass
das Relaying für rcpt to:<foo at example.org> OK ist (entsprechend der
DB-Einträge).

Jetzt ändere ich die DB (set active=0), baue eine neue SMTP-Connection
auf, rcpt to:<foo at example.org>, und bekomme immer noch ein OK, obwohl
sich die Werte in der DB inzwischen geändert haben und das Relay zu sein
sollte.

Ich habe in main.cf mit 'max_use=1' zur Probe festgelegt, dass jede
smtpd-Instanz nur eine Connection abarbeitet. Dann funktioniert mein
Experiment wie erwartet.

Q: smtpd cached die Ergebnisse der Abfragen? Wenn ja für wie lange?

Q: Ich schätze, max_use=1 wirkt sich negativ auf die Performance aus, da
für jede neue Connection ein neuer Prozess gespawnt wird (und die
lookups erneut stattfinden). Gibt es da Meinungen und Erfahrungsberichte?

Q: Gibt es noch andere Methoden, außer max_use, um die Abfragefrequenz
festzulegen? Eine DB-Änderung braucht nicht *sofort* wirksam zu werden,
sollte aber doch relativ zeitnah geschehen.



* Die in relay_domains festgelegten maps werden auch für die
Sender-Adresse (mail from: ...) abgefragt?

Ich hatte das mysql query log mitlaufen, um meine Vermutung zu
überprüfen und dabei bemerkt, dass beim mail from: .. die
Sender-Adresse
 ebenfalls über mysql abgefragt wird, die mysql-Tabelle wird aber nur in
relay_domains angegeben.

Q: Könnte mir jemand die Rationale dazu erklären? Ich dachte bisher,
die
relay_domains würden nur für den Recipient abgefragt?


* Allgemeine Fragen:

Ich hab geplant die Konfiguration mit mysql noch ein bischen auszubauen,
relay/transport maps sowie virtual_mailbox_domains und
virtual_mailbox_maps in mysql zu speichern. Die Mysql-Abfragen werden
über proxymap laufen.

Q: Gibt es Richtwerte und/oder Erfahrungsberichte, bis zu welchem
Volumen (mails/zeiteinheit) das postfix/mysql Gespann noch vernünftig
arbeitet?

Q: Ich habe überlegt die SQL-Abfragen in mysql als views zu formulieren
und in der postfix config einfachere Abfragen auf die Views zu
verwenden. Hintergrund ist, die Postfix-Konfiguration einfach zu halten
und SQL-Logik (joins über mehrere Tabellen) in mysql zu halten. Macht
das einen Sinn/Unterschied?



Ich hoffe ich habe mich einigermaßen verständlich ausgedrückt und
freue
mich über Antworten oder Verweise zu nützlichen RTFMs

Danke fürs lesen


Wolfgang











Mehr Informationen über die Mailingliste Postfixbuch-users