Two MX servers with load balancing

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|

Two MX servers with load balancing

Osmany Goderich Navarro
Hi everyone,

I have two relay servers currently working with load balancing. I want
to configure both servers so that each MX relays only certain domain and
the rest of the mail throws it to the other MX. Here is the idea:

I want one MX to get all the mail and throw to the other MX all the mail
that has a domain.ca destination so that the other MX takes care of it.
I want the second MX to get all the mail and throw all the mail that
does not have a domain.ca destination so that the other MX takes care of
it.

I have thought about using transports but I don't know how to make an
exception in the transport tables.

thanks in advance.

Reply | Threaded
Open this post in threaded view
|

Re: Two MX servers with load balancing

Ed Wildgoose-2
Osmany wrote:

> Hi everyone,
>
> I have two relay servers currently working with load balancing. I want
> to configure both servers so that each MX relays only certain domain and
> the rest of the mail throws it to the other MX. Here is the idea:
>
> I want one MX to get all the mail and throw to the other MX all the mail
> that has a domain.ca destination so that the other MX takes care of it.
> I want the second MX to get all the mail and throw all the mail that
> does not have a domain.ca destination so that the other MX takes care of
> it.
>
> I have thought about using transports but I don't know how to make an
> exception in the transport tables.
>
>  

I put my transports into a mysql table (so that I can edit them with a
small web based application)

The transport table looks something like:

transports {
  lookup varchar,
  transport varchar,
  host varchar,
  active bool
}

Then slightly customise the cf files on each server to only check
transports where host=="1.2.3.4" or host="*".  Actually I get the mysql
server to try and figure out the IP address, but be prepared for some
subtleties in making this work (if you don't understand it then don't
use it!)

query = SELECT transport
        FROM transports
        WHERE lookup = '%s'
            and flag_active = '1'
        and (host = SUBSTRING_INDEX(CURRENT_USER, '@', -1) OR host = '*')


Variations on this theme allow you to have per machine transports.  In
this way I can do some forceable redirection

Additionally my "users" table has a server entry in it.  In this way I
can push users to different servers and the system knows to route mail
internally to the correct server.  I do this by adding another transport
lookup before the transport above:

query = SELECT mail_host
        FROM users
        WHERE email = '%s'
            and flag_active = '1'
        and mail_host <> SUBSTRING_INDEX(CURRENT_USER, '@', -1)
result_format = internal_relay:[%s]:1234

...where here I use a custom transport (on port 1234) to do the internal
relaying so that I can skip some steps when I re-inject on the final
server (performance tweak only, eg don't spam scan again)


In this way any of the backend servers can also serve as a frontend
server, accept mail and route it to the final destination.  Similar
tweaks can be done with Dovecot proxying to have the pop/imap servers
act as a mixed frontend/backend setup.

Good luck

Ed W
Reply | Threaded
Open this post in threaded view
|

Re: Two MX servers with load balancing

Terry Carmen
In reply to this post by Osmany Goderich Navarro
Osmany wrote:
> Hi everyone,
>
> I have two relay servers currently working with load balancing. I want
> to configure both servers so that each MX relays only certain domain and
> the rest of the mail throws it to the other MX. Here is the idea:
>  
You can use a transport table entry as:

/etc/postfix/transport

otherdomain.com smtp:<ip where you want to send otherdomain.com's mail>

Terry