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).


  1. Marin Biberović July 30, 2015 at 5:50 pm


    Can you explain what needs to be done on the network side for the “floating IP” to work? Is that IP supposed to be assigned to both HAProxy servers’ switch ports?


  2. C0rWin November 26, 2015 at 3:58 pm

    thanks, nice tutorial!
    You have a typo in the sentence “Let stop the HAProxy on the master node. Now you can see that IP address will be assigned to the salve node”. “Salve” I guess should be slave instead.

  3. ABHIJIT March 9, 2016 at 9:01 pm

    Hi, After stop haproxy in centos7, keepalived is not switching over to the to backup keepalived, and user is unable to access the web server. Only after stoping the keepalived then automatically backup is working.

    1. Dasun Hegoda March 10, 2016 at 10:45 am

      You must check the keepalived configuration again.

      1. Hehehe01 March 17, 2016 at 6:47 am

        Hi. I have the same issue with ABHIJIT. I am using the latest version of keepalived and is running a Centos 6.7 machine. I also tried to copy your config directly, and still doesn’t work. Do you have any idea why?

        1. IrishSoldier82 February 8, 2017 at 11:15 pm

          Did you ever figure out how to resolve this, I can get my virtual ip just fine, but when I stop haproxy it is not dropping the IP and picking it up on the other server, I know this is old and nobody probably looks at it, but I hope they do.

  4. Pingback: Haproxy Balancer Database + keepalived – "DOKUMENTASI"

  5. BenJosh July 12, 2017 at 10:50 pm

    Is there a way to get ha-proxy to bind only to the virtual ip and still have ha-proxy start up correctly on the backup when it does not have the virtual ip? I can’t have it binding to all IP address’s. It will mess other things up.

  6. George Patterson November 28, 2017 at 3:38 am

    This walk through seems to be very thorough. The top diagram said Balanser, it should be Balancer. Phonetically spelt correct though.

  7. Pingback: 澳门威尼斯人开户-威尼斯人开户注册-威尼斯人开户网-

Leave A Comment

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.