Re: [exim] Exim multi-server architecture with NAS

Top Page
Delete this message
Reply to this message
Author: Jeremy Harris
Date:  
To: exim-users
Subject: Re: [exim] Exim multi-server architecture with NAS
On 10/03/2020 21:11, Robert Blayzor via Exim-users wrote:
> I'm looking to setup several Exim MX VM servers to deliver mail to
> mailbox storage in Maildir++ on FreeNAS.
>
> Will be using Dovecot for the IMAP/POP and LMTP delivery. My main goal
> is to keep the MX's accepting mail should for whatever reason the NAS
> appliance go offline.
>
> That would mean that direct NFS mounts are out. (or is it?)


Depends where the LMTP server is.

> I was kicking around running Dovecot LMTP/LDA on a jail directly on in a
> NAS jail (freeNAS) and then just use SMTP/LMTP transport from the MX
> servers to the LMTP server running in the NAS jail. This way if for some
> reason the NAS goes down; SMTP protocol would just time out or fail and
> the MX server would queue/retry delivery later.


Yup, with the LMTP server on the NAS, that works. If the NAS goes
down then accepted stuff just builds up in the MX spools.

> Would this be a valid design and what are the caveats? What would a
> better design option be?


I assume you said "multiple" MXs so that you can run system-upgrades
and planned-maint on them separately, without taking a mail-acceptance
outage. I'd suggest, given you're wanting that service level, you
might also want geographically-separate secondary-MX systems for
backhoe-induced outage and DDOS protection.

I guess another possible reason would be running processing-intensive
antispam scanning. SpamAssassin used to be notorious for eating cycles,
but I don't know if that still holds on modern hardware. I don't use it
myself.

> One caveat I have run into is that we will have multiple NAS appliances
> holding mailboxes across multiple domains. This raises the issue of the
> Exim router looking at the mailbox user and knowing which NAS/LMTP
> server to deliver the mail to. This may be something as simple as
> putting a value along with the user in the database....


That's the simplest solution, yes.


--
Cheers,
Jeremy