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 haproxydefaults
log global
mode http
option dontlognull
retries 3
option redispatch
maxconn 2000
contimeout 5000
clitimeout 50000
srvtimeout 50000listen 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 checklisten 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 checklisten 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!