In this article I will explain a HAproxy installation on docker centos images. First things first, 3 centos images should be deployed. Two of them will be simple web servers with httpd installed and the third one will have haproxy installed to load balance between the two web servers.
In order to deploy 3 new centos docker images you should first download the latest centos image.
Just pull the Centos docker image from dockerHub by using the below command
docker pull centos
And then deploy 3 instances of it:
docker container run -it --name centos-lab1 -d centos:latest docker container run -it --name centos-lab2 -d centos:latest docker container run -it --name centos-lab3 -d centos:latest
Verify that containers have been deployed succesfully and execute some interactive commands on them.
docker exec -it centos-lab1 uname -r
You will get a result like the below, depending on the image you have installed.
Install httpd package on the two web servers. I am using portainer so that I can interact easier with containers. You could also execute an interactive command as shown below.
yum install httpd
docker exec -it centos-lab2 yum install httpd
Lastly you should install haproxy package for the third server that will be used as a load balancer.
yum install haproxy
[root@ad1d23c22355 /]# haproxy -v HA-Proxy version 1.8.15 2018/12/13 Copyright 2000-2018 Willy Tarreau
Verify connectivity between your containers. Based on the default network that have been deployed on my computer I get the following 3 IP’s.
172.17.0.4 , 172.17.0.5 , 172.17.0.6
Install a test html page on web servers that will be used to identify the node.
echo "this is centos-lab1" > /var/www/html/index.html echo "this is centos-lab2" > /var/www/html/index.html
Enable and start httpd server on web servers and test that their page is up and running by running a curl from load balancer (server 3). You will get a respond like the below:
In order to use systemctl and systemd commands, check my previous article about deploying a Centos Image with systemd enabled.
Edit haproxy configuration setting under /etc/haproxy/haproxy.cfg and add your two webservers as backend servers of app section.
Restart haproxy so that configuration changes are loaded:
systemctl restart haproxy
Curl loadbalancer and verify from the results that load is balanced between centos-1 and centos-2 webservers: