Browse
 
Tools Add
Rss Categories
-->

HAProxy for Linux VPS

Reference Number: AA-00916 Created: 2012-09-20 13:25 Last Updated: 2012-10-10 02:17 0 Rating/ Voters

What is haproxy?

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 web sites crawling under very high loads while needing persistence or Layer7 processing. Supporting tens of thousands of connections is clearly realistic with todays hardware. Its mode of operation makes its integration into existing architectures very easy and riskless, while still offering the possibility not to expose fragile web servers to the Net.

Please note

Debian Install

Simply use apt-get to install haproxy, as this will be available within the default repository. Run the following command on the load balancer server.

apt-get install haproxy

Now that you have installed haproxy it needs to be configured. The location of the configuration file is found below.

/etc/haproxy/haproxy.cfg

First thing you want to do is to make a backup of the default cfg file. Do this with the simple command below.

cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.bak

Once done we need to replace the entire content of that file with the data below.


 global
        log 127.0.0.1   local0
        log 127.0.0.1   local1 notice
        #log loghost    local0 info
        maxconn 4096
        #debug
        #quiet
        user haproxy
        group haproxy

defaults
        log     global
        mode    http
        option  httplog
        option  dontlognull
        retries 3
        redispatch
        maxconn 2000
        contimeout      5000
        clitimeout      50000
        srvtimeout      50000

listen NAME_OF_YOUR_WEBFARM LOAD_BLANCER_IP_HERE:80
       mode http
       stats enable
       balance roundrobin
       cookie JSESSIONID prefix
       option httpclose
       option forwardfor
       option httpchk HEAD /check.txt HTTP/1.0
       server webA FIRST_WEB_SERVER_IP_HERE:80 cookie A check
       server webB SECOND_WEB_SERVER_IP_HERE:80 cookie B check

Now you should shut down your local apache server, as the load balancer will be operating on port 80, which is being used by apahce. Do this by doing the following.

 cd /etc/init.d
./apache2 stop

The server should now respond with confirming that the service is stopped.

Now start haproxy with the following command

 ./haproxy start 

You can confirm that the proxy service is up and running by checking the following url which will be pointed to the load balance.

 http://yourloadbalancerdomain/haproxy?stats 

When you do check this it will show that your servers are down. This is because we have not installed the check file on our webservers yet. The following steps referrs to how to prepare the webservers that will be balanced by our load balancer haproxy.

The first thing you would want to do is to set the log system on the destination servers to manage the access comming from the load balancer. IF this step is not taken you wont get any relevant visotor logs, All the logs on the webservers will show are access from the load balancer, and not the true source of the request.


Edit your apache2.conf file and replace your LogFormat section with this.


 #LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined 


Now haproxy uses a check file that use as a server heart beat. That being said you don't want this in your log file, as it will bloat your access logs. You need to modify the conf file for the default site on each webserver you are targeting. Do the following to edit.


vi /etc/apache2/sites-available/default

And insert the following. You must also comment out all other CustomLog directives in your vhost configuration

 SetEnvIf Request_URI "^/check\.txt$" dontlog
CustomLog /var/log/apache2/access.log combined env=!dontlog

Now you are good to restart apache, and bring them online with your haproxy load balancer. To do this create the check.txt file, and place it in the location of your default site on the server. You should be able to check the haproxy status page to check if they are online. If so check the site by either using the loadbalancer IP, or domain name if one is assigned.

Centos Install

First download haproxy as you will need to compile it for this distrobution.

wget http://haproxy.1wt.eu/download/1.4/src/haproxy-1.4.20.tar.gz /download

Once done simply untar it in your download location

tar -zxvf haproxy-1.4.20.tar.gz

Now before you compile make sure you have the latest one, use yum to find and install gcc for example

Simply swith to upacked folder and make

cd haproxy-1.4.20 make TARGET=linux26

Now copy the app over your sbin, and then edit your haproxy conf file. After you backup the conf file ofcourse.

cp haproxy /usr/sbin/haproxy
vi /etc/haproxy.cfg</nowiki

Now replace the entire file with below

 <nowiki> global
        log 127.0.0.1   local0
        log 127.0.0.1   local1 notice
        #log loghost    local0 info
        maxconn 4096
        #debug
        #quiet
        user haproxy
        group haproxy

defaults
        log     global
        mode    http
        option  httplog
        option  dontlognull
        retries 3
        redispatch
        maxconn 2000
        contimeout      5000
        clitimeout      50000
        srvtimeout      50000

listen NAME_OF_YOUR_WEBFARM LOAD_BLANCER_IP_HERE:80
       mode http
       stats enable
       balance roundrobin
       cookie JSESSIONID prefix
       option httpclose
       option forwardfor
       option httpchk HEAD /check.txt HTTP/1.0
       server webA FIRST_WEB_SERVER_IP_HERE:80 cookie A check
       server webB SECOND_WEB_SERVER_IP_HERE:80 cookie B check

Now you should shut down your local apache server, as the load balancer will be operating on port 80, which is being used by apahce. Do this by doing the following.

 cd /etc/init.d
./httpd stop

The server should now respond with confirming that the service is stopped.

Now start haproxy with the following command

cd /usr/sbin/
./haproxy start

You can confirm that the proxy service is up and running by checking the following url which will be pointed to the load balance.

 http://yourloadbalancerdomain/haproxy?stats 

When you do check this it will show that your servers are down. This is because we have not installed the check file on our webservers yet. The following steps referrs to how to prepare the webservers that will be balanced by our load balancer haproxy.

The first thing you would want to do is to set the log system on the destination servers to manage the access comming from the load balancer. IF this step is not taken you wont get any relevant visotor logs, All the logs on the webservers will show are access from the load balancer, and not the true source of the request.

Now you must do the rest on your web servers you are targeting


Now edit your conf for and insert these two sections.

vi /etc/httpd/conf/httpd.conf

First to get true visator logs from your loadbalancer

 #LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined 

Second to prevent the load balancer from bloating your access logs on the webserver.

 SetEnvIf Request_URI "^/check\.txt$" dontlog
CustomLog /var/log/apache2/access.log combined env=!dontlog

Now you are good to restart apache, and bring them online with your haproxy load balancer. To do this create the check.txt file, and place it in the location of your default site on the server. You should be able to check the haproxy status page to check if they are online. If so check the site by either using the loadbalancer IP, or domain name if one is assigned.

Rss Comments
  • There are no comments for this article.
Info Add Comment
Nickname: Your Email: Subject: Comment:
Enter the code below: