Searching HAProxy Enterprise 1.7r2
Implementing Virtual Router Redundancy Protocol (VRRP)
Implementing Virtual Router Redundancy Protocol (VRRP)
The Virtual Router Redundancy Protocol (VRRP) is a network protocol that provides for automatic assignment of available Internet Protocol (IP) routers to participating hosts. This ensures the high availability of the services that rely on HAProxy Enterprise for load-balancing.
VRRP comprises two parts:
A software installed on each node of a VRRP cluster. It computes a weight based on its configuration and local health check results.
A network protocol used by each node of a VRRP cluster to exchange information about their status.
Understanding VRRP
In general, VRRP works as follows:
The node that has the highest weight is the master. The other nodes are slaves.
The master hosts the Virtual IP (VIP). It notifies the switches and the servers on the LAN through ARP packets.
The master emits a heartbeat packet every second. This packet contains its weight and goes out on a multicast IP address (224.0.0.18).
Each node can change its weight based on its configuration and health check results.
Failover triggers
The following events can trigger a failover:
The master node lowers its weight below one of the slave nodes due to a failed health check.
A slave node is configured with a weight larger than the current master node.
The master stops emitting its heartbeat packet.
VRRP terminology
Term | Definition |
---|---|
nodes | Members of a VRRP cluster |
master | The node hosting the VIP (Virtual IP addresses) |
slave | A node in standby, listening on |
VIP | (also called Virtual IP) The IP address where the load-balancer listens for incoming traffic |
failover | The process when there is a new master node and the VIP moves from the old master node to the new one |
Installing VRRP
For Debian/Ubuntu:
$ apt-get install hapee-1.7-vrrp
For Redhat/Centos:
$ yum install hapee-1.7-vrrp
Configuring VRRP
You configure VRRP using the configuration file at /etc/hapee-1.7/hapee-vrrp.cfg
. This file is split into two main objects:
Health check script to define checks to perform and weight modulation. These checks must define the status of the local server and ensure that everything is ready.
VRRP instance to define the VIP and related configuration (VrID, weight, health check scripts, IPs, etc.)
Set parameters for VRRP health check scripts
The following parameters enable the local health checking scripts to alter the weight of local node in the VRRP cluster:
Name | Argument type | Description |
---|---|---|
| string | Command to run; accepts pipes between multiple commands. |
| integer | Interval (in seconds) between two checks |
| integer | Points to add or remove to instance weight |
| integer | Number of consecutive negative checks before considered as down |
| integer | Number of consecutive positive checks before considered as up |
The script below checks the status of the sshd
daemon every 5 seconds. If the service is not available, then its weight is reduced by 4 points:
vrrp_script chk_sshd {
script "pkill -0 sshd" # pkill -0 is cheaper than pidof
interval 5 # check every 5 seconds
weight -4 # remove 4 points of prio if missing
fall 2 # check twice before setting down
rise 1 # check once before setting up
}
Create a VRRP instance
Set the following parameters to create a VRRP instance:
Name | Argument type | Description |
---|---|---|
| string | Describes a new VRRP instance |
| string | Interface managed by keepalived |
| string | State at startup until VRRP negotiation completes. Can be either MASTER or BACKUP |
| integer | VRRP instance identifier which must be common to all nodes of the same cluster. Its value ranges from 0 to 255. |
| integer | Weight of local node in this VRRP instance |
| string | List of virtual IP addresses to add or remove when the state changes to MASTER or BACKUP. All VRRP nodes in a cluster must own the same IP. |
| string | Same as |
| string | Tracks interface status and updates priority accordingly |
| string | Runs the script and updates priority accordingly |
Set the following VRRP instance:
HAProxy Enterprise MASTER on interface eth0
Cluster id 51
Priority of 101
2 IP addresses that are not announced through theVRRP heartbeat packet
Local weight updated based on scripts chk_ssd and chk_lb
vrrp_instance vrrp_1 {
interface eth0 # or bond0 or whatever prod interface
virtual_router_id 51 # use a distinct value for each instance
priority 101 # 101 on master, 100 on backup
virtual_ipaddress_excluded {
55.55.55.55 # your shared service IP address(es)
66.66.66.66 # your shared service IP address(es)
}
track_interface {
eth0 weight -2 # interfaces to monitor
# eth1 weight -2
}
track_script {
chk_sshd
chk_lb
}
}
Warning
The VRRP configuration must be exactly the same on all nodes of a cluster. However, the priority must be adapted to the role of the server MASTER or SLAVE.