Cyrus Murder Mail Delivery¶
There are several alternate ways to handle mail delivery in a Cyrus murder, which may improve performance depending on your set up and mail volume.
Standard Way¶
In a standard set up (as suggested by the documentation) each time a message arrives at a frontend, lmtpproxyd will contact the master server to determine which backend the mailbox is on.
Pros:
Most people do it this way
Easy to set up
Cons:
Murder master can become overloaded if you have large amount of incoming mail
Mail delivery hangs if murder master is unavailable.
Query local mailboxes.db¶
Each frontend will generally have its own copy of the mailboxes.db file and lmtpproxyd can be set to query the localhost for the backend of a specific mailbox.
Pros:
Resolve mailbox location faster
An increase in messages does not increase load on murder master
Mail can be delivered if murder master is unavailable
Cons:
More complicated setup
There are currently two ways to setup lmtpproxyd to query the localhost: normal and alternate.
If using the alternate method, then mupdate needs to be reconfigured to keep mail delivery going during a murder master outage. Add -m
to the mupdate arguments in cyrus.conf(5), restart, and mupdate will no longer contact the murder master. Mail delivery will work. Once the murder master has been fixed, remove -m
so the local mupdate will start receiving updates again. Since this involves restarting Cyrus, we ran lmtpproxyd on its own machines (without imap/pop users)
Contact local mupdate server¶
Mupdate is running on each frontend to receive updates from the murder master. Lmtpproxyd can be configured to query the local mupdate process instead of the one on the master server.
The steps are briefly outlined below
Create a config file for lmtpproxyd. Copy your current imapd.conf file and set
mupdate_server: localhost
. Edit cyrus.conf and tell lmtpproxyd about the new config file.cmd="lmtpproxyd -C /etc/lmtp.conf"
Make sure you can login to mupdate locally. Test with mupdatetest. Example:
mupdatetest -u frontend -a frontend -m PLAIN localhost
Depending on how restrictive your setup is, you may have to create a config file for mupdate.