Site icon CentLinux

Install HAProxy Load Balancer on RHEL 8

Share on Social Media

Learn how to install and configure HAProxy Load Balancer on RHEL 8. Follow this step-by-step guide to enhance your server performance and reliability. #centlinux #linux #loadbalancer

What is HAProxy?

HAProxy (High Availability Proxy) is a robust, high-performance, and open-source load balancing and proxying software for TCP and HTTP-based applications. It is widely used to improve the performance, availability, and reliability of server environments by distributing incoming network or application traffic across multiple servers. Here are some key features and benefits of HAProxy:

  1. Load Balancing: Distributes incoming traffic evenly across multiple servers to prevent any single server from becoming a bottleneck.
  2. High Availability: Ensures that applications remain accessible even if one or more servers fail by automatically redirecting traffic to available servers.
  3. Scalability: Allows easy scaling of applications by adding or removing backend servers without downtime.
  4. Security: Offers advanced features such as SSL termination, protection against DDoS attacks, and rate limiting.
  5. Flexible Configuration: Highly configurable with support for various algorithms, session persistence, and ACLs (Access Control Lists).
  6. Logging and Monitoring: Provides extensive logging and monitoring capabilities to track performance and troubleshoot issues.
  7. Open Source: Available for free under the GPL license, with an active community and extensive documentation.

HAProxy is commonly used in high-traffic websites, e-commerce platforms, cloud services, and other environments where performance and uptime are critical.

HAProxy vs Nginx

HAProxy and Nginx are both popular open-source tools used for load balancing and reverse proxying, but they have distinct differences in their design, features, and typical use cases. Here’s a comparison to help understand their differences and use cases:

HAProxy

Primary Use Case:

Performance:

Configuration:

Features:

Logging and Monitoring:

Scalability:

Nginx

Primary Use Case:

Performance:

Configuration:

Features:

Logging and Monitoring:

Scalability:

When to Use HAProxy

When to Use Nginx

In summary, choose HAProxy if your main focus is on advanced load balancing and you need fine-grained control over connection handling. Opt for Nginx if you need a versatile tool that combines web serving, caching, and load balancing with simpler configuration and broader use cases.

Recommended Online Training: Master Load Balancing with HAProxy

Environment Specification

We are using a minimal RHEL 8 virtual machine with following specifications.

Updating the Linux Server

Connect with haproxy-01.centlinux.com as root user with the help of a ssh client.

Build cache for the Red Hat Subscription Management repositories.

# dnf makecache
Updating Subscription Management repositories.
Red Hat Enterprise Linux 8 for x86_64 - BaseOS  2.6 kB/s | 4.1 kB     00:01
Red Hat Enterprise Linux 8 for x86_64 - BaseOS  335 kB/s |  28 MB     01:26
Red Hat Enterprise Linux 8 for x86_64 - AppStre 3.3 kB/s | 4.5 kB     00:01
Red Hat Enterprise Linux 8 for x86_64 - AppStre 253 kB/s |  26 MB     01:46
Last metadata expiration check: 0:00:08 ago on Sun 21 Feb 2021 11:41:31 AM EST.
Metadata cache created.

Update installed software packages in your Linux server as follows.

# dnf update -y

The above command has updated the Linux kernel, therefore, we are required to reboot the Linux operating system with new Kernel.

# reboot

Install Apache Web Server on RHEL 8

In this article, you are required two web servers and a HAProxy load balancing server. But, we do not have three machines, therefore, we are configuring the two Apache virtual hosts on the same HAProxy server and then setup the HTTP Load Balancer for them.

Install Apache web server on your RHEL server by using dnf command.

# dnf install -y @httpd

Create “Document Root” directories for your Apache virtual hosts.

# mkdir /var/www/host-{80,8080}

Generate the index.html (the default webpage) for your Apache virtual hosts.

# vi /var/www/host-80/index.html

Add following HTML code therein.

<HTML>
<HEAD>
<TITLE>TEST PAGE AT HOST-80</TITLE>
<BODY>
<H1>TEST PAGE AT VIRTUAL HOST RUNNING AT PORT 80</H1>
</BODY>
</HTML>

Similarly, for second virtual host.

# vi /var/www/host-8080/index.html

Add following HTML code.

<HTML>
<HEAD>
<TITLE>TEST PAGE AT HOST-8080</TITLE>
<BODY>
<H1>TEST PAGE AT VIRTUAL HOST RUNNING AT PORT 8080</H1>
</BODY>
</HTML>

Add virtual host configurations in Apache web server.

# vi /etc/httpd/conf.d/test.conf

Add following directives in this file.

Listen 80
Listen 8080

<VirtualHost 192.168.116.238:80>
    ServerName haproxy-01.centlinux.com
    DocumentRoot "/var/www/host-80"
</VirtualHost>

<VirtualHost 192.168.116.238:8080>
    ServerName haproxy-01.centlinux.com
    DocumentRoot "/var/www/host-8080"
</VirtualHost>

Apache web server is using ports 80/tcp and 8080/tcp, therefore, you have to allow these network ports in your Linux firewall.

# firewall-cmd --permanent --add-port={80,8080}/tcp
success
# firewall-cmd --reload
success

Enable and start the Apache web server.

# systemctl enable --now httpd.service
Created symlink /etc/systemd/system/multi-user.target.wants/httpd.service â /usr/lib/systemd/system/httpd.service.

Verify Apache virtual hosts, by using the curl command.

# curl http://haproxy-01.centlinux.com:80
<HTML>
<HEAD>
<TITLE>TEST PAGE AT HOST-80</TITLE>
<BODY>
<H1>TEST PAGE AT VIRTUAL HOST RUNNING AT PORT 80</H1>
</BODY>
</HTML>

# curl http://haproxy-01.centlinux.com:8080
<HTML>
<HEAD>
<TITLE>TEST PAGE AT HOST-8080</TITLE>
<BODY>
<H1>TEST PAGE AT VIRTUAL HOST RUNNING AT PORT 8080</H1>
</BODY>
</HTML>

If you got the above output then your Apache virtual hosts are configured successfully.

Install HAProxy Load Balancer on RHEL 8

You can install HAProxy from Red Hat subscription management repositories by using dnf command.

# dnf install -y haproxy
Updating Subscription Management repositories.
...
Installed:
  haproxy-1.8.23-5.el8.x86_64

Complete!

HAProxy load balancer is installed on your Linux server.

Configure HAProxy Log in RHEL 8

Now you need to configure the HAProxy log. This log is very helpful in troubleshooting HAProxy on Linux server.

Open rsyslog configuration file in vim text editor.

# vi /etc/rsyslog.conf

Locate and uncomment following two lines in this file.

module(load="imudp") # needs to be done just once
input(type="imudp" port="514")

Create a rsyslog configuration file for setting HAProxy logfile location.

# vi /etc/rsyslog.d/haproxy.conf

Add following directives in this file.

# HAProxy Logging
local2.*        /var/log/haproxy.log

Restart rsyslog service to load changes.

# systemctl restart rsyslog.service

Configure HAProxy Load Balancer

Open HAProxy configuration file in vim text editor.

# vi /etc/haproxy/haproxy.cfg

Add following directives at the end of this file.

# HAProxy Load Balancer for Apache Web Server
frontend http-loadbalancer
 bind 192.168.116.238:9000
 default_backend web-servers

backend web-servers
 mode http
 balance roundrobin
 stats enable
 stats auth centlinux:Ahmer@1234
 server webserver-01 192.168.116.238:80 check
 server webserver-02 192.168.116.238:8080 check

In above configurations, we have setup a HAProxy load balancer named http-loadbalancer, running on the network port 9000/tcp.

Our HTTP load balancer will perform round robin load balancing between two web servers. i.e. webserver-01 and webserver-02.

Here, we have used Apache virtual hosts, therefore we are using same IP address with different ports. You can also use the IP Address or Hostname of your web servers, if running services on different machines.

You must allow the service port 9000/tcp in your Linux firewall, to make it accessible across the computer network.

# firewall-cmd --permanent --add-port=9000/tcp
success
# firewall-cmd --reload
success

Make sure you have completed above configurations correctly. Thereafter, enable and start the HAProxy service.

# systemctl enable --now haproxy.service
Created symlink /etc/systemd/system/multi-user.target.wants/haproxy.service â /usr/lib/systemd/system/haproxy.service.

Execute curl command to access your HAProxy load balancer multiple times.

# curl http://haproxy-01.centlinux.com:9000
<HTML>
<HEAD>
<TITLE>TEST PAGE AT HOST-80</TITLE>
<BODY>
<H1>TEST PAGE AT VIRTUAL HOST RUNNING AT PORT 80</H1>
</BODY>
</HTML>

# curl http://haproxy-01.centlinux.com:9000
<HTML>
<HEAD>
<TITLE>TEST PAGE AT HOST-8080</TITLE>
<BODY>
<H1>TEST PAGE AT VIRTUAL HOST RUNNING AT PORT 8080</H1>
</BODY>
</HTML>

# curl http://haproxy-01.centlinux.com:9000
<HTML>
<HEAD>
<TITLE>TEST PAGE AT HOST-80</TITLE>
<BODY>
<H1>TEST PAGE AT VIRTUAL HOST RUNNING AT PORT 80</H1>
</BODY>
</HTML>

You can see that the HAProxy load balancer is rotating the service requests between the two web servers in round robin fashion.

However, you can see the HAProxy statistics and logs in /var/log/haproxy.log file. But you can also view the Haproxy integrated statistics report via your web browser.

For this purpose, you can open http://haproxy-01.centlinux.com:9000/haproxy?stats in a web browser.

HAProxy Load Balancer Statistics

Feel difficulty in understanding the above configurations, then your should buy and read RHCSA Red Hat Enterprise Linux 8 (UPDATED): Training and Exam Preparation Guide (EX200), Second Edition (PAID LINK) by Asghar Ghori.

Final Thoughts

In conclusion, HAProxy stands out as a robust and efficient solution for load balancing and proxying, particularly in environments requiring high performance and reliability. Its advanced features, such as detailed load balancing algorithms, health checks, SSL termination, and extensive monitoring capabilities, make it an ideal choice for optimizing server performance and ensuring high availability.

If you need expert assistance to install and configure HAProxy Load Balancer on RHEL 8, check out my Fiverr gig: I will be your linux server admin. I provide professional services to ensure your server environment is optimized for performance and reliability.

Exit mobile version