DEV Community

Taleeb Midi
Taleeb Midi

Posted on

Getting started with HAProxy: Install from code source

intro

In this post, which is taken from my personal blog, I will demonstrate how we can install HAProxy from source code. According to Wikipedia, HAProxy was written and still maintained by Willy Tarreau since 2000. HAProxy is free open source software (FOSS), that provides a high availability load balancer and proxy server for TCP (Transmission Control Protocol) and HTTP (Hypertext Transfer Protocol) based applications that spreads requests across multiple servers. It is written in C language and thus the reputation for being fast and efficient.

If you are curious, this HAProxy Page offers more details about its features.

Installation

In this guide , we will be installing the latest stable version of 1.8 (as of May 09, 2018). the current HAProxy available under RHEL is 1.5.18 and 1.8.8 on Debian/Ubuntu. before taking the next step, make sure you have gcc, pcre-static and pcre-devel installed:

# CentOS RHEL:
sudo yum -y install make gcc perl pcre-devel zlib-devel

# Debian/Ubuntu:
sudo apt install make gcc perl pcre-devel zlib-devel
Enter fullscreen mode Exit fullscreen mode

Enable IP forwarding and binding to non-local IP addresses:

# echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
# echo "net.ipv4.ip_nonlocal_bind = 1" >> /etc/sysctl.conf
# sysctl -p
net.ipv4.ip_forward = 1
net.ipv4.ip_nonlocal_bind = 1
Enter fullscreen mode Exit fullscreen mode

Download the source code:

wget https://www.haproxy.org/download/1.8/src/haproxy-1.8.8.tar.gz
Enter fullscreen mode Exit fullscreen mode

Extract the file and change directory:

tar xvzf haproxy-1.8.8.tar.gz && cd haproxy-1.8.8
Enter fullscreen mode Exit fullscreen mode

Compile the program:

make TARGET=linux2628 USE_PCRE=1 USE_OPENSSL=1 USE_ZLIB=1
Enter fullscreen mode Exit fullscreen mode

This is the list of TARGETs:

  • linux22 for Linux 2.2
  • linux24 for Linux 2.4 and above (default)
  • linux24e for Linux 2.4 with support for a working epoll (> 0.21)
  • linux26 for Linux 2.6 and above
  • linux2628 for Linux 2.6.28, 3.x, and above (enables splice and tproxy)
  • solaris for Solaris 8 or 10 (others untested)
  • freebsd for FreeBSD 5 to 10 (others untested)
  • netbsd for NetBSD
  • osx for Mac OS/X
  • openbsd for OpenBSD 5.7 and above
  • aix51 for AIX 5.1
  • aix52 for AIX 5.2
  • cygwin for Cygwin
  • haiku for Haiku
  • generic for any other OS or version.
  • custom to manually adjust every setting

You can also compile the program with following options:
USE_PCRE=1 to use libpcre, in whatever form is available on your system (shared or static).
USE_ZLIP=1 to use zlib compression Library.
USE_OPENSSL=1 to add native support for SSL using the GNU makefile.

Install HAProxy:

sudo make install
Enter fullscreen mode Exit fullscreen mode

With that, we should now have the chosen HAProxy version installed. now we need to setup HAProxy.

Setup:

Adding HAProxy user:

id -u haproxy &> /dev/null || useradd -s /usr/sbin/nologin -r haproxy
Enter fullscreen mode Exit fullscreen mode

Copy HAProxy binary located in the extracted HAProxy directory to /usr/sbin/:

cp haproxy /usr/sbin/
Enter fullscreen mode Exit fullscreen mode

Create Manual page:

wget -qO - https://raw.githubusercontent.com/horms/haproxy/master/doc/configuration.txt | gzip -c > /usr/share/doc/haproxy/configuration.txt.gz
Enter fullscreen mode Exit fullscreen mode

Create Systemd service script to manage HAProxy, use the following at your discretion:

sudo wget https://gist.githubusercontent.com/tmidi/1699a358533ae876513e2887fec6fbe2/raw/6c07ce39adc56c731d2bbeb88b90d8bbc636f3ea/haproxy.service -O /lib/systemd/system/haproxy.service
Enter fullscreen mode Exit fullscreen mode

or create /lib/systemd/system/haproxy.service with the following content:

[Unit]
Description=HAProxy Load Balancer
Documentation=man:haproxy(1)
Documentation=file:/usr/share/doc/haproxy/configuration.txt.gz
# allows us to do millisecond level restarts without triggering alert in Systemd
StartLimitInterval=0
StartLimitBurst=0
After=network.target syslog.service
Wants=syslog.service

[Service]
Environment="CONFIG=/etc/haproxy/haproxy.cfg" "PIDFILE=/run/haproxy.pid"
# EXTRAOPTS and RELOADOPS come from this default file
EnvironmentFile=-/etc/default/haproxy
ExecStartPre=/usr/sbin/haproxy -f $CONFIG -c -q
ExecStart=/usr/sbin/haproxy -W -f $CONFIG -p $PIDFILE $EXTRAOPTS
ExecReload=/usr/sbin/haproxy -f $CONFIG -c -q $EXTRAOPTS $RELOADOPTS
ExecReload=/bin/kill -USR2 $MAINPID
KillMode=mixed
Restart=always
Type=forking

[Install]
WantedBy=multi-user.target
Enter fullscreen mode Exit fullscreen mode

Enable and start haproxy.service:

systemctl enablle haproxy.service
systemctl start haproxy.service
Enter fullscreen mode Exit fullscreen mode




Conclusion

This conclude conclude HAProxy installation steps.This guide however covers only the installation steps, in future post I will demonstrate how to configure HAProxy to load balance three backend web servers while using sticky session and SSL Pass-through.

If you find this guide helpful, please share it with your friends and colleagues. I am on Twitter and LinkedIn, let's connect or let me know if you have any question or any suggestions.

Top comments (0)