For the email server it should just be a question of putting the second server in the DNS as an alternative MX record.
For web / imap / etc, I can see three ways you could do it:
- Make your TTL very short, and manually change the DNS when one server goes down. Not great because when the server goes down you might be asleep :-)
- Put both servers in the DNS (like google.com has 3 entries), and they would be used on a round-robin basis. I think modern browsers will try the second server in the list if the first one doesn't respond. This is 'poor mans load balancing / redundancy', and actually works quite well. Disadvantage is the users have to wait for the first server to timeout before they get to try the second, and some apps may not automatically fail over.
- The really cool way: IP address takeover.
http://www.onlamp.com/pub/a/onlamp/2003/04/03/linuxhacks.html
This is what we do at work, using a commercial product, the Zeus ZXTM. Really you want both machines on the same network, with two separate connections between them.
I would probably try the round-robin DNS first, as IP address takeover with Linodes might be quite challenging.
Let us know what you end up with.