I am looking for some general advice on implementing a failover solution for a website. We currently have three Windows 2003 servers, as follows:
Web server: running the website (IIS 6)
Database server: runs a MySQL database
Backup server: redundant server running both IIS & MySQL. Web files mirrored using ViceVersa and database is replicated to this server. Database replication is set up on a dual master basis - so both databases can keep in sync with each other.
The database and web servers are in the same data centre, the backup server is located with a different host in a separate data centre.
At the moment our only failover solution is to switch DNS. The TTL for our DNS is set to one hour. In the event of either of the primary servers failing we would update DNS. My concern is that this method is too slow. I'm told that some ISPs (notably AOL) can take 48 hours or more to pick up DNS changes. It also relies on us manually changing the DNS settings.
I have been looking at three alternatives. I would appreciate any comments or experiences:
1. Improved DNS failover. There are several services available that can automatically update DNS if the primary server goes offline.
2. Load balancing. We add a load balancer in front of the web servers. This can then be easily redirected if one of the servers fail. I'm not sure if a hardware or software solution is best here?
3. Web farm. I have read quite a bit about setting up a web farm using IIS. It looks like it might be quite complicated to implement, but is perhaps the best solution because it makes use of the currently redundant backup server. However, although this improves reliability, surely it still doesn't help if the main server is unavailable for some reason?
Perhaps I need a combination of these things, or perhaps there is a better solution available?