What is the best clustering methodology?

All,

    I am not an enterprise expert.  I know security well.  I was told the BEST place to cluster when considering web servers is IIS.  Microsoft web sites say cluster at the OS, not at IIS.  Those are easy to find.  I have always done load balancing at the load balancer level.  I was told that is "stupid" because if a process fails in IIS during a transaction, a load balancer would not pick up the transaction.  I'd like to hear from people who know technology better than I.

Thoughts?
awakeningsAsked:
Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

DavidPresidentCommented:
"Best" is subjective, and depends on what YOUR needs are.   Each methodology has strengths and weaknesses that not only vary when everything is healthy, but also they change when the cluster is degraded.      So to answer your question, what is "best" depends.

If you want to know what is best for YOU, then elaborate on what you are trying to do, your budget, your application(s), how much downtime you can live with, etc ...
0
Dan McFaddenSystems EngineerCommented:
If the question is with clustering IIS and websites/web applications, then I would recommend the following:

(disclosure:  I'm on my Ops soapbox)

1. As dlenthe stated, define your application and its operational parameters
2. Do not cluster the OS when deploying IIS servers, you build a web farm and load balance the farm (in general, clustering IIS is not recommended by MS, the best practice is to load balance)
3. A transaction failure is not the responsibility of the cluster, it is the task of the application to handle or manage the issue of transaction failure.
4. A transaction failure is not the responsibility of IIS either. You can configure IIS to mitigate and manage AppPool failures but a process failure must be handled in code and/or the database so that the transaction is recoverable.

Typically, transactions are handled in the business logic of the application, that means code.  The best that you can do is to provide a highly available system that supports the required protocols for delivering the necessary access and functionality.

If your company, manager, developers are worried about session availability, you should consider moving the session management out of the "in-proc" configuration and try using an "out-of-proc" session state management service or storing session state in the db.  But these are design considerations that need to be considered during the application architecture phase of development.

Throwing all your coins at Failover Cluster Service is not gunna save the bank.  A high availability system is more that just a couple of cluster nodes and a cluster aware service.  You need to try to reduce the single points of failure to a bare minimum, then build your application around those known issues.

OK, now I'm off the soapbox.

I know the issues.  I've been there and am currently reliving the issues, just in another company, another country and another language.  The arguments are always the same.  The methodology to find the solution is the same but dependent upon the specific circumstances of your situation.

Dan
0
awakeningsAuthor Commented:
Thank you both.  So we are calling this high availability.  Load balancers will be part of the equation.  OS clustering.  Dan, I really appreciate your soap box.  Rant all you like and I will learn.  So I am hearing you state that if IIS is clustered, the cluster will not pick up the failover.  Lets throw ACID (a transactional backdrop) into the mix, if there is a failure, the cluster will not pick up the failed transaction.  So, load balancing (network level( and possible OS clustering are the best options for a high availability.  Do you have an article to support your statement?
0
Dan McFaddenSystems EngineerCommented:
Again, to create a highly available system that is IIS based (assuming a .NET built web site or web app) you should architect the solution so:

1. redundant load balancers that support application affinity (sticky sessions)
2. two or more Windows Servers with IIS - IIS at the server level, identically configured
3. appropriate .NET framework installed (based on development requirements)
3a.  install any additional dependencies  (based on development requirements)
4. Delete all default installed AppPools and Websites
5. configure the AppPool(s) on 1 of the servers, export the AppPool configurations
6. configure the base website(s) on 1 of the servers, export the website configurations
7. on the second and other servers in the farm, import the AppPool & website configs

The only place a cluster (AG = availability group) should exist in the application architecture, is at the database level.  For example, a Windows Server with Failover Clustering installed and SQL Server configured with an AG, on top.

This is the foundation for your HA IIS infrastructure.

As for best practice from MS:

- http://www.iis.net/learn/web-hosting/scenario-build-a-web-farm-with-iis-servers/plan-a-web-farm-with-iis-servers

There also advanced IIS configurations to consider that can add to the HA stability of the application.  Probably outside the scope of the foundation discussion.

As for transaction ACIDity.  ACID is defined as:


The ACID concept is described in ISO/IEC 10026-1:1992 Section 4. Each of these attributes can be measured against a benchmark. In general, however, a transaction manager or monitor is designed to realize the ACID concept. In a distributed system, one way to achieve ACID is to use a two-phase commit (2PC), which ensures that all involved sites must commit to transaction completion or none do, and the transaction is rolled back (see rollback).

ACIDity is controlled by the application, not, the OS, not the web server... but the code (often, at the db level).  ACID transactions are handled by starting a transaction, submitting items to a data system (aka:  database) and issuing a transaction finished command.  If, at some point, there is an error during the process, the transaction can be reversed (rolled back).

Microsoft reference:

- https://technet.microsoft.com/en-us/library/ms190612(v=sql.105).aspx

ACID reference (generic):

- http://en.wikipedia.org/wiki/ACID

Again, to create a highly available system that is IIS based (assuming a .NET built web site or web app) you could architect the solution so:

1. redundant load balancers that support application affinity (sticky sessions)
2. two or more Windows Servers with IIS - IIS at the server level, identically configured
3. appropriate .NET framework installed (based on development requirements)
3a.  install any additional dependencies  (based on development requirements)
4. Delete all default installed AppPools and Websites
5. configure the AppPool(s) on 1 of the servers, export the AppPool configurations
6. configure the base website(s) on 1 of the servers, export the website configurations
7. on the second and other servers in the farm, import the AppPool & website configs

This is the foundation for your HA IIS infrastructure.

As for best practice from MS:

- http://www.iis.net/learn/web-hosting/scenario-build-a-web-farm-with-iis-servers/plan-a-web-farm-with-iis-servers

As for transaction ACIDity.  ACID is defined as:


The ACID concept is described in ISO/IEC 10026-1:1992 Section 4. Each of these attributes can be measured against a benchmark. In general, however, a transaction manager or monitor is designed to realize the ACID concept. In a distributed system, one way to achieve ACID is to use a two-phase commit (2PC), which ensures that all involved sites must commit to transaction completion or none do, and the transaction is rolled back (see rollback).

ACIDity is controlled by the application, not, the OS, not the web server... but the code (often, at the db level).  ACID transactions are handled by starting a transaction, submitting items to a data system (aka:  database) and issuing a transaction finished command.  If, at some point, there is an error during the process, the transaction can be reversed (rolled back).

Microsoft reference:

- https://technet.microsoft.com/en-us/library/ms190612(v=sql.105).aspx

ACID reference (generic):

- http://en.wikipedia.org/wiki/ACID

Designing a highly available application and supporting infrastructure is a team effort.  The DEV and OPS teams must be open to discussing what is being developed and how to best implement the application.  Its not just the job of the OPS team to ensure that the app is HA.  HA must be part of the entire SDLC.  All teams must buy in to the concept in order for the project to be successful.

For example:  dropping a non-cluster aware application on a Windows Failover Cluster, does not make the application clustered or highly available.  If during a failure, the application can not recover from the cluster resource failover process, the app is dead.

The same goes for web applications.  The app needs to account for the failure of any one of the processes (objects, items, sites, servers, etc.)  and be built to withstand these known issues.

Dan
0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
awakeningsAuthor Commented:
Thank you so much!  I am not in operations, but need to sit by the sidelines on a few things.  I am always looking for wool being pulled over my head and it indeed was this time.  Thank you.
0
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
Microsoft IIS Web Server

From novice to tech pro — start learning today.

Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.