[exim] serialize_hosts and single tcp connection batch mail

Pàgina inicial
Delete this message
Reply to this message
Autor: Paul
Data:  
A: exim-users
Assumpte: [exim] serialize_hosts and single tcp connection batch mail

Hi All,

We were trying a "single tcp mail batch" setup environment and things didn't
quite work out as expected.
Below are the results we noticed and what configuration options we set.
Hopefully someone out there has done a similar setup and has a working
configuration for this:

host01 - external IP - accepts SMTP from the world
host02 - external IP - accepts SMTP from the world

mail01 - external IP - only accetps mail from host01 and host02
mail02 - external IP - only accepts mail from host01 and host02

Normally we have very relaxed settings and mail is delivered immediately.
This results in lots of exim's processes (and connections) and users a large
amount of resources.
What we wanted was for a single TCP connection between host01 to mail02 and
host02 to mail02 and have all mail sent via this single connection. Ideally
send 500 odd emails and then make a new connection. We set serialize_hosts
for the relevant transport on host01 and host02 and set mail02's
configuration to allow a large amount of messages via a single connection.

This is in the configuration on host01 and host02:

mail02_transport:
driver = smtp
hosts = mail02.externalmail.ournetwork.com
serialize_hosts = mail02.externalmail.ournetwork.com
connection_max_messages = 500

And we see in the logs on host01 and host02

2005-07-19 02:45:09 1DuHeq-0004Ne-CG == someusers@???
R=mail02_director T=mail02_transport defer (-53): connection limit reached
for all hosts

What we found was a single connection was normally established and only one
or two exim processes running on mail02 (excellent!).
However when host01 and host02 got new incoming mail (as in 24x7) they would
try and deliver and then defer instantly as the connection limit had been
reached for mail02.
The connection limit is hard set to 1 when you set serialize_hosts. So it
would simply defer the mail until the next retry would hit it.
If I was to do a manual retry (/usr/local/exim/bin/exim -M <msgid>) then it
would more often than not get the same result, being the connection limit
reached.
I would expect it to be always reached as 1 socket is always open and having
mail fired down it. This just leave us with a large amount of backlogged
mail on the queue's locally at host01 and host02 that won't get delivered
for a long time.

Should we split our mail systems on host01 and host02 to have one process to
accept mail and queue locally and have another process to run queue dumps
every 5 minutes to pipe the mail down 1 connection. Is there a better way of
doing this?

I've done numerous searches on the archives, Google, mailing lists, exim
spec and faq's but couldn't find the answer I was looking for (not sure what
the answer is really?)

Any comments/ideas would be great.

Thanks

Paul