You start HAProxy by invoking the "hapee-lb" program (located in /opt/hapee-1.6/sbin/) with a number of arguments passed on the command line. The syntax is:

$ hapee-lb [<options>]*

where [<options>]* are any number of options.

  • An option always starts with - followed by one of more letters, and possibly followed by one or multiple extra arguments.

  • Without any option, HAProxy displays the help page with a reminder about supported options.

  • Available options may vary slightly based on the operating system. See available options below.

Start HAProxy in safe mode

A safe way to start HAProxy from an init file consists in forcing the daemon mode, storing existing pids to a pid file and using this pid file to notify older processes to finish before leaving:

hapee-lb -f /etc/haproxy.cfg
    -D -p /var/run/haproxy.pid -sf $(cat /var/run/haproxy.pid)

Start HAProxy with split configuration files

If you configuration is split into several specific files (eg: tcp vs http), we recommend that you use the -f option:

hapee-lb -f /etc/haproxy/global.cfg -f /etc/haproxy/stats.cfg
    -f /etc/haproxy/default-tcp.cfg -f /etc/haproxy/tcp.cfg  -f
            /etc/haproxy/default-http.cfg
    -f /etc/haproxy/http.cfg
    -D -p /var/run/haproxy.pid -sf $(cat /var/run/haproxy.pid)

When the number of files is unknown, such as customer-specific files, we recommended that you assign them a name starting with a fixed-size sequence number and to use - to load them.

hapee-lb -f /etc/haproxy/global.cfg -f /etc/haproxy/stats.cfg
    -f /etc/haproxy/default-tcp.cfg -f /etc/haproxy/tcp.cfg
    -f /etc/haproxy/default-http.cfg -f /etc/haproxy/http.cfg
    -D -p /var/run/haproxy.pid -sf $(cat /var/run/haproxy.pid)
    -f /etc/haproxy/default-customers.cfg -- /etc/haproxy/customers/*

Enable master-worker model

In the master-worker model, HAProxy launches one master process and starts a number of additional worker processes under it.

The new master process monitors all worker processes and controls them from a single instance and relieves systemd or other software from these tasks.

To enable the master/worker model, you can use one of the following approaches:

  • Use the new directive in the global configuration section named master-worker

  • Start the haproxy process with the command line argument -W

Example configuration

In this example, HAProxy is running with an nbproc of 2, both running under the same master process:

/opt/hapee-1.6/sbin/hapee-lb -Ws -f /etc/hapee-1.6/hapee-lb.cfg -p /run/hapee-1.6-lb.pid -sf 4928 -x /var/run/hapee-1.6/hapee-lb.sock
_ /opt/hapee-1.6/sbin/hapee-lb -Ws -f /etc/hapee-1.6/hapee-lb.cfg -p /run/hapee-1.6-lb.pid -sf 4928 -x /var/run/hapee-1.6/hapee-lb.sock
_ /opt/hapee-1.6/sbin/hapee-lb -Ws -f /etc/hapee-1.6/hapee-lb.cfg -p /run/hapee-1.6-lb.pid -sf 4928 -x /var/run/hapee-1.6/hapee-lb.sock

For instance, if expose-fd listeners is present on a stats socket line in the configuration when the master gets a USR2 signal (i.e. when systemd is told to reload), HAProxy automatically adds a -x argument with the socket path which forces the file descriptors of the listing sockets to be handed off without losing a single connection.

Post bug reports

Sometimes a failure to start can happen for unknown reasons. Check that the version of HAProxy you are invoking is the expected version, and if it supports the features you are expecting (such as SSL, PCRE, compression, Lua, etc).

You can verify this by using /opt/hapee-1.6/sbin/hapee-lb -vv to retrieve important information such as build options, the target system, and the versions of the libraries used. HAProxy Support will systematically ask for this information when you post a bug report:

$ /opt/hapee-1.6/sbin/hapee-lb -vv
HA-Proxy 1.6.0-2.0.0-191.746 2019/01/23
Copyright 2000-2017 Willy Tarreau <willy@haproxy.org>

High level information

The relevant information that many non-developer users can verify here are:

Build options:
    TARGET  = linux2628
    CPU     = generic
    CC      = gcc
    CFLAGS  = -pg -O0 -g -fno-strict-aliasing -Wdeclaration-after-statement  -DBUFSIZE=8030 -DMAXREWRITE=1030 -DSO_MARK=36 -DTCP_REPAIR=19
    OPTIONS         = USE_ZLIB=1 USE_DLMALLOC=1 USE_OPENSSL=1 USE_LUA=1 USE_PCRE=1
Default settings :
    maxconn = 2000, bufsize = 8030, maxrewrite = 1030, maxpollevents = 200
Encrypted password support via crypt(3): yes
Built with zlib version : 1.2.6
Compression algorithms supported : identity("identity"), deflate("deflate"),
raw-deflate("deflate"), gzip("gzip")
Built with OpenSSL version : OpenSSL 1.0.1o 12 Jun 2015
Running on OpenSSL verson : OpenSSL 1.0.1o 12 Jun 2015
OpenSSL library supports TLS extensions : yes
OpenSSL library supports SNI : yes
OpenSSL library supports prefer-server-ciphers : yes
Built with PCRE version : 8.12 2011-01-15
PCRE library supports JIT : no (USE_PCRE_JIT not set)
Built with Lua version : Lua 5.3.1
Built with transparent proxy support using: IP_TRANSPARENT IP_FREEBIND
Available polling systems :
    epoll   : pref=300,  test result OK
    poll    : pref=200,  test result OK
    select  : pref=150,  test result OK
Total: 3 (3 usable), will use epoll.

version

1.6-dev7-a088d3-4 above means the code is currently at commit ID a088d3 which is the 4th one after after official version 1.6-dev7. This is a production-ready version.

release date

2015/10/08, represented in the universal year/month/day format (August 8th, 2015). If you see an old date here, it means there are a number of bugs or security issues that have since been fixed. Check the official site.

build options