• Diese Seite verwendet Cookies. Indem du diese Website weiterhin nutzt, erklärst du dich mit der Verwendung von Cookies einverstanden. Erfahre mehr

Carp Interface manuell switchen

Themenstarter #1
Ich bin gerade dabei eine HA Lösung für HAProxy zu basteln. Prinzipiell funktioniert das schon fast so wie ich möchte.
Derzeit habe ich 2 ( virtuelle ) Server die wie folgt konfiguriert sind.

MASTER:
Code:
ifconfig_vmx0="inet 192.168.203.11 netmask 255.255.255.0"
ifconfig_vmx0_alias0="inet vhid 20 advskew 100 pass blablabla alias 192.168.203.220/32"
BACKUP:
Code:
ifconfig_vmx0="inet 192.168.203.12 netmask 255.255.255.0"
ifconfig_vmx0_alias0="inet vhid 20 advskew 200 pass blablabla alias 192.168.203.220/32"
HAProxy lauscht auf der virtuellen IP.
Fällt der Master aus dann übernimmt der BACKUP. Kommt der Master back switcht die IP wieder auf den Master. net.inet.carp.preempt=1 ist auf beiden Maschinen gesetzt.

Mein Frage ist nur wie kann ich manuell einen Switch auslösen ?
Hintergrund der Frage:

Ich benötige noch eine Überwachung für das HAProxy Service. Ist das Service ausgefallen, soll die virtuelle IP auf den Backup wandern.
 

mapet

Active OpenBSD User
#3
Das ist FreeBSD, das kennt kein carpdemote, oder?
Auf dem Backup:
Code:
ifconfig vmx0 alias vhid 20 advskew 90
Der Master wird durch die advskew bestimmt. Der niedrigere Wert sendet die advertisements öfter und veranlasst den switch. Ist bei mehreren Interfaces leider etwas unhandlich.
 

Yamagi

Possessed With Psi Powers
Mitarbeiter
#5
Das geht mit dem "state" Parameter:
Code:
ifconfig vmx0 vhid 20 state SLAVE
Oder so ähnlich, ich habe das lange nicht mehr gemacht. :)
 
Themenstarter #6
DANKE !

Der Tipp mit dem verändern der advskew war der Schlüssel zum Erfolg. Ich hab das jetzt folgendermaßen gelöst.
Ifstated kontrolliert alle 5 Sekunden ob der HAProxy läuft. Wenn nicht wird das CARP Interface via advskew so erhöht das es zum Backup wird, und auf den zweiten Host wandert.

Code:
haproxy_check = '( "service haproxy status" every 5 )'

state main {
        if !$haproxy_check {
                run "ifconfig vmx0 alias vhid 20 advskew 201"
                set-state demoted
                }
}

state demoted {
        if $haproxy_check {
                run "ifconfig vmx0 alias vhid 20 advskew 100"
                set-state main
                }
}