The best clustering solution is a solution at application level, that replicates sessions to all involved servers. If you have that in place you need a DB below that, that replicates the data to both locations.
Having that in place you are ready for load-balancing and have an active-active-cluster with no need for a failover mechanism.
OS should not matter much (could be even Linux and W2K8R2). The only case where you have to think about is the re-join of a node that was down before. The application should not start up until the DB is in sync again.