[Ubuntu] HAProxy for Linux VPS

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.

 

Was this article helpful?
0 out of 0 found this helpful