3

The Problem

I am trying to configure several web farms (for different sites) following the NLB+ARR architecture. Let's say I have 6 VMs:

  1. ARR+NLB cluster of 2 VMs. It receives traffic and forwards it to content servers. URL rewrite rules with HTTP Host header conditions are used to route requests to correct content servers.
  2. Site 1 Content Servers: 2 VMs. Hosting http://www.mysite1.com/
  3. Site 2 Content Servers: 2 VMs. Hosting http://www.mysite2.com/

Everything works fine, I have tested that I have high availability on both tiers.

Now, for a reason Site 2 must work in active/passive mode, so that only 1 VM receives traffic, while the other one is for failover. In a way, I want something similar to the NLB's single host mode, but for the ARR.

How can this be achieved?

Workarounds

I have tried several indirect approaches to achieve the desired behavior.

  1. Load balancing algorithm. Tried setting round and robin weights to 1/0. The problem is that you can't set 0. It must be at least 1. You can set 4 billion + smth / 1, but I am not sure if this guarantees no random request ever goes to the second node.
  2. Host Name to Server Affinity. In advanced settings of Host Name Affinity, I can configure only 1 server to be allocated to Site 2. It works, but the problem is that the routing tables are not synchronized between the 2 ARR VMs. So, from time to time ARR1 affinitizes traffic to one node, while ARR2 to the other, which is not active/passive.
  3. Host Name Affinity + NLB Single Host. As a modification of the previous approach, I can also switch the NLB to single host mode to resolve the routing table sync issue. The problem in this case is that I am switching off ARR load balancing for Site 1 as well.
  4. Host Name Affinity + NLB Single Host + 2 IP Addresses. If I add the second IP address to the previous solution, create 2 NLB clusters working in different modes, everything should work just fine. The problem is that I don't want to pay for the second public IP.

None of the solutions is perfect.

The image of the ideal solution

I would really like to know a way to put the ARR into single host mode like it can be done for the NLB. And have it synchronize routing between nodes.

Anyone knows how to do that? Or knows alternative approaches?

1 Answers1

1

I have found one way that seems working, although not completely. It's described here. The idea is to use 'Server Variable Hash' load balancing algorithm and 'HTTP_HOST' as the variable. This way all instances of ARR map a given host to the same content server. I have tested that they do fallback to another available server if the mapped one is not working.

The problem with the solution however is that you cannot control which content server a host is mapped onto, it's determined by a hash function. Yet, in a way it is correct - if you are afraid if making any node the active one, then how can you expect a reliable failover? You have to be sure in all of your content servers at the same time.

Another problem is that you can't use multiple host names for each site, because you'll likely get them mapped onto different servers.