Install HAProxy and Keepalived (Virtual IP)

Install Keepalived Following steps should be performed in LB1 and LB2 accordingly. 1. Install Keepalived package: On RHEL/CentOS: $ yum install -y centos-release $ yum install -y keepalived $ chkconfig keepalived on On Debian/Ubuntu: $ sudo apt-get install -y keepalived $ sudo update-rc.d keepalived defaults 2. Tell kernel to allow binding non-local IP into the hosts and apply the changes: $ echo "net.ipv4.ip_nonlocal_bind = 1" >> /etc/sysctl.conf $ sysctl -p Configure Keepalived and Virtual IP 1. Login into LB1 and add following line into /etc/keepalived/keepalived.conf: vrrp_script chk_haproxy { script "killall -0 haproxy" # verify the pid existance interval 2 # check every 2 seconds weight 2 # add 2 points of prio if OK } vrrp_instance VI_1 { interface eth0 # interface to monitor state MASTER virtual_router_id 51 # Assign one ID for this route priority 101 # 101 on master, 100 on backup virtual_ipaddress { 192.168.10.100 # the virtual IP } track_script { chk_haproxy } } 2. Login into LB2 and add following line into /etc/keepalived/keepalived.conf: vrrp_script chk_haproxy { script "killall -0 haproxy" # verify the pid existance interval 2 # check every 2 seconds weight 2 # add 2 points of prio if OK } vrrp_instance VI_1 { interface eth0 # interface to monitor state MASTER virtual_router_id 51 # Assign one ID for this route priority 100 # 101 on master, 100 on backup virtual_ipaddress { 192.168.10.100 # the virtual IP } track_script { chk_haproxy } } 3. Start Keepalived in both nodes: $ sudo /etc/init.d/keepalived start 4. Verify the Keepalived status. LB1 should hold the VIP and the MASTER state while LB2 should run as BACKUP state without VIP: LB1 IP: $ ip a | grep -e inet.*eth0 inet 192.168.10.101/24 brd 192.168.10.255 scope global eth0 inet 192.168.10.100/32 scope global eth0 LB1 Keepalived state: $ cat /var/log/messages | grep VRRP_Instance Apr 19 15:47:25 lb1 Keepalived_vrrp[6146]: VRRP_Instance(VI_1) Transition to MASTER STATE Apr 19 15:47:25 lb1 Keepalived_vrrp[6146]: VRRP_Instance(VI_1) Entering MASTER STATE LB2 IP: $ ip a | grep -e inet.*eth0 inet 192.168.10.102/24 brd 192.168.10.255 scope global eth0 LB2 Keepalived state: $ cat /var/log/messages | grep VRRP_Instance Apr 19 15:47:25 lb2 Keepalived_vrrp[6146]: VRRP_Instance(VI_1) Transition to MASTER STATE Apr 19 15:47:25 lb2 Keepalived_vrrp[6146]: VRRP_Instance(VI_1) Received higher prio advert Apr 19 15:47:25 lb2 Keepalived_vrrp[6146]: VRRP_Instance(VI_1) Entering BACKUP STATE *Debian/Ubuntu: Under some distributions /var/log/messages might be missing , try to find the similar log under /var/log/syslog. Installation completed! You can now access your database servers through VIP, 192.168.10.100 port 33306.

To avoid a single point of failure with your HAProxy. One would set up two identical HAProxy instances (one active and one standby) and use Keepalived to run VRRP between them. VRRP provides for you a virtual IP address to the active HAProxy, and transfers the Virtual IP to the standby HAProxy in case of failure. This is seamless because the two HAProxy instances need no shared state.

Install HAProxy and Keepalived (Virtual IP)

In this example, we are using 2 nodes to act as the load balancer with IP failover in front of our database cluster. VIP will be floating around between LB1 (master) and LB2 (backup). When LB1 is down, the VIP will be taking over by LB2 and once the LB1 up again, the VIP will be failback to LB1 since it hold the higher priority number.

We are using following hosts/IPs:

VIP: 192.168.10.100

LB1: 192.168.10.101

LB2: 192.168.10.102

DB1: 192.168.10.111

DB2: 192.168.10.112

DB3: 192.168.10.113

ClusterControl: 192.168.10.115

You may refer to following diagram for the architecture:

Install HAproxy

1. Login into ClusterControl node to perform this installation. We have built a script to deploy HAproxy automatically which is available under our Git repository https://github.com/severalnines/s9s-admin. Navigate to the installation directory which you used to deploy the database cluster and clone the repo:

$ cd /root/s9s-galera-2.2.0/mysql/scripts/install

$ git clone https://github.com/severalnines/s9s-admin.git

2. Before we start to deploy, make sure LB1 and LB2 are accessible using passwordless SSH. Copy the SSH keys to the load balancer nodes:

$ ssh-copy-id -i ~/.ssh/id_rsa 192.168.10.101

$ ssh-copy-id -i ~/.ssh/id_rsa 192.168.10.102

3. Install HAproxy into both nodes:

./s9s-admin/cluster/s9s_haproxy –install -i 1 -h 192.168.10.101

./s9s-admin/cluster/s9s_haproxy –install -i 1 -h 192.168.10.102

4. You will noticed that these 2 load balancer nodes have been installed and provisioned by ClusterControl. You can verify this by login into ClusterControl > Nodes and you should see similar screenshot as below:

Install Keepalived

Following steps should be performed in LB1 and LB2 accordingly.

1. Install Keepalived package:

On RHEL/CentOS:

$ yum install -y centos-release

$ yum install -y keepalived

$ chkconfig keepalived on

On Debian/Ubuntu:

$ sudo apt-get install -y keepalived

$ sudo update-rc.d keepalived defaults

2. Tell kernel to allow binding non-local IP into the hosts and apply the changes:

$ echo “net.ipv4.ip_nonlocal_bind = 1” >> /etc/sysctl.conf

$ sysctl -p

Configure Keepalived and Virtual IP

1. Login into LB1 and add following line into /etc/keepalived/keepalived.conf:

vrrp_script chk_haproxy {
   script “killall -0 haproxy”   # verify the pid existance
   interval 2                         # check every 2 seconds
   weight 2                          # add 2 points of prio if OK
}
vrrp_instance VI_1 {
   interface eth0                  # interface to monitor
   state MASTER
   virtual_router_id 51          # Assign one ID for this route
   priority 101                     # 101 on master, 100 on backup
   virtual_ipaddress {
       192.168.10.100           # the virtual IP
   }
   track_script {
       chk_haproxy
   }
}

2. Login into LB2 and add following line into /etc/keepalived/keepalived.conf:

vrrp_script chk_haproxy {
   script “killall -0 haproxy”   # verify the pid existance
   interval 2                         # check every 2 seconds
   weight 2                         # add 2 points of prio if OK
}
vrrp_instance VI_1 {
   interface eth0                  # interface to monitor
   state MASTER
   virtual_router_id 51          # Assign one ID for this route
   priority 100                     # 101 on master, 100 on backup
   virtual_ipaddress {
       192.168.10.100           # the virtual IP
   }
   track_script {
       chk_haproxy
   }
}

 

3. Start Keepalived in both nodes:

$ sudo /etc/init.d/keepalived start

4. Verify the Keepalived status. LB1 should hold the VIP and the MASTER state while LB2 should run as BACKUP state without VIP:

LB1 IP:

$ ip a | grep -e inet.*eth0
 inet 192.168.10.101/24 brd 192.168.10.255 scope global eth0
 inet 192.168.10.100/32 scope global eth0

LB1 Keepalived state:

$ cat /var/log/messages | grep VRRP_Instance
Apr 19 15:47:25 lb1 Keepalived_vrrp[6146]: VRRP_Instance(VI_1) Transition to MASTER STATE
Apr 19 15:47:25 lb1 Keepalived_vrrp[6146]: VRRP_Instance(VI_1) Entering MASTER STATE

LB2 IP:

$ ip a | grep -e inet.*eth0
 inet 192.168.10.102/24 brd 192.168.10.255 scope global eth0

LB2 Keepalived state:

$ cat /var/log/messages | grep VRRP_Instance
Apr 19 15:47:25 lb2 Keepalived_vrrp[6146]: VRRP_Instance(VI_1) Transition to MASTER STATE
Apr 19 15:47:25 lb2 Keepalived_vrrp[6146]: VRRP_Instance(VI_1) Received higher prio advert
Apr 19 15:47:25 lb2 Keepalived_vrrp[6146]: VRRP_Instance(VI_1) Entering BACKUP STATE

*Debian/Ubuntu: Under some distributions /var/log/messages might be missing , try to find the similar log under /var/log/syslog.

Installation completed! You can now access your database servers through VIP, 192.168.10.100 port 33306.

Rate this post