Revision as of 12:20, June 30, 2016 by Mlevy (talk | contribs) (Update with the copy of version: DRAFT)
Jump to: navigation, search

Load Balancing

Overview and Architecture

The solution uses a common Linux HA framework from http://clusterlabs.org. There are two components involved in this solution:

  • Cman uses corosync internally to provide a platform for membership, messaging, and quorum among the hosts.
  • Pacemaker is a cluster resource manager that controls where resources (processes) are executed. Pacemaker works with the processes like Apache httpd using resource agents to provide controls of the process such as start/stop/status.

The following diagram shows a primary/backup design to associate a single virtual IP address with httpd. Whenever the primary host fails, the virtual IP address and the httpd process can be automatically fail over to the backup host.

Gir-loadbalance.png

As a simple two host primary/backup solution, the hosts must be deployed on the same subnet that allows UDP multicast. This solution provides the same reliability as a network that hosts the two machines handling the virtual IP address.

Deploying the Load Balancer

Important
For load balancers used for Recording Processors, warm standby functionality must be disabled.

Prerequisites

  • Red Hat Enterprise Linux 6 or CentOS 6 We don't officially support CentOS yet
Tip
Network Manager can be enabled as part of the OS installation. To disable Network Manager, see the Red Hat documentation here.

Installing the OS

Install the required software using the following command:

yum -y install httpd pacemaker cman pcs ccs resource-agents

Setting up the HTTP Load Balancer

On both servers, create the following files:

  • create /etc/httpd/conf.d/serverstatus.conf, and add the following text:
<Location /server-status>
 SetHandler server-status
 Order deny,allow
 Deny from all
 Allow from 127.0.0.1
</Location>
  • create /etc/httpd/conf.d/loadbalancer.conf, and add the following text:
Important
If your existing configuration already includes the load balancer rules in the /etc/httpd/conf/httpd.conf, skip this step.

The following lines starting with BalancerMember refers to the URL to the servers for Interaction Recording Web Services (or Web Services if you're using version 8.5.210.02 or earlier), Recording Processor, Recording Crypto Server, Interaction Receiver, and WebDAV server.

Header add Set-Cookie "ROUTEID=.%{BALANCER_WORKER_ROUTE}e; path=/" env=BALANCER_ROUTE_CHANGED
 
 
# Web Server
<Proxy balancer://htcc>
BalancerMember http://htcc1:8080 route=HTCC1
BalancerMember http://htcc2:8080 route=HTCC2
BalancerMember http://htcc3:8080 route=HTCC3
ProxySet stickysession=ROUTEID
</Proxy>
ProxyPass /api balancer://htcc/api
ProxyPass /internal-api balancer://htcc/internal-api
ProxyPass /ui balancer://htcc/ui
 
 
# RP
<Proxy balancer://rp>
BalancerMember http://rp1:8889
BalancerMember http://rp2:8889
</Proxy>
ProxyPass /rp/api balancer://rp/api
 
 
# RCS
<Proxy balancer://rcs>
BalancerMember http://rcs1:8008 connectiontimeout=10000ms route=RCS
BalancerMember http://rcs2:8008 connectiontimeout=10000ms route=RCS_b
</Proxy>
ProxyPass /rcs balancer://rcs/rcs stickysession=JSESSIONID
 
 
# Interaction Receiver
<Proxy balancer://sm>
BalancerMember http://ir1
BalancerMember http://ir2 status=H
</Proxy>
ProxyPass /interactionreceiver balancer://sm/interactionreceiver
 
# WebDAV
<Proxy balancer://webdav>
BalancerMember http://webdav1
BalancerMember http://webdav2 status=H
</Proxy>
ProxyPass /webdav/recordings balancer://webdav/recordings
ProxyPass /webdav/dest2 balancer://webdav/dest2

Setting Up Pacemaker and Cman

Important
Preform the following commands using the root user.

Disable Autostart for Httpd

Pacemaker manages the startup of httpd. Disable httpd from chkconfig services using the following command:

chkconfig httpd off

Setting Up the Hosts File

Make sure there is a hostname for both servers and that the hostname is resolvable on both hosts, either using DNS or /etc/hosts file. ip1 and ip2 are used as the hostnames thereafter.

# /etc/hosts
# ... keep the existing lines, and only append new lines below
192.168.33.18 ip1
192.168.33.19 ip2

Setting Up the Cluster

Run the following command on each host to create the cluster configuration:

ccs -f /etc/cluster/cluster.conf --createcluster webcluster
ccs -f /etc/cluster/cluster.conf --addnode ip1
ccs -f /etc/cluster/cluster.conf --addnode ip2
ccs -f /etc/cluster/cluster.conf --addfencedev pcmk agent=fence_pcmk
ccs -f /etc/cluster/cluster.conf --addmethod pcmk-redirect ip1
ccs -f /etc/cluster/cluster.conf --addmethod pcmk-redirect ip2
ccs -f /etc/cluster/cluster.conf --addfenceinst pcmk ip1 pcmk-redirect port=ip1
ccs -f /etc/cluster/cluster.conf --addfenceinst pcmk ip2 pcmk-redirect port=ip2
ccs -f /etc/cluster/cluster.conf --setcman two_node=1 expected_votes=1
echo "CMAN_QUORUM_TIMEOUT=0" >> /etc/sysconfig/cman


Start the Service

Start the cman and pacemaker services on each host using the following command:

service cman start
service pacemaker start
chkconfig --level 345 cman on
chkconfig --level 345 pacemaker on

Setting Up UDP Unicast

Important
This is an optional step.

This solution relies on UDP multicast to work, but can also work with UDP unicast. Edit the /etc/cluster/cluster.conf file and insert an attribute to the <cman> tag as follows:

...
<cman transport="udpu" two_node="1" expected_votes="1/>
...

Restart both servers to take effect.

Setting Cluster Defaults

Run the following on one of the servers.

pcs property set stonith-enabled=false
pcs property set no-quorum-policy=ignore
pcs resource defaults migration-threshold=1

Configure the Virtual IP Address and Apache httpd

Run the following on one of the servers.

For the first command below, nic=eth0 refers to the network interface that brings up the virtual IP address. Change eth0 to the active network interface your environment uses.

Change <Virtual IP> in the first command below to your virtual IP assigned to this load balancer pair.

pcs resource create virtual_ip ocf:heartbeat:IPaddr2 ip=<Virtual IP> nic=eth0 cidr_netmask=32 op monitor interval=30s
pcs resource create webserver ocf:heartbeat:apache configfile=/etc/httpd/conf/httpd.conf statusurl="http://localhost/server-status" op monitor interval=30s
pcs resource meta webserver migration-threshold=10
pcs constraint colocation add webserver virtual_ip INFINITY
pcs constraint order virtual_ip then webserver

Maintaining Pacemaker

The following commands help you with the maintenance operations for pacemaker.

To check the status of the cluster:

pcs status

To clear resource errors (for example, because of incorrect configuration):

pcs resource cleanup <resourcename>. A resource name is either virtual_ip or web server (for example, pcs resource cleanup webserver).

To check the status of the resources in the cluster:

crm_mon -o -1
Comments or questions about this documentation? Contact us for support!