Aufsetzen Eines Hochverfügbaren Load Balancers (Mit Failover und Session Support) Mit Pound Auf Debian Etch
5 Aufsetzen Von keepalived
Wir haben soeben Pound konfiguriert, dass es auf der virtuellen IP Adresse 192.168.0.99 hört, aber jemand muss lb1 und lb2 mitteilen, dass sie auf dieser IP Adresse hören sollen. Dies wird von keepalived erledigt, was wir wie folgt installieren:
lb1/lb2:
apt-get install keepalived
Um Pound zu erlauben, sich mit der freigegebenen IP Adresse zu verbinden, fügen wir folgende Zeile zu /etc/sysctl.conf hinzu:
vi /etc/sysctl.conf
[...] net.ipv4.ip_nonlocal_bind=1 |
… und lassen Folgendes laufen:
sysctl -p
Als Nächstes müssen wir keepalived konfigurieren (dies erfolgt mittels der Konfigurationsdatei /etc/keepalived/keepalived.conf). Ich möchte, dass lb1 der Master Load Balancer ist, also verwenden wir folgende Konfiguration auf lb1:
lb1:
vi /etc/keepalived/keepalived.conf
vrrp_script chk_pound { # Requires keepalived-1.1.13 script "killall -0 pound" # cheaper than pidof interval 2 # check every 2 seconds weight 2 # add 2 points of prio if OK } vrrp_instance VI_1 { interface eth0 state MASTER virtual_router_id 51 priority 101 # 101 on master, 100 on backup virtual_ipaddress { 192.168.0.99 } track_script { chk_pound } } |
(Es ist wichtig, dass Du „priority 101“ in der obrigen Datei verwendest – somit wird lb1 zum Master!)
Dann starten wir keepalived auf lb1:
lb1:
/etc/init.d/keepalived start
Lass dann dies laufen:
lb1:
ip addr sh eth0
… und Du müsstest feststellen, dass lb1 nun auch auf der freigegebenen IP Adresse hört:
lb1:/etc/keepalived# ip addr sh eth0
2: eth0: <BROADCAST,MULTICAST,UP,10000> mtu 1500 qdisc pfifo_fast qlen 1000
link/ether 00:0c:29:a5:5b:93 brd ff:ff:ff:ff:ff:ff
inet 192.168.0.100/24 brd 192.168.0.255 scope global eth0
inet 192.168.0.99/32 scope global eth0
inet6 fe80::20c:29ff:fea5:5b93/64 scope link
valid_lft forever preferred_lft forever
lb1:/etc/keepalived#
Nun führen wir fast das gleiche auf lb2 aus. Es gibt nur einen, aber wichtigen Unterschied – wir verwenden priority 100 anstatt priority 101 in /etc/keepalived/keepalived.conf was dazu führt, dass lb2 der passive (slave oder hot-standby) Load Balancer wird:
lb2:
vi /etc/keepalived/keepalived.conf
vrrp_script chk_pound { # Requires keepalived-1.1.13 script "killall -0 pound" # cheaper than pidof interval 2 # check every 2 seconds weight 2 # add 2 points of prio if OK } vrrp_instance VI_1 { interface eth0 state MASTER virtual_router_id 51 priority 100 # 101 on master, 100 on backup virtual_ipaddress { 192.168.0.99 } track_script { chk_pound } } |
Dann starten wir keepalived:
lb2:
/etc/init.d/keepalived start
Da lb2 der passive Load Balancer ist, sollte er nicht auf der virtuellen IP Adresse hören, solange lb1 aufgesetzt ist. Wir können dies wie folgt überprüfen:
lb2:
ip addr sh eth0
Die Ausgabe sollte so aussehen:
lb2:~# ip addr sh eth0
2: eth0: <BROADCAST,MULTICAST,UP,10000> mtu 1500 qdisc pfifo_fast qlen 1000
link/ether 00:0c:29:e0:78:92 brd ff:ff:ff:ff:ff:ff
inet 192.168.0.101/24 brd 192.168.0.255 scope global eth0
inet6 fe80::20c:29ff:fee0:7892/64 scope link
valid_lft forever preferred_lft forever
lb2:~#
6 Pound Starten
Nun können wir Pound starten:
lb1/lb2:
/etc/init.d/pound start
7 Testen
Unser hochverfügbarer Load Balancer ist nun aufgesetzt und läuft.
Du kannst nun HTTP Anfragen an die virtuelle IP Adresse 192.168.0.99 (oder zu einer beliebigen Domain/Hostnamen, die auf die virtuelle IP Adresse zeigt) senden und solltest die Inhalte von den Backend Web Servern erhalten.
Du kannst die Hochverfügbarkeit durch Ausschalten eines der Backend Servers testen – der Load Balancer sollte dann alle Anfragen an den verbleibenden Web Server weiterleiten. Schalte dann den Load Balancer (lb1) aus – lb2 sollte nun automatisch übernehmen. Du kannst dies überprüfen indem Du Folgendes ausführst:
lb2:
ip addr sh eth0
Nun müsstest Du die virtuelle IP Adresse in der Ausgabe auf lb2 sehen:
lb2:~# ip addr sh eth0
2: eth0: <BROADCAST,MULTICAST,UP,10000> mtu 1500 qdisc pfifo_fast qlen 1000
link/ether 00:0c:29:e0:78:92 brd ff:ff:ff:ff:ff:ff
inet 192.168.0.101/24 brd 192.168.0.255 scope global eth0
inet 192.168.0.99/32 scope global eth0
inet6 fe80::20c:29ff:fee0:7892/64 scope link
valid_lft forever preferred_lft forever
lb2:~#
Wenn lb1 wieder auftaucht, wird lb1 wieder die Master-Rolle übernehmen.
8 Links
- Pound: http://www.apsis.ch/pound
- Keepalived: http://www.keepalived.org
- Debian: http://www.debian.org