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

Das könnte dich auch interessieren …