HAProxy z SSL jako LoadBalancer + Heartbeat

Z mojego doświadczenia z LoadBalancerami (LVS, KEMP) stwierdziłem, że czas nauczyć się czegoś nowego (i zarazem mniej upierdliwego w konfiguracji).

Wiele dobrego słyszałem na temat HAProxy, jednak nigdy wcześniej nie miałem okazji się nim bawić. Na szczęście sama jego konfiguracja jest całkiem przyjemna, jak i szybka.

Konfiguracja była przeprowadzana na dystrybucji Debian 6:

Jak będzie wyglądała nasza konfiguracja:

gateway (172.16.0.1)
lbmaster (172.16.0.100) # wspólny adres IP dla mastera Heartbeat
lb01 (172.16.0.101)
lb02 (172.16.0.102)
web01 (172.16.0.103)
web02 (172.16.0.104)
web03 (172.16.0.105)

Instalujemy potrzebne paczki na obu serwerach (lb01 i lb02):

# apt-get install haproxy heartbeat

Najpierw zajmiemy się konfiguracją HAProxy:

Edytujemy plik /etc/haproxy/haproxy.conf na lb01 i lb02:

global
log 127.0.0.1 local0
log 127.0.0.1 local1 notice
maxconn 4096
user haproxy
group haproxy

defaults
log global
mode http
option dontlognull
retries 3
option redispatch
maxconn 2000
contimeout 5000
clitimeout 50000
srvtimeout 50000

listen lb01http 172.16.0.100:80
mode http
balance roundrobin
option httpclose
option forwardfor
option httplog
option httpchk HEAD /check.txt HTTP/1.0
server web01 172.16.0.103:80 check
server web02 172.16.0.104:80 check
server web03 172.16.0.105:80 check

listen lb01https 172.16.0.100:443
mode tcp
balance roundrobin
option ssl-hello-chk
server web01 172.16.0.103:443 check
server web02 172.16.0.104:443 check
server web03 172.16.0.105:443 check

listen stats :3320
mode http
stats enable
stats hide-version
stats uri /
stats auth user:password # użytkownik i hasło do statystyk

Bierzemy się za heartbeata.

Heartbeat będzie sprawdzał czy połączenie sieciowe działa pingując gateway (opcja ping w /etc/ha.d/ha.cf).

Instalacja heartbeat:

# apt-get install heartbeat

Na obu serwerach wszystkie pliki konfiguracyjne powinny wyglądać tak samo!

Edytujemy /etc/ha.d/authkeys:

auth 1
1 crc

Ustawiamy uprawnienia:

# chmod 600 /etc/ha.d/authkeys

Edytujemy /etc/ha.d/haresources:

lb01 IPaddr::172.16.0.100/32

Edytujemy /etc/ha.d/ha.cf:

logfile /var/log/ha-log
keepalive 200ms
deadtime 15
deadping 15
initdead 80
ucast eth0 172.16.0.101
ucast eth0 172.16.0.102
udpport 694
node lb01
node lb02
auto_failback on
ping 172.16.0.1
respawn hacluster /usr/lib64/heartbeat/ipfail # w zależności od architektury.
autojoin none

Po wszystkim startujemy heartbeata na lb01 oraz lb01:

# /etc/init.d/heartbeat restart

Najprostszy sposób na przetestowanie czy wszystko działa poprawnie, to wyłączenie heartbeat’a na lb01 i zalogowanie się na lbmaster w celu sprawdzenia na jakim hoście jesteśmy.

W tym celu zalogujmy się najpierw na lbmaster:

$ ssh lbmaster
$ hostname
lb01

Wyłączamy heartbeata:

$ ssh lb01
# /etc/init.d/heartbeat stop

I ponownie się zalogujmy na lbmaster:

$ ssh lbmaster
$ hostname
lb02

Po ponownym starcie heartbeat’a na lb01 lbmaster powinien ponownie wskazywać na lb01.

Enjoy!

Ten wpis został opublikowany w kategorii Bez kategorii. Dodaj zakładkę do bezpośredniego odnośnika.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

Możesz użyć następujących tagów oraz atrybutów HTML-a: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>