Take the 2-minute tour ×

Is it possible to have a high availability setup with 2 servers?

Running Windows Web Server 2008 and MSSQL Web Edition (as I know Express isn't supported)?

Getting to the point where our one dedicated server needs scaled out and going to a second server already more than doubles the cost as need to use Web Edition rather than Express (db is only 500MB).

share|improve this question
isnt HA orthogonal to load-balancing and scaling? –  svrist Apr 6 '10 at 8:06
add comment

2 Answers

There is no magical number of servers that encompasses "high availablity." If your needs are modest, you can do it with a single box, though (obviously) as soon as you have to reboot it, there go your 4 9's.

As long as your site isn't being heavily utilized, I'd say that two (decent) machines with a mirrored database set up (which is supported by MSSQL web, as you know), and NLB should be fine. Again though, this is a very general question. I run about 50 HUGE sites off of two "servers" but the servers are big honking Sun blade servers.

My worry wouldn't be about the machines (I'm assuming you'd be running both IIS and MSSQL on each machine, because there is no other way you could go about attempting high availablity otherwise) but about what you have between them and the internet. Having IIS exposed to the internet isn't the problem it once was, but IIS and MSSQL? I wouldn't do it if I had to be PCI or HIPPA compliant.

@Tom: This is your standard "defense in depth" build. Almost everyone will suggest separation of web and database servers, and on top of that, you should put heavy restrictions between them as well...Ideally there should be nothing on your webserver that you can't just restore from backup...Your code is all mirrored on your development machine, so just dump it back up to the website and you're fine. But database servers change all the time, and your setup needs to reflect that.

If you're restricted to two machines, you're going to have to install web and database on both, and do your best to harden them. I'd completely lock the databases down so that they can only be accessed by each other and the local webserver.

NLB takes the place of a hardware load balancer, and should automatically failover. Obviously YMMV: the hardware solutions have a lot to offer, but the price point is much higher. If you're not expecting a huge amount of traffic, NLB should be okay, but the hardware load balancers tend to have superiour protection against things like DDoS attacks. Again, it's all about what you're going to need.

@Tom: 1 IP is fine. NLB uses a "virtual" ip address that resolves to all the local machines. When you turn on NLB, go to the connection properties, and you'll see a "Network Load Balancing" tab. That tab needs the address that applies to the whole cluster (your static ip). Then you go in to the regular TCP/IP tab, and set up the local ip, which is the address that is specific to the individual machine.

share|improve this answer
Thanks for the answer, it really is appriciated! So are you suggesting having a server purely for the database on a private LAN so it's not facing the web? To keep out the redundancy, we'd need two web servers and two database servers though? Without a hardware load balancer, how would the other server take over if the other dies? –  Tom R Apr 6 '10 at 10:12
@Tom R: As @Satanicpuppy said, windows NLB handles the automatic failover of your web tier servers. If you do SQL Server mirroring, you will need to do some scripting with only 2 servers. If you add a 3rd "witness" server, automatic failover can be accomplished. –  MattB Apr 6 '10 at 13:36
Thanks, but say there is only one dedicated IP address for the website, do both servers pick up this IP address? I had thought a single IP address can only go to one machine at a time. –  Tom R Apr 6 '10 at 13:59
Thanks so much for your help :) I'll look to test all these things out with some VMs before deploying in the near future. –  Tom R Apr 6 '10 at 14:25
Just realised that with NLB, its a network layer tool so if say IIS wasnt functioning properly, requests would still go there. Is this similar to the Web Farm feature in IIS7? –  Tom R Apr 6 '10 at 14:36
show 1 more comment

Usually a traditional HA setup requires 3 machines: two backend servers (generally a "primary" and a "backup", with the "backup" mirroring off the "primary") and then a third router machine, which could take several forms: sometimes it's a proxy, sometimes it's a router, sometimes it's just the webserver.

However, somewhere there needs to be a machine that detects the failure of the primary and ensures that traffic goes to the backup server as appropriate. It should generally be a one-way switchover, with a manual reset back from the backup back to the primary. The reason is that if something took the primary offline, you need to make sure that the underlying problem is fixed; and in the mean time, the data on the primary will be out-of-sync with the secondary, and you need to mirror those changes back to the primary again before you reset.

share|improve this answer
Thanks however this third router machine could fail, then what happens? –  Tom R Apr 6 '10 at 10:16
@Tom - if you actually need HA, you do everything in pairs (at least). Your network gear, including routers, firewalls, load-balancers, will all need to be in HA configurations. –  mfinni Apr 6 '10 at 15:20
add comment

Your Answer

