Cyrus Murder Mail Delivery
Mail Delivery in A Cyrus Murder
There are several alternate ways to handle mail delivery in a Cyrus murder, which may improve performance depending on your setup and mail volume.
In a standard setup (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.
- Most people do it this way
- Easy to setup
- 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.
- Resolve mailbox location faster
- An increase in messages does not increase load on murder master
- Mail can be delivered if murder master is unavailable (*1)
- More complicated setup/requires patches
There are currently two ways to setup lmtpproxyd to query the localhost. I think the UMich method is better since it is much simpler to setup.
The UMich way should keep delivering mail if the murder master is down. If use the alternate method, then you will need to reconfigure mupdate to keep mail delivery going during a murder master outage. You simply add '-m' to the mupdate arguments in cyrus.conf, restart, and mupdate will no longer contact your 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)
Patch Patches are against 2.2 but are being moved to 2.3 Lmtpproxyd will now use the local mailboxes.db
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.