Skip to main content
Skip table of contents

HAProxy Load Balancing on Ubuntu 16.04 Intances

 

In this guide, we will discuss how to install HAProxy and how to load balancing between two web servers.

We will use three instances. First one will be load balancing instance and others will be web servers. We will launch three instances from SkyAtlas panel.

 

Instance 1 – load balancing

Public IP address : x.x.x.x

Private IP address : 10.0.0.108

 

Instance 2 – Web server

Private IP address : 10.0.0.107

 

Instance 3 – Web server

Private IP address : 10.0.0.106

First we connect to our load balancer server via ssh and install haproxy packages.

CODE
haproxyinstance:~$ sudo apt-get install haproxy

After installation is completed, we will connect our web instances via ssh and we will install Apache2 packages.

CODE
webinstance1:~$ sudo apt-get install apache2
webinstance2:~$ sudo apt-get install apache2

After web servers' installation is completed, we will re-connect our load balancing instance for doing load balancing settings. HAProxy configuration file will we located in :

CODE
/etc/haproxy/haproxy.cfg

We will edit this file using file editor, i will use vim editor, and i will add a few lines end of the configuration files.

HAProxy configuration file looks like :

CODE
global
 log /dev/log local0
 log /dev/log local1 notice
 chroot /var/lib/haproxy
 stats socket /run/haproxy/admin.sock mode 660 level admin
 stats timeout 30s
 user haproxy
 group haproxy
 daemon
# Default SSL material locations
 ca-base /etc/ssl/certs
 crt-base /etc/ssl/private
# Default ciphers to use on SSL-enabled listening sockets.
 # For more information, see ciphers(1SSL). This list is from:
 # https://hynek.me/articles/hardening-your-web-servers-ssl-ciphers/
 ssl-default-bind-ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS
 ssl-default-bind-options no-sslv3
defaults
 log global
 mode http
 option httplog
 option dontlognull
 timeout connect 5000
 timeout client 50000
 timeout server 50000
 errorfile 400 /etc/haproxy/errors/400.http
 errorfile 403 /etc/haproxy/errors/403.http
 errorfile 408 /etc/haproxy/errors/408.http
 errorfile 500 /etc/haproxy/errors/500.http
 errorfile 502 /etc/haproxy/errors/502.http
 errorfile 503 /etc/haproxy/errors/503.http
 errorfile 504 /etc/haproxy/errors/504.http

 

Here we need to specify on which servers we want to use load balancer. For this we need to add following lines to the end of configurations file.

CODE
listen firstbalance
 bind *:80
 balance roundrobin
 option forwardfor
 option httpchk
 server webinstance1 10.0.0.106:80 check
 server webinstance2 10.0.0.107:80 check

We have stated that we will do balancing with the roundrobin algorithm. Since Apache2 web server runs on port 80, we listen port 80 and we distribute incoming requests that arrives to this port. At the bottom, we specify the private IP addresses of our servers to load balancer.After this, we need to restart the haproxy service.

CODE
haproxyinstance:~$ sudo service haproxy restart

We need to change the Default Apache page on our web servers to know which server we are redirected to. We need to connect with ssh to our web servers. After connection, we delete the /var/www/htlm/index.html file and we create a new index.html file.

CODE
webinstance1~$: cd /var/www/html
webinstance1~$: sudo rm index.html
webinstance1~$: vim index.html

 We write a simple html code in to this file and we save it. After that we will restart the apache2 sevice.

 

CODE
<html>
<header><title>Web Instance 1</title></header>
<body>Web instance 1</body>
</html>
webinstance1~$: sudo service apache2 restart

We do the same on other web server.

CODE
webinstance2~$: cd /var/www/html
webinstance2~$: sudo rm index.html
webinstance2~$: vim index.html
<html>
<header><title>Web Instance 2</title></header>
<body>Web instance 2</body>
</html>
webinstance2~$: sudo service apache2 restart 

After these processes, we will write our load balancers IP address to URL bar of web browser to access the web servers.We will see that we have access to two servers by refreshing page. We can test it with the curl command through the terminal.

CODE
$ curl LOAD_BALANCING_PUBLIC_IP_ADDRESS
<html>
<header><title>This is web instance2</title></header>
<body>
Web Instance 2
</body>
</html>

$ curl LOAD_BALANCING_PUBLIC_IP_ADDRESS
<html>
<header><title>This is web instance1</title></header>
<body>
Web Instance 1
</body>
</html>


As you can see, the load balancing instance distribute our requests to web servers. 

JavaScript errors detected

Please note, these errors can depend on your browser setup.

If this problem persists, please contact our support.