First, Let’s discuss what is HAProxy and what is Load Balancer.
HAProxy, which stands for High Availability Proxy, is a popular open source software TCP/HTTP Load Balancer and proxying solution which can be run on Linux, Solaris, and FreeBSD. Its most common use is to improve the performance and reliability of a server environment by distributing the workload across multiple servers (e.g. web, application, database). It is used in many high-profile environments, including: GitHub, Imgur, Instagram, and Twitter.
There are many terms and concepts that are important when discussing load balancing and proxying. We will go over commonly used terms in the following sub-sections.
Before we get into the basic types of load balancing, we will talk about ACLs, backends, and frontends.
Access Control List (ACL)
In relation to load balancing, ACLs are used to test some condition and perform an action (e.g. select a server, or block a request) based on the test result. Use of ACLs allows flexible network traffic forwarding based on a variety of factors like pattern-matching and the number of connections to a backend.
A backend is a set of servers that receives forwarded requests. Backends are defined in the backend section of the HAProxy configuration. In its most basic form, a backend can be defined by:
- which load balance algorithm to use
- a list of servers and ports
A backend can contain one or many servers in it–generally speaking, adding more servers to your backend will increase your potential load capacity by spreading the load over multiple servers. Increase reliability is also achieved through this manner, in case some of your backend servers become unavailable.
Types of Load Balancing
Now that we have an understanding of the basic components that are used in load balancing, let’s get into the basic types of load balancing.
No Load Balancing
A simple web application environment with no load balancing might look like the following:
Layer 4 Load Balancing
The simplest way to load balance network traffic to multiple servers is to use layer 4 (transport layer) load balancing.
Here is a diagram of a simple example of layer 4 load balancing:
The user accesses the load balancer, which forwards the user’s request to the web-backend group of backend servers. Whichever backend server is selected will respond directly to the user’s request.
Layer 7 Load Balancing
Another, more complex way to load balance network traffic is to use layer 7 (application layer) load balancing. Using layer 7 allows the load balancer to forward requests to different backend servers based on the content of the user’s request. This mode of load balancing allows you to run multiple web application servers under the same domain and port.
Because HAProxy provides so many load balancing algorithms, we will only describe a few of them here. See the HAProxy Configuration Manual for a complete list of algorithms.
A few of the commonly used algorithms are as follows:
Round Robin selects servers in turns. This is the default algorithm.
Selects the server with the least number of connections–it is recommended for longer sessions. Servers in the same backend are also rotated in a round-robin fashion.
This selects which server to use based on a hash of the source IP i.e. your user’s IP address. This is one method to ensure that a user will connect to the same server.
Load Balancing Algorithms
The load balancing algorithm that is used determines which server, in a backend, will be selected when load balancing. HAProxy offers several options for algorithms. In addition to the load balancing algorithm, servers can be assigned a weight parameter to manipulate how frequently the server is selected, compared to other servers.
Now that you have a basic understanding of load balancing and know of a few ways that HAProxy facilitate your load balancing needs, you have a solid foundation to get started on improving the performance and reliability of your own server environment.
Now, let’s see the objective of the Task and Complete it:
Use Ansible playbook to Configure Reverse Proxy i.e. Haproxy and update it’s configuration file automatically on each time new Managed node (Configured With Apache Webserver) join the inventory.
Let’s start building it step-by-step:
Firstly, download Ansible and create an inventory in Controller Node.
Here, I have launched 3 different nodes. 1 for configuring HAProxy (Load Balancer), and 2 for launching webserver(httpd).
Now, let’s first create a ansible playbook that will go to respective nodes and install softwares for us:
This playbook contains Ansible code to go to respective nodes and install and configure httpd and HAProxy software respectively.
To run this playbook:
And, the complete configuration will be done.
There is one main objective in the task to update the configuration file automatically whenever the new node join the inventory.
For that, The configuration file that is been copied contains code that automatically detects the number of IP’s in the inventory and update the configuration file of HAProxy automatically that is saved in /etc/haproxy/haproxy.cfg file
And thus, all the objectives of the task is successfully completed.
Finally, we can connect to our website with the ip of Load Balancer at port 8080 (given by me in HA Proxy Configuration File)
The complete code of the task is uploaded in GitHub for your reference.
Hope you liked the article.
Thank you for reading this.
Have a Nice Day :)