Haproxy basic setup on centos7
I am using vagrant with libvirt provider to setup a round robin setup of haproxy, a haproxy centos7 vm and two webservers running centos7.
Clone my git from https://github.com/pawaanv/cipher-setup/
$ git clone https://github.com/pawaanv/cipher-setup/
Cloning into 'cipher-setup'...
remote: Counting objects: 89, done.
remote: Compressing objects: 100% (69/69), done.
remote: Total 89 (delta 36), reused 65 (delta 15), pack-reused 0
Unpacking objects: 100% (89/89), done.
Checking connectivity... done.
Make a directory called haproxy and copy files bootstrap.sh, Vagrantfile, haproxy.sh to it.
# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure("2") do |config|
config.vm.provision "shell", inline: "ifup eth1", run: "always"
config.vm.define :ha do |ha|
ha.vm.box = "centos/7"
ha.vm.box_check_update = false
ha.vm.network "forwarded_port", guest: 80, host: 8080
ha.vm.network "private_network", ip: "192.168.121.200"
ha.vm.hostname = "ha.vagrant.box"
ha.vm.provision :shell, path: "haproxy.sh"
config.vm.provider :libvirt do |libvirt|
libvirt.uri = "qemu:///system"
libvirt.connect_via_ssh = false
libvirt.username = "root"
libvirt.storage_pool_name = "default"
libvirt.memory = "420"
libvirt.driver = "kvm"
end
end
config.vm.define :one do |one|
one.vm.box = "centos/7"
one.vm.box_check_update = false
one.vm.network "forwarded_port", guest: 80, host: 8081
one.vm.network "private_network", ip: "192.168.121.201"
one.vm.hostname = "one.vagrant.box"
one.vm.provision :shell, path: "bootstrap.sh"
config.vm.provider :libvirt do |libvirt|
libvirt.uri = "qemu:///system"
libvirt.connect_via_ssh = false
libvirt.username = "root"
libvirt.storage_pool_name = "default"
libvirt.memory = "420"
libvirt.driver = "kvm"
end
end
config.vm.define :two do |two|
two.vm.box = "centos/7"
two.vm.box_check_update = false
two.vm.network "forwarded_port", guest: 80, host: 8082
two.vm.network "private_network", ip: "192.168.121.202"
two.vm.hostname = "two.vagrant.box"
two.vm.provision :shell, path: "bootstrap.sh"
config.vm.provider :libvirt do |libvirt|
libvirt.uri = "qemu:///system"
libvirt.connect_via_ssh = false
libvirt.username = "root"
libvirt.storage_pool_name = "default"
libvirt.memory = "420"
libvirt.driver = "kvm"
end
end
end
#!/bin/bash
echo "setting apache server on vm's"
sleep 3
yum install httpd -y
systemctl start httpd
systemctl enable httpd
firewall-cmd --add-service=http --permanent
firewall-cmd --reload
echo "$HOSTNAME" >> /var/www/html/index.html
#!/bin/bash
if [ ! -e /etc/haproxy/haproxy.cfg ]
then
echo "installing ha proxy"
sleep 5
yum -y install haproxy
systemctl start haproxy
systemctl enable haproxy
cp /etc/haproxy/haproxy.cfg{,-bkp}
cat > /etc/haproxy/haproxy.cfg <<EOD
global
log 127.0.0.1 local0
log 127.0.0.1 local1 debug
maxconn 45000
daemon
nbproc 1
defaults
timeout server 86400000
timeout connect 86400000
timeout client 86400000
timeout queue 1000s
frontend http-in
bind *:80
default_backend backend_servers
option forwardfor
backend backend_servers
balance roundrobin
server www01 192.168.121.201:80 check
server www02 192.168.121.202:80 check
EOD
systemctl restart haproxy
else
echo "haproxy is already installed"
fi
192.168.121.202 two.vagrant.box // webserver two
192.168.121.200 ha.vagrant.box // ha proxy machine
192.168.121.201 one.vagrant.box // webserver one
Check haproxy status:
$ vagrant ssh ha
[vagrant@ha ~]$ sudo systemctl status haproxy
โ haproxy.service - HAProxy Load Balancer
Loaded: loaded (/usr/lib/systemd/system/haproxy.service; enabled; vendor preset: disabled)
Active: active (running) since Tue 2018-03-27 11:25:41 UTC; 11min ago
Check load balancing with curl:
$ curl ha.vagrant.box
two.vagrant.box
$ curl ha.vagrant.box
one.vagrant.box
Related Articles
Haproxy basic setup on centos7
I am using vagrant with libvirt provider to setup a round robin setup of haproxy, a haproxy centos7 vm and two webservers running centos7.
Modular vagrant file
How to structure a modular Vagrantfile using separate .rb config files for resources, disks, and networks.
Installing vagrant on ubuntu, Debian
A Step-by-Step Guide to Installing Vagrant on Debian/Ubuntu for managing development environments seamlessly.