That pretty much summarizes my feelings on this topic.
I have seen this proposed as a configuration before many times. The web guys say they need HA SQL for their web site data and then they figure that since they are getting a cluster that they can use it for IIS, too. No, don’t do it. While at first glance it makes some sense, if you start thinking big picture, then you start seeing the problems. First off, the big picture for an HA website with HA SQL backend should look like this:
- Clients connect to the Internet to access the web site.
- The client then connects to the web site through the firewall. The firewall protects the IIS servers in the web site. This is where best practices start to kick in. Using NLB with IIS provides a scalable and highly available web platform.
- The IIS server communicates with the SQL MSCS cluster behind another firewall. Again, a best practice to keep the SQL data from being compromised in the event the web server is compromised.
- IIS is protected, scalable, and highly available
- SQL is extremely well protected and highly available
The alternative solution (meant to save money) is to use one MSCS cluster to host SQL and IIS. In this solution:
- Clients connect to the Internet to access the web site
- The client then connects to the web site through the firewall. The firewall protects the IIS servers in the web site.
- The IIS server communicates with SQL on the same cluster perferrably on the same node at the same time.
The problems with this configuration are:
- SQL is not as well protected
- IIS is no longer scalable
- IIS 6.0 is not MSCS cluster aware
In order to make it work (IIS and SQL on the same MSCS cluster), you need to:
- Create a resource group
- Use the generic resource script for IIS 6.0
- Create your SQL instance in the same resource group
Since SQL and IIS are in the same resource group, they will failover together and be on the same node all of the time. You will want to do this because if there are problems with a node causing one of the resources to fail, you probably will want all of the resources to fail, too.
However, again, I strongly recommend against putting IIS and SQL on the same MSCS implementation.