A couple of Ideas..
Load Balancer : $$$$, *very* resiliant, does everything
Basically the load balancer has your public IP address with multiple servers sitting 'behind' it with private IPs. When a request comes in to your public address it puts it through to the server with the least traffic.
Metaconfig might look like this:
"forward all 169.x.x.10:80 requests to $servergroup1"
"$servergroup1 = 192.168.0.10, 192.168.0.11, 192.168.0.12"
With advanced setups you can have load balancer/servers in multiple physical locations all answering the same IPs. This way if you lose FarmA then FarmB takes all the traffic. With an extensive setup your worst case is that some SSL sessions have to restart.
DNS round robin + NAS: $$, simple, not as flexible
A cheap/simple way to do it is set your 2 servers to share their filesystems off of an NFS server. Set your DNS record to have the IPs of both servers:
www.domain.com = 169.x.x.10, 169.x.x.11
Then change the TTLs on your DNS records to something like 5 minutes. When a server goes down just pull its A record and traffic will start going to the remaining server.
Clustering: $$$, high performance, limited support
Some services, such as MySQL also have built in 'cluster' services. In this case you might have 1 'master' server and 2 'front' servers. All traffic would go to a 'front' server. if its a data read then the 'front' responds. If its a data write then the 'front' passes the write request back to the 'master' server.