Windows Load Balancing and Failover

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

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

On the previous figure, the Windows application is 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 the Windows application that responds to the request of the client. The output messages are sent directly from the Windows 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.

Configuration overview of Windows load balancing and failover

With SafeKit, you can configure either a farm application module or a mirror application module according the high availability architecture suited for an application. For Windows load balancing and failover, the right module is the farm module.

Configuration overview of Windows load balancing and failover

Starting from the generic farm module, the Windows module can be customized with the SafeKit web console (Advanced configuration).

The configuration files for Windows load balancing and failover are given here.

They include:

1. the Windows application stop and start scripts,

2. the configuration file userconfig.xml which contains:

Once the module is configured and tested, you can publish it with the web console. Thus, deployment of Windows load balancing and failover requires no specific IT skills:

    • install the application on two standard Windows servers (or more)
    • install the SafeKit software on both servers

Then with the SafeKit web console (Quick configuration):

Here are two examples of Windows application modules:

SafeKit configuration files for Windows load balancing and failover

userconfig.xml

<!DOCTYPE safe>
<safe>
<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 -->
  <farm>
    <lan name="default" />
  </farm>
  <!-- Virtual IP Configuration -->
  <!-- Replace
     * VIRTUAL_IP_ADDR_TO_BE_DEFINED by the IP address of your virtual server 
  -->
  <vip>
    <interface_list>
      <interface check="on" arpreroute="on">
        <virtual_interface type="vmac_directed">
          <virtual_addr addr="VIRTUAL_IP_ADDR_TO_BE_DEFINED" where="alias"/>
        </virtual_interface>
      </interface>
    </interface_list>
    <loadbalancing_list>
      <group name="Windows_Appli">
        <!-- Set load-balancing rule on the TCP port of the service to load balance -->
        <rule port="TCP_PORT_TO_BE_DEFINED" proto="tcp" filter="on_addr"/>
      </group>
    </loadbalancing_list>
  </vip>
  <!-- TCP Checker Configuration -->
  <!-- Replace
     * VIRTUAL_IP_ADDR_TO_BE_DEFINED by the IP address of your virtual server 
     * TCP_PORT_TO_BE_DEFINED by the TCP port of the service to check
  -->
  <check>
    <tcp ident="Check_Appli" when="both">
      <to
         addr="VIRTUAL_IP_ADDR_TO_BE_DEFINED"
         port="TCP_PORT_TO_BE_DEFINED"
         interval="10"
         timeout="5"
       />
    </tcp>
  </check>
  <!-- User scripts activation -->
  <user nicestoptimeout="300" forcestoptimeout="300" logging="userlog" />
</service>
</safe>

start_both.cmd

@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

rem Fill with your services start call

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

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

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

:end

stop_both.cmd

@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
rem 2 stop modes:
rem
rem - graceful stop
rem   call standard application stop with net stop
rem
rem - force stop (%1=force)
rem   kill application's processes
rem
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

rem Fill with your services stop call

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"

:end

Other examples of Windows and Linux high availability modules

Examples of mirror application modules:

Examples of farm application modules:

contact
CONTACT
Demonstration

Evidian SafeKit Pricing





White Papers

contact
NEWS

To receive Evidian news, please fill the following form.