HAProxy Quick Setup
August 29, 2009
HAProxy ist ein superschlanker, dennoch Featurereicher, high performance Proxy und Load Balancer. Wie schnell und leicht sich dieser aufsetzen lässt, beschreibe ich hier.
HAProxy Installation
Ich führe die Installation von HAProxy 1.3.20 auf einer Debian Maschine durch. Für HAProxy wird die libpcre Bibliothek für schnelles Parsen von regulären Ausdrücken empfohlen. Die Installiere ich vorher. GCC, make etc. muss ebenfalls installiert sein.
# apt-get install libpcre3-dev # wget http://haproxy.1wt.eu/download/1.3/src/haproxy-1.3.20.tar.gz # tar xzf haproxy-1.3.20.tar.gz # cd haproxy-1.3.20/ # make USE_PCRE=1 TARGET=linux26 ARCH=i686 && make install
HAProxy soll aus Sicherheitsgründen unter einem eigenen Benutzer laufen.
# useradd -d /opt/haproxy -m haproxy
Jetzt noch ein init-Script, damit es beim booten startet. In /etc/init.d/haproxy speichern:
#! /bin/sh ### BEGIN INIT INFO # Provides: haproxy # Required-Start: apache2 lighttpd tomcat tomcat6 tomcat5 # Required-Stop: # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: start and stop haproxy # Description: start and stop haproxy ### END INIT INFO BINARYPATH=/usr/local/sbin BINARY=haproxy CONF=/etc/haproxy/haproxy.conf case "$1" in start) $BINARYPATH/$BINARY -f $CONF ;; stop) # hier evtl auf pid umstellen killall $BINARY ;; esac exit 0
Aktivieren:
# chmod +x /etc/init.d/haproxy # update-rc.d haproxy defaults
HAProxy ist nun einsatzbereit.
Konfiguration
In HAProxy definiert man Backends, die Server selbst, wie Lighttpd, Tomcat etc, und Frontends, die Verbindungen von Clients annehmen und diese an die Backends verteilen.
Ich habe meine Konfiguration unter /etc/haproxy/haproxy.conf abgelegt. Hier ein Beispiel mit einem Apache (lokal auf Port 8081) und einem Tomcat (lokal auf Port 8080) Server, die beide über den Port 80 bedient werden sollen. Auch lange Ajax Verbindungen wie Comet sind damit kein Problem (die Timeouts entsprechend anpassen)!
global daemon maxconn 4000 user haproxy group haproxy log 127.0.0.1 local0 notice backend apache mode http timeout connect 10s timeout server 30s balance roundrobin # bei mir nur ein server am laufen, hier können mehrere eingetragen werden server apache1 127.0.0.1:8081 weight 1 maxconn 512 backend tomcat mode http timeout connect 5s timeout server 5m # tomcat hält comet verbindungen, die länger leben balance roundrobin server tomcat1 127.0.0.1:8080 weight 1 maxconn 1000 frontend http_proxy bind XX.XX.XX.XX:80 # hier die öffentliche IP mode http timeout client 5m option forwardfor default_backend apache # alle verbindungen zur domain comet.dummy sollen an tomcat gehen acl is_cometapp hdr_dom(host) -i comet.dummy use_backend tomcat if is_cometapp
Das wars! HAProxy mit /etc/init.d/haproxy start starten. Beim nächsten Reboot müsste es von alleine hochkommen.
Weitere Links: