IIS: The Simplest Load Balancing Cluster with Failover

IIS: The Simplest High Availability Cluster with Synchronous Replication and Failover

Evidian SafeKit brings load balancing and failover to IIS (Internet Information Services for Windows). This article explains how to implement quickly a IIS cluster without network load balancers or dedicated proxy servers. SafeKit is installed directly on the IIS servers. The high availabity module iis_farm.safe and a free trial are offered in the installation instructions section.

This clustering solution is recognized as the simplest to implement by our customers and partners. It is also a complete solution that solves hardware failures (20% of problems) including the complete failure of a computer room, software failures (40% of problems) including smooth upgrade server by server and human errors (40% of problems) thanks to its simplicity.

How the Evidian SafeKit software simply implements IIS load balancing and failover without network load balancers or dedicated proxy servers

How the Evidian SafeKit farm cluster implements IIS load balancing and failover?

On the previous figure, IIS services are running of the 3 servers. Users are connected to a virtual IP address which is configured locally on each server. The input traffic for the virtual IP address is received by all the servers and split among them by a filter inside each server's kernel.

The network load balancing algorithm inside the filter is based on the identity of the client packets (client IP address, client TCP port). Depending on the identity of the client packet input, only one filter in a server accepts the packet; the other filters in other servers reject it.

Once a packet is accepted by the filter on a server, only the CPU and memory of this server are used by IIS services that responds to the request of the client. The output messages are sent directly from the IIS server to the client.

If a server fails, the SafeKit membership protocol reconfigures the filters in the network load balancing cluster to re-balance the traffic on the remaining available servers.

Note that SafeKit works in VMware environments without the Microsoft NLB problems of unicast and muticast modes.  And note also that SafeKit network load balancing is working not only on Windows (including Windows editions for PCs) but also on Linux.

FAQ on Evidian SafeKit

Best use cases [+]

Customers [+]

Application high availability modules [+]

SafeKit Webinar [+]

Pricing - Free trial [+]

Comparison with other solutions [+]

Demonstration of a farm cluster [+]

What are the advantages of the farm cluster [+]

What is the recovery time (RTO) in a farm cluster [+]

Installation of SafeKit for IIS load balancing and failover

Package installation on Windows

On both Windows servers

Configuration instructions

The configuration is presented with the web console connected to 2 Windows servers.

Important: all the configuration must be done from a single browser.

Launch the web console in a browser by connecting to http://localhost:9010 (next image)

Start the SafeKit web console for configuring IIS

Enter IP address of the first node and click on Confirm (next image)

SafeKit web console - first IIS node in the cluster

Click on New node and enter IP address of the second node (next image)

SafeKit web console - second IIS node in the cluster

Click on the red floppy disk to save the configuration (previous image)

In the Configuration tab, click on iis_farm.safe then enter iis_farm as the module name and Confirm (next images with iis_farm instead of xxx)

SafeKit web console - start configuration of IIS SafeKit web console - enter IIS module name

Click on Validate (next image)

SafeKit web console - enter IIS module nodes

Set the virtual IP address of the cluster, the TCP port of the service to load balance and the criterion on source IP address or source TCP port (next image).

A virtual IP address is a new unused IP address in the same IP network as the IP addresses of the two nodes. The load balancing will be made on the virtual IP address/TCP port according the criterion. This article explains difference between source IP address and source TCP port.

SafeKit web console - enter IIS parameters

For information:

Click on Validate (previous image)

SafeKit web console - stop the IIS module before configuration

Click on Configure (previous image)

SafeKit web console - check the success green messages of the IIS configuration

Check the success green message on both servers and click on Next (previous image)

SafeKit web console - start the IIS cluster on both nodes

Start the cluster on both nodes (previous image). Check that the status becomes UP (green) - UP (green) (next image).

SafeKit web console - IIS cluster started

The cluster is operational with IIS services running on both UP nodes (previous image).

Be careful, components which are clients of the IIS services must be configured with the virtual IP address. The configuration can be made with a DNS name (if a DNS name has been created and associated with the virtual IP address).


Check with Windows Microsoft Management Console (MMC) that the IIS services are started on both UP nodes. Put IIS services with Boot Startup Type = Manual (SafeKit controls start of IIS services).

Stop one UP node by scrolling down the menu of the node and by clicking on Stop. Check that the load balancing is reconfigured with only the other node taking all TCP connections. And check that the IIS services are stopped on the STOP node with Windows Microsoft Management Console (MMC).

To understand what happens in the cluster, check the SafeKit logs of node 1 and node 2.

To see the module log of node 1 (next image):

SafeKit web console - Module Log of the IIS node 1

To see the application log of node 1 (next image):

SafeKit web console - Application Log of IIS node 1

To see the logs of node 2 (previous image), click on W12R2server75/UP (it will become blue) on the left side and repeat the same operations.

Advanced configuration

In Advanced Configuration tab, you can edit internal files of the module: bin/start_both and bin/stop_both and conf/userconfig.xml (next image on the left side). If you make change in the internal files here, you must apply the new configuration by a right click on the blue icon/xxx on the left side (next image): the interface will allow you to redeploy the modified files on both servers.

Configure boot start (next image on the right side) configures the automatic boot of the module when the server boots. Do this configuration on both nodes once the IIS load balancing and failover solution is correctly running.

SafeKit web console - automatic boot of the IIS module


For getting support on the call desk of https://support.evidian.com, get 2 Snaphots (2 .zip files), one for each server and upload them in the call desk tool (next image).

SafeKit web console - IIS snaphots for support

Internal files of the Windows farm.safe module


<!DOCTYPE safe>
<macro name="VIRTUAL_IP" value="VIRTUAL_IP_TO_BE_DEFINED" />
<macro name="IIS_PORT" value="TCP_PORT_TO_BE_DEFINED" />
<service mode="farm" maxloop="3" loop_interval="24">
  <!-- Farm topology configuration for the membership protocol -->
  <!-- Names or IP addresses on the default network are set during initialization in the console -->
    <lan name="default" />
  <!-- Virtual IP Configuration -->
  <!-- Use VIRTUAL_IP defined in macro above -->
      <interface check="on" arpreroute="on">
        <virtual_interface type="vmac_directed">
          <virtual_addr addr="%VIRTUAL_IP%" where="alias"/>
      <group name="IIS">
        <!-- Set load-balancing rule on IIS_PORT defined in macro above -->
        <rule port="%IIS_PORT%" proto="tcp" filter="on_addr"/>
  <!-- TCP Checker Configuration -->
  <!-- Use VIRTUAL_IP and IIS_PORT defined in macros above -->
    <tcp ident="HTTP_IIS" when="both">
  <!-- User scripts activation -->
  <user nicestoptimeout="300" forcestoptimeout="300" logging="userlog" />


@echo off

rem Script called on all servers for starting applications

rem For logging into SafeKit log use:
rem "%SAFE%\safekit" printi | printe "message"

rem stdout goes into Application log
echo "Running start_both %*" 

set res=0

net start w3svc
if not %errorlevel% == 0 (
  %SAFE%\safekit printi "IIS start failed"
) else (
  %SAFE%\safekit printi "IIS started"

set res=%errorlevel%
if %res% == 0 goto end

set res=%errorlevel%
"%SAFE%\safekit" printe "start_both failed"

rem uncomment to stop SafeKit when critical
rem "%SAFE%\safekit" stop -i "start_both"



@echo off

rem Script called on all servers for stopping application

rem For logging into SafeKit log use:
rem "%SAFE%\safekit" printi | printe "message"

rem ----------------------------------------------------------
rem 2 stop modes:
rem - graceful stop
rem   call standard application stop with net stop
rem - force stop (%1=force)
rem   kill application's processes
rem ----------------------------------------------------------

rem stdout goes into Application log
echo "Running stop_both %*" 

set res=0

rem default: no action on forcestop
if "%1" == "force" goto end

%SAFE%\safekit printi "Stopping IIS..."
net stop w3svc

rem If necessary, uncomment to wait for the real stop of services
rem "%SAFEBIN%\sleep" 10

if %res% == 0 goto end

"%SAFE%\safekit" printe "stop_both failed"


Evidian SafeKit Pricing

White Papers


To receive Evidian news, please fill the following form.