Um eine Liste von Elementen zu definieren, die in Postfix vielen verschiedenen Optionen zugewiesen werden sollen, können Sie entweder eine durch Kommas getrennte Liste wie die folgende verwenden:
relay_domains = example.com,example.net,example.org
oder eine Hash-Map wie diese:
relay_domains = hash:/etc/postfix/relay_domains
und verwenden Sie dann Postmap, um diese Datei mit Schlüssel-Wert-Elementen in eine BDB-Datei zu konvertieren.
Meine Frage lautet: Gibt es aus Leistungsgründen Gründe, die Hash-Map zu verwenden, anstatt einfach die Liste anzugeben?
Antwort1
Ich habe weder Daten noch Messwerte, um zu entscheiden, ob die Leistung in beiden Fällen eine Rolle spielt. Ich werde versuchen zu erklären, welcher Hintergrundprozess in diesen beiden Fällen eine Rolle spielt.
Als der Postfix-Daemon ausgeführt wurde, gab es zwischen den beiden kaum einen Unterschied, weil:
- Bei der Verwendung
main.cf
analysiert Postfix die Konfigurationsdatei, speichert sie im Speicher und überprüft die Datei erst erneut, wenn Postfix neu gestartet wird oder der Administrator einenpostfix reload
Befehl eingibt. - Bei Verwendung einer Hash-Tabelle analysiert Postfix die Tabelle, speichert sie im Speicher UND prüft regelmäßig, ob sich die Datei geändert hat. Wenn die Datenbank geändert wurde, wird Postfix beendet, bevor die nächste Client-Anforderung bearbeitet wird, sodass ein neuer Prozess mit der neuen Datenbank initialisiert werden kann.Quelle
Wenn Sie nun die Liste ändern möchten, dann
- Nach dem Ändern
main.cf
sollten Sie aufrufenpostfix reload
. Dadurch wird der Master-Daemon gezwungen, die Konfigurationsdatei erneut zu lesen und den untergeordneten Prozess zu beenden, damit dieser die neue Konfiguration übernehmen kann.Quelle - Nach dem Ändern der Hash-Tabelle ist kein Aufruf mehr erforderlich
postfix reload
.
Ich verstehe immer noch nicht den Unterschied zwischen (1) dem Neustart des untergeordneten Prozesses durch manuelles Aufrufen postfix reload
und (2) dem Neustart des untergeordneten Prozesses, der durch eine Änderung der Hash-Tabelle ausgelöst wird.
Hier einige Erkenntnisse nach der Lektüre derPostfix-Handbuchseite, insbesondere aufDaemons-ProzessAbschnitt. Dadurch verstehe ich den Unterschied zwischen (1) dem Neustarten des untergeordneten Prozesses durch manuelle Aufrufe postfix reload
und (2) dem Neustarten des untergeordneten Prozesses, der durch eine geänderte Hash-Tabelle ausgelöst wird.
Postfix hat den Masterprozess namensMeister. Es wird zum ersten Mal aufgerufen und dient als „Master“-Programm. Es ruft bei Bedarf andere Daemons wie smtpd, qmgr und trivial-rewrite auf.
Es gibt vier Arten von Postfix-Daemons
- Der Daemon, der nicht stirbt, also Änderungen an main.cf nicht automatisch übernimmt. Wird er
postfix reload
nach einer Konfigurationsänderung aufgerufen, liest der Prozess die Datei erneut. Dazu gehören:Meister. - Der Daemon wurde zum persistenten Prozess, sodass er Änderungen an main.cf nicht automatisch übernimmt. Wird er
postfix reload
nach einer Konfigurationsänderung aufgerufen, liest der Prozess die Datei erneut. Dazu gehören:qmgr,tlsmgr,verifizieren. - Der lang andauernde Prozess kann zwischen einer Stunde und mehreren Stunden dauern. Das Aufrufen
postfix reload
nach einer Konfigurationsänderung beschleunigt die Konfigurationsänderung. Dazu gehören:trivial umschreiben,abholen,nach dem Screenen,Proxy-Karte - Der kurz laufende Prozess, der nur für eine begrenzte Zeit ausgeführt wird. Ein Aufruf
postfix reload
ist unnötig, da der Prozess main.cf beim erneuten Ausführen erneut liest. Dies umfasstSMTP,smtpd,lokalund andere Prozesse neben den drei oben genannten Kategorien.
main.cf
Wenn Sie zum Speichern der Listen verwenden, aber nicht invoke postfix reload
, dann
- Daemons der Kategorie 4 werden es aufgrund seines geringen Alters sofort nach der Wiederbelebung des Prozesses aufgreifen.
- Daemonen der Kategorie 3 brauchen etwas Zeit, um ihre Wirkung zu entfalten
- Daemons der Kategorien 1 und 2 lesen nie erneut,
main.cf
bis Sie Folgendes aufrufenpostfix reload
:
Wenn Sie eine Hash-Tabelle zum Speichern der Listen verwenden und postmap
die Datei mit -ed versehen haben, dann
- Daemons der Kategorien 2, 3 und 4 erkennen die Dateiänderungen. Ein erneutes Laden des Postfixes ist daher nicht erforderlich.
- Daemon Kategorie 1 hat keinen Hash-Typ-Parameterwert. Daher hat er keine Auswirkung auf den Master-Daemon.
Abschluss
Ansonsten scheint der Leistungsunterschied zwischen den beiden obigen Fällen gering zu sein. Wenn Sie die Tabelle selten ändern, kann der Unterschied vernachlässigt werden. Die Ausnahme ist, wenn Sie postfix reload
die Hash-Tabelle häufig bearbeiten oder ändern, dann wird dies zu Leistungsproblemen führen qmgr
. SieheHierUndHier
Weitere Informationen:Readme zur Postfix-Leistung