How to Setup HAProxy Load Balancer on Debian 10

Try it in our public cloud & Get $5 Credit
CLAIM NOW

Website performance and uptime are very crucial for heavy websites nowadays. Setup HAProxy Load Balancer on Debian 10 would be a good way to achieve your website loading goal. HAProxy is an open-source load balancer and proxy server that can be used to distribute web applications across multiple hosts. It is specially designed for very high traffic websites for better performance, availability, and redundancy. HAProxy works by distributing the server load to multiple backend servers using the load balancing algorithm. It is used by many companies including, Twitter, Tumblr, GoDaddy and Amazon.

In this tutorial, we will show you how to setup HAProxy load balancing with two web servers on Debian 10.

Requirements

  • One server running Debian 10 for HAProxy.
  • Two servers running Debian 10 with a web server installed and configured.
  • A static LAN between the HAProxy and the two web servers. In the tutorial we configured IP address 192.168.0.4 on HAProxy server, 192.168.0.10 on Webserver1 and 192.168.0.11 on Webserver2.


Getting Started

Before starting the setup HAProxy Load Balancer on Debian 10, update your server with the latest version by running the following command:

apt-get update -y && apt-get upgrade -y

Once your server is up-to-date. Restart it to apply the changes, if needed.


Install HAProxy

By default, HAProxy package is not available in the Debian 10 default repository. So you will need to add the repository for that.

First, install curl and download the GPG key for HAProxy with the following command:

apt-get install curl -y
curl https://haproxy.debian.net/bernat.debian.org.gpg | apt-key add -

Next, add the HAProxy repository to APT with the following command:

echo "deb http://haproxy.debian.net $(lsb_release -cs)-backports-2.0 main" | tee /etc/apt/sources.list.d/haproxy.list

Then, update the repository and install HAProxy with the following command:

apt-get install haproxy=2*

Once installed, you can check the version of HAProxy with the following command:

haproxy -v

It should show the following output:

 HA-Proxy version 2.0.5-1~bpo10+1 2019/08/22 - https://haproxy.org/

You can also check the HAProxy service using the following command:

systemctl status haproxy

Then you should see the following output:

@page { size: 8.5in 11in; margin: 0.79in } p { margin-bottom: 0.1in; direction: ltr; color: #000000; line-height: 120%; text-align: left; orphans: 0; widows: 0; background: transparent } p.western { font-family: "Liberation Serif", serif; font-size: 12pt; so-language: en-IN } p.cjk { font-family: "Droid Sans Fallback"; font-size: 12pt; so-language: zh-CN } p.ctl { font-family: "FreeSans"; font-size: 12pt; so-language: hi-IN } a:link { color: #000080; so-language: zxx; text-decoration: underline } 
 ● haproxy.service - HAProxy Load Balancer
   Loaded: loaded (/lib/systemd/system/haproxy.service; enabled; vendor preset: enabled)
   Active: active (running) since Mon 2019-09-09 01:15:46 EDT; 8min ago
     Docs: man:haproxy(1)
           file:/usr/share/doc/haproxy/configuration.txt.gz
 Main PID: 2088 (haproxy)
    Tasks: 2 (limit: 1138)
   Memory: 1.9M
   CGroup: /system.slice/haproxy.service
           ├─2088 /usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid -S /run/haproxy-master.sock
           └─2089 /usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid -S /run/haproxy-master.sock
 
 
 Sep 09 01:15:46 debian systemd[1]: Starting HAProxy Load Balancer...
 Sep 09 01:15:46 debian haproxy[2088]: [NOTICE] 251/011546 (2088) : New worker #1 (2089) forked
 Sep 09 01:15:46 debian systemd[1]: Started HAProxy Load Balancer.


Configure HAProxy

Next, you will need to Setup HAProxy Load Balancer on Debian 10 for load balancing. You can achieve this by editing file /etc/haproxy/haproxy.cfg.

nano /etc/haproxy/haproxy.cfg

First, you will need to add the Frontend section to defines the IP addresses and ports that clients can connect to. You can add your HAProxy server IP address and port 80 as shown below:

frontend Local_Server
  bind 192.168.0.4:80
  mode http
  default_backend Web_Servers

Then, you will need to add Backend web servers that will be load balanced and assigned to handle requests. You can add your web servers IP as shown below:

backend Web_Servers
  mode http
  balance roundrobin
  option forwardfor
  http-request set-header X-Forwarded-Port %[dst_port]
  http-request add-header X-Forwarded-Proto https if { ssl_fc }
  option httpchk HEAD / HTTP/1.1rnHost:localhost
  server webserver1.example.com 192.168.0.10
  server webserver2.example.com 192.168.0.11

Next, add the following lines to enable Haproxy statistics to monitor HAProxy from the web browser.

listen stats
  bind 192.168.0.4:8181
  stats enable
  stats hide-version
  stats refresh 30s
  stats show-node
  stats auth admin:admin@123
  stats uri /stats

Save and close the file when you are finished. Then, restart the HAProxy service to apply the configuration changes:

systemctl restart haproxy


Check HAProxy Load Balancing

Now, open your web browser and type the URL http://192.168.0.4:8181/stats. You will be redirected to the HAProxy statistics login page as shown below:


Provide username and password which you have defined in HAProxy configuration file and click on the Sign in button. It will log you into the HAProxy statistics dashboard in the following screen:


You can now also access your web servers by typing the URL http://192.168.0.4 in your web browser and refresh the page. You should see your backend web servers one by one as shown below:


First Web:


Second Web server:


Conclusion

Congratulations! You have successfully configured HAProxy load balancing server on Debian 10. You can now increase your web server performance by experimenting with different configurations.

For more information, you can visit the HAProxy documentation at HAProxy.