How to Install HAProxy | The Efficient Linux Load Balancer

Technicians comparing dynamic methods towards install haproxy Linux load balancer

While managing data center operations at IOFLOOD, maintaining the high availability servers that host our services is vital. Through testing we have developed streamlined methods to install HAProxy, a powerful linux load balancer that can help distribute network traffic across multiple servers. Today’s article will cover these methods, to assist our customers optimize their own high availability server.

In this HAProxy tutorial, we will guide you on how to install and use the open source solution on your Linux system. We will delve into compiling HAProxy from source, installing specific versions, and finally, how to use HAProxy and verify installation.

So, let’s dive into HAProxy setup on your Linux system!

TL;DR: How Do I Install HAProxy on Linux?

In most Linux distributions, you can install HAProxy by running the command sudo apt-get install haproxy. After installation, you can start using HAProxy by configuring the haproxy.cfg file.

To install HAProxy on Ubuntu or Debian:

sudo apt-get update
sudo apt-get install haproxy

This is a basic way to install the HAProxy command in Linux, but there’s much more to learn about installing and using HAProxy. Continue reading for more detailed information and advanced usage scenarios.

Getting Started with HAProxy Setup

HAProxy is a free, very fast, and reliable solution offering high availability, load balancing, and proxying for TCP and HTTP-based applications. It’s particularly suited for high traffic web sites and powers quite a number of the world’s most visited ones. Over the years it has become the de-facto standard opensource load balancer, is now shipped with most mainstream Linux distributions.

Install HAProxy with APT

If you’re using a Debian-based distribution like Ubuntu, you can install HAProxy using the Advanced Package Tool (APT). Before installing, it’s a good practice to update your package lists for upgrades and new package installations. Here’s how you can do it:

sudo apt-get update
sudo apt-get install -y haproxy

# Output:
# Reading package lists... Done
# Building dependency tree
# Reading state information... Done
# The following additional packages will be installed:
#   haproxy-doc
# Suggested packages:
#   vim-haproxy
# The following NEW packages will be installed:
#   haproxy haproxy-doc
# 0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
# Need to get 1,038 kB of archives.
# After this operation, 2,822 kB of additional disk space will be used.
# Do you want to continue? [Y/n]

The -y flag allows the process to continue without prompting for confirmation. After running these commands, HAProxy should be installed on your system.

YUM Method for HAProxy Install

If you’re using a RedHat-based distribution like CentOS or Fedora, you can use the Yellowdog Updater, Modified (YUM) to install HAProxy:

sudo yum update
sudo yum install haproxy

# Output:
#================================================================================
# Install  1 Package
# Total download size: 834 k
# Installed size: 2.7 M
# Is this ok [y/d/N]: 

Like with APT, after running these commands, HAProxy should be installed on your system.

Install HAProxy from Source

Sometimes, you might need to install HAProxy from source. This could be due to the need for a specific version that’s not available in your distribution’s package manager, or because you want to customize the build options. Here’s how you can do it:

wget http://www.haproxy.org/download/2.4/src/haproxy-2.4.2.tar.gz
tar xzvf haproxy-2.4.2.tar.gz
cd haproxy-2.4.2
make TARGET=linux-glibc
sudo make install

# Output:
# [A lot of compilation output]
# make[1]: Leaving directory '/home/user/haproxy-2.4.2'
# 'haproxy' -> '/usr/local/sbin/haproxy'

The make TARGET=linux-glibc command compiles the HAProxy source code for Linux. The sudo make install command installs the compiled binary to /usr/local/sbin/haproxy.

Specifying Version to Install HAProxy

From Source

The process is almost the same as installing from source, but you’ll need to specify the version when you download the source code. For example, to install version 2.3.2, you would replace 2.4.2 with 2.3.2 in the wget and tar commands.

Using APT

On Debian-based distributions, you can specify a version for APT to install by appending =version to the package name:

sudo apt-get install haproxy=2.3.2-1ubuntu0.1

# Output:
# Reading package lists... Done
# Building dependency tree
# Reading state information... Done
# E: Version '2.3.2-1ubuntu0.1' for 'haproxy' was not found

However, this will only work if the version you specified is available in the repositories your package manager is configured to use.

Using YUM

On RedHat-based distributions, you can use the yum command to install a specific version of a package by appending -version to the package name:

sudo yum install haproxy-1.5.18-9.el7

# Output:
# Loaded plugins: fastestmirror, langpacks
# Loading mirror speeds from cached hostfile
#  * base: mirror.umd.edu
#  * extras: mirror.umd.edu
#  * updates: mirror.umd.edu
# Resolving Dependencies
# --> Running transaction check
# ---> Package haproxy.x86_64 0:1.5.18-9.el7 will be installed
# --> Finished Dependency Resolution
# Dependencies Resolved
# ================================================================================
#  Package       Arch          Version                Repository       Size
# ================================================================================
# Installing:
#  haproxy       x86_64        1.5.18-9.el7           base            834 k
# Transaction Summary
# ================================================================================
# Install  1 Package
# Total download size: 834 k
# Installed size: 2.7 M
# Is this ok [y/d/N]: 

Again, this will only work if the version you specified is available in the repositories your package manager is configured to use.

HAProxy Install Version Comparison

VersionNotable FeaturesCompatibility
1.5Initial SSL support, IPv6 supportCentOS 6, Ubuntu 14.04
1.6Full HTTP/2 support, multithreadingCentOS 7, Ubuntu 16.04
1.7Dynamic server addition/removal, DNS SRV recordsCentOS 7, Ubuntu 16.04
1.8HTTP/2 server-side, seamless reloadsCentOS 7, Ubuntu 18.04
1.9Cloud-native threading mode, end-to-end HTTP/2CentOS 8, Ubuntu 20.04
2.0gRPC support, multi-threading by defaultCentOS 8, Ubuntu 20.04
2.1Improved SSL/TLS, dynamic configuration updatesCentOS 8, Ubuntu 20.04
2.2Full end-to-end HTTP/3 supportCentOS 8, Ubuntu 20.04

Using and Verifying HAProxy Install

Using the Linux Load Balancer

Once HAProxy is installed, you can start using it to balance your network traffic. The configuration file for HAProxy is located at /etc/haproxy/haproxy.cfg. You can edit this file to define your load balancing rules. Here’s a simple example that balances traffic between two web servers:

echo "
frontend http_front
   bind *:80
   default_backend http_back

backend http_back
   balance roundrobin
   server web1 192.168.1.1:80 check
   server web2 192.168.1.2:80 check
" | sudo tee -a /etc/haproxy/haproxy.cfg

This configuration defines a frontend named http_front that listens on port 80, and a backend named http_back that distributes traffic to the servers web1 and web2 using the round-robin algorithm.

Verifying Installation

You can verify that HAProxy is installed and running correctly by checking its status:

systemctl status haproxy

# Output:
# ● haproxy.service - HAProxy Load Balancer
#    Loaded: loaded (/lib/systemd/system/haproxy.service; enabled; vendor preset: enabled)
#    Active: active (running) since Tue 2021-07-20 15:16:39 UTC; 1min 43s ago
#      Docs: man:haproxy(1)
#            file:/usr/share/doc/haproxy/configuration.txt.gz
#  Main PID: 6093 (haproxy)
#     Tasks: 2 (limit: 4915)
#    CGroup: /system.slice/haproxy.service
#            ├─6093 /usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid
#            └─6094 /usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid

If HAProxy is running correctly, the Active line will show active (running).

Alternative Linux Load Balancers

While HAProxy is a powerful and popular choice for load balancing, it’s not the only game in town. Other tools, such as Nginx and Apache, can also be used to balance network traffic in Linux. Let’s delve into these alternatives and see how they stack up against HAProxy.

Load Balancing with Nginx

Nginx is a high-performance HTTP server and reverse proxy. It also provides load balancing features. Here’s how you can set up a basic round-robin load balancer with Nginx:

sudo apt-get install nginx
sudo tee /etc/nginx/conf.d/load-balancer.conf <<EOF
http {
  upstream backend {
    server backend1.example.com;
    server backend2.example.com;
  }

  server {
    listen 80;

    location / {
      proxy_pass http://backend;
    }
  }
}
EOF

sudo systemctl restart nginx

# Output:
# [A lot of installation output]
# Creating config file /etc/nginx/sites-available/default with new version
# Creating config file /etc/nginx/nginx.conf with new version
# Processing triggers for man-db (2.8.3-2ubuntu0.1) ...
# Processing triggers for systemd (237-3ubuntu10.41) ...
# Processing triggers for ufw (0.36-0ubuntu0.18.04.1) ...

This configuration will distribute incoming requests to backend1.example.com and backend2.example.com in a round-robin fashion.

Nginx is known for its high performance and low memory usage, which makes it a viable alternative to HAProxy for load balancing. However, it lacks some of the more advanced features of HAProxy, such as server health checks and more complex load balancing algorithms.

Load Balancing with Apache

Apache HTTP Server also provides load balancing features through its mod_proxy_balancer module. Here’s how you can set up a basic load balancer with Apache:

sudo apt-get install apache2
sudo a2enmod proxy_balancer
sudo a2enmod proxy_http
sudo tee /etc/apache2/sites-available/000-default.conf <<EOF
<VirtualHost *:80>
  <Proxy balancer://mycluster>
    BalancerMember http://backend1.example.com
    BalancerMember http://backend2.example.com
  </Proxy>

  ProxyPass / balancer://mycluster
</VirtualHost>
EOF

sudo systemctl restart apache2

# Output:
# [A lot of installation output]
# Creating config file /etc/apache2/sites-available/000-default.conf with new version
# Processing triggers for systemd (237-3ubuntu10.41) ...
# Processing triggers for ufw (0.36-0ubuntu0.18.04.1) ...

This configuration will distribute incoming requests to backend1.example.com and backend2.example.com using a round-robin algorithm.

Apache is a robust and feature-rich web server that can also be used for load balancing. However, it’s generally slower and uses more memory than both Nginx and HAProxy, which might be a consideration for high-traffic networks.

Comparing HAProxy, Nginx, and Apache

FeatureHAProxyNginxApache
HTTP/2 supportYesYesYes
SSL supportYesYesYes
IPv6 supportYesYesYes
Load balancing algorithmsManyFewFew
Server health checksYesNoYes
PerformanceHighHighLower
Memory usageLowLowHigher

While HAProxy stands out with its advanced load balancing features and high performance, Nginx and Apache are worthy alternatives, especially if you’re already using them for other purposes. Ultimately, the best tool for the job depends on your specific needs and circumstances.

Solving HAProxy Install Issues

While HAProxy is a robust tool, like any software, you may encounter issues during its installation or use. Here are a few common problems and their solutions.

Issue: HAProxy Fails to Start

If HAProxy fails to start, the most likely reason is a problem with the configuration file. You can check the syntax of your configuration file with the -c option:

haproxy -c -f /etc/haproxy/haproxy.cfg

# Output:
# Configuration file is valid

If the configuration file is not valid, the command will output an error message that can help you identify the problem.

Issue: HAProxy Is Not Balancing Traffic

If HAProxy is running but not balancing traffic as expected, there could be a problem with your backend servers. You can check the status of your backend servers with the stats page if you have it enabled, or by checking the HAProxy logs.

cat /var/log/haproxy.log

# Output:
# [A lot of log output]

The logs can tell you if HAProxy is encountering any errors when trying to connect to your backend servers.

Issue: HAProxy Performance Is Poor

If you’re experiencing poor performance, there could be a number of causes, such as network issues, insufficient system resources, or an inefficient configuration. One common cause of poor performance is the use of the httpclose option, which disables HTTP keep-alive. You can check if this option is enabled in your configuration file:

grep httpclose /etc/haproxy/haproxy.cfg

# Output:
# [Lines containing 'httpclose' if it's enabled]

If httpclose is enabled, consider disabling it or replacing it with http-keep-alive to improve performance.

Issue: HAProxy Is Not Running After Reboot

If HAProxy is not running after a system reboot, it’s likely that it’s not enabled to start at boot. You can enable HAProxy to start at boot with the systemctl command:

sudo systemctl enable haproxy

# Output:
# Synchronizing state of haproxy.service with SysV service script with /lib/systemd/systemd-sysv-install.
# Executing: /lib/systemd/systemd-sysv-install enable haproxy

After running this command, HAProxy should start automatically after a system reboot.

Remember, troubleshooting is a methodical process. Identify the problem, hypothesize a solution, test your hypothesis, and repeat until the problem is solved. Happy troubleshooting!

Understanding Linux Load Balancers

Before we delve deeper into the specifics of HAProxy, it’s crucial to understand the concept of load balancing and why it’s vital in network management.

What is Load Balancing?

Load balancing refers to the distribution of network traffic across several servers to ensure no single server bears too much demand. This improves responsiveness and availability of applications, ensuring a seamless user experience.

Load balancing can be implemented with hardware, software, or a combination of both. In this context, we’re focusing on software load balancing using HAProxy on a Linux system.

Why is Load Balancing Important?

Load balancing plays a crucial role in ensuring that network infrastructure can scale to meet demand. By distributing network traffic, load balancing helps prevent any single server from becoming a bottleneck, improving service availability and responsiveness.

# Simulating a server under heavy load
stress --cpu 8 --io 4 --vm 2 --vm-bytes 128M --timeout 10s

# Output:
# stress: info: [19113] dispatching hogs: 8 cpu, 4 io, 2 vm, 0 hdd
# stress: info: [19113] successful run completed in 10s

In this example, we’re simulating a server under heavy load using the stress command, which is a workload generator for Linux. The server is under stress for 10 seconds. If this were a real server, users might experience slow response times or timeouts.

Load balancing helps mitigate these problems by distributing the network traffic among multiple servers, reducing the chance of any single server becoming overloaded.

The Role of HAProxy in Load Balancing

HAProxy, standing for High Availability Proxy, is an open-source software that provides a high availability load balancer and proxy server for TCP and HTTP-based applications. It’s used by many high-profile, high-traffic websites including GitHub, Bitbucket, Stack Overflow, Reddit, Tumblr, Twitter and Tuenti and is considered the industry-standard load balancing solution for environments requiring superior performance and reliability.

HAProxy implements several algorithms for load balancing and comes with many features like SSL termination, HTTP/2 support, IPv6 support, server health checks, and more, making it a versatile tool for managing network traffic.

Uses of Linux Load Balancers

Load balancing is an essential aspect of system administration. As services scale, the need to distribute network traffic efficiently becomes critical. Without effective load balancing, your servers can become overwhelmed, leading to slow response times or even system failure. This can result in a poor user experience and potential loss of business.

Enhancing Security with Load Balancing

Beyond performance and availability, load balancing plays a significant role in enhancing network security. By distributing traffic, load balancers can help mitigate DDoS attacks by spreading the traffic across several servers, reducing the impact on any single server.

# Simulating a DDoS attack
sudo hping3 -c 10000 -d 120 -S -w 64 -p 80 --flood --rand-source [your_server_ip]

# Output:
# [A lot of output showing packets being sent]

In this example, we’re simulating a DDoS attack using the hping3 command, which is a network tool able to send custom TCP/IP packets. The server at [your_server_ip] would receive a flood of packets, potentially overwhelming it without a load balancer in place.

Further Topics Beyond HAProxy Install

HAProxy offers advanced features like SSL termination and session persistence, which can further enhance your load balancing setup.

SSL termination refers to the process of decrypting SSL requests at the load balancer and sending them unencrypted to the backend servers. This reduces the computational load on the backend servers, as they no longer have to handle SSL decryption.

Session persistence, on the other hand, ensures that a client is consistently connected to the same backend server during a session. This is particularly useful for applications that maintain state information on the server side.

Further Resources for HAProxy and Load Balancers

For those keen on delving deeper into HAProxy and its myriad features, here are some valuable resources:

  1. HAProxy Technologies Documentation: This is the official documentation for HAProxy. It’s a comprehensive resource, covering everything from basic setup to advanced features.

  2. HAProxy Blog: The official HAProxy blog features numerous tutorials and articles on various aspects of HAProxy, from beginner to advanced topics.

  3. DigitalOcean Community Tutorials: This is a series of tutorials on HAProxy, covering installation, configuration, and more. They’re well-written and easy to follow, making them a great resource for beginners.

Recap: Installing HAProxy Tutorial

In this comprehensive guide, we’ve explored the ins and outs of installing and using HAProxy on Linux, a powerful tool for network load balancing.

We began with the basics, learning how to install HAProxy using the package manager in various Linux distributions. We then ventured into more advanced territory, exploring how to install HAProxy from source, how to install specific versions, and how to use the tool to balance network traffic.

Along the way, we tackled common challenges you might face when using HAProxy, such as the tool failing to start, not balancing traffic as expected, poor performance, and not running after a reboot. For each issue, we provided solutions and workarounds to ensure a smooth HAProxy experience.

We also looked at alternative approaches to load balancing in Linux, comparing HAProxy with other tools like Nginx and Apache. Here’s a quick comparison of these methods:

MethodProsCons
HAProxyAdvanced features, high performanceMay require troubleshooting
NginxHigh performance, low memory usageLacks advanced features
ApacheRobust, feature-richSlower, higher memory usage

Whether you’re just starting out with HAProxy or you’re looking to level up your network management skills, we hope this guide has given you a deeper understanding of HAProxy and its capabilities.

With its balance of advanced features and high performance, HAProxy is a powerful tool for load balancing in Linux. Now, you’re well equipped to handle network traffic with ease. Happy networking!