Back once again it’s Linux time. This post also can be named as how to set up a floating IP between load balancers or how to set up a shared IP for between load balancers or how to configure a high available load-balancers. what happens here we are using keepalived, which allows us to setup HAProxy nodes to create active/passive cluster so that load can be divided amount node members. If the main HAProxy node goes down, the second one(slave node) will be elected as master node. We are getting it done using VRRP.

What & How VRRP Works

The VRRP protocol provides automatic assignment of available IP to participating hosts which ensures that one of participating nodes is master. The master and slave node acts as a group where the backup node listens for multicast packets from a node with a higher priority which could the master node. If the backup node fails to receive VRRP advertisements for a period of time longer than three times of the advertisement timer, the backup node takes the master state and assigns the configured shared/floating IP to itself. In case there are more than one backup nodes with the same priority, the one with the highest IP wins the election.

Keepalived is a routing software written in C. The main goal of this project is to provide simple and robust facilities for loadbalancing and high-availability to Linux system and Linux based infrastructures.


HAProxy is a free, very fast and reliable solution offering high availability, load balancing, and proxying for TCP and HTTP-based applications. It is particularly suited for very high traffic web sites and powers quite a number of the world’s most visited ones.

Today what we are trying to implement the load balancer cluster as follows. It’ll be an active/passive load balancer cluster

Keepalived & HAProxy Load Balancing
Keepalived & HAProxy Load Balancing

I’m using below IPs for explanation purposes.

  • Master node address:
  • Slave node address: 1192.168.6.170
  • Shared/Floating Virtual address:

Below mentioned is the two scenario that can occur within a active/passive load balancer cluster.

Master Load Balancer is Up. Usual Scenario
Master Load Balancer is Up. Usual Scenario
Master Load Balancer is Down. Slave Load Balancer Takes Over
Master Load Balancer is Down. Slave Load Balancer Takes Over

Configuring HAProxy and Keepalived

Install HAProxy and Keepalived on both ubuntu nodes.

Load balancing in HAProxy also requires the ability to bind to an IP address that are nonlocal, meaning that it is not assigned to a device on the local system. Below configuration is added so that floating/shared IP can be assigned to one of the load balancers. Below line get it done.

Now you know what’s happening with above lines let’s edit the sysctl.conf.

Add the below lines.

To enable the changes made in sysctl.conf you will need to run the command.

Now let’s create keepalived.conf file on each instances. All the below Keepalived configurations are explained in the User guide provided by Keepalived and refer this guide as well.

Add the below configuration on the master node

Add the below configuration on the slave node.

Restart Keepalived.

Now let’s configure HAProxy on both instances. You will have do the below steps on master node as well as slave node.

set the property ENABLED to 1.

Note that below configurations are as per my requirement.

If above configurations are not clear please refer this guide from HAProxy.


Let’s check whether our configuration has been done correctly. Try executing ip addr on master node. As you can see on the master node IP is assigned.

Try executing ip addr on slave node.

Let’s stop the HAProxy on the master node. Now you can see that IP address will be assigned to the slave node. If you start HAproxy instance on the master node IP address will be assigned back to master node. See the O/P below.

Try or URL to login into statistics report for HAProxy.

Statistics Report for HAProxy
Statistics Report for HAProxy

If you have any questions let me know in the comments below. Your feedback is highly appreciated(happy-face).