We have one site on IIS build in ASP.NET with DNN. Currently we try to configure network load balancing for two servers. The service hosting provider told us this would be enough, but we seem to have hit a brick wall:
- network load balancing only forwards requests from his public ip, it doesn't check the availability of the servers
- if a server goes down, 50% of the requests will see a "server not a available" until we manually remove the server from the load balancing configuration
- I don't see a way to configure this with two servers without this problem
With three-way load balancing, aka web farm, a single system checks which servers are available. If a server goes down, it will forward the request to the other server.
Is the above a correct assumption of the limitation of network load balancing, leading to classical web farm as only solution, or is there something the hosting provider can configure to prevent this behavior and have us stick with only two systems?
You have in fact hit one of the classic limitations of NLB. A Windows NLB cluster is only able to check if the node itself is available and cannot check if the actual application is still up and running. Ultimately what you need is for some type of health check of the application which can be done with a physical load balancer or perhaps a software load balancer such as the Microsoft Application Request Routing (ARR).
Another alternative that is somewhat new is a cloud based load balancer such as the offering from Rackspace. This gives you the benefit of having many of the features of a physical load balancer without the cost of implementing physical hardware.
Hope that helps.
Edit: There is somewhat of a way for NLB to perform health checks, however, it still requires what amounts to a third server. System Center Operations Manager has a management pack that can monitor applications. Details about that can be found here. If you are going to go through the trouble of adding something like this, you may as well look at the benefits of an actual load balancer that can perform the necessary health checks.
If you have a third system (or two) it can distribute the load based on the utilization of the backend hosts, it can check the availability on a higher lever (application) and not only the network. It is also easier as each system has only one role, the load balancer only load balances and doesn't have to have anything else on it so less things can go wrong.
Third party products can do this (e.g. NetScaler) for which you add services bound to virtual servers configured within the NetScaler appliance. The appliance can automatically check that applications are available before load balancing to the servers. No need for manual intervention.