FreeBSD 9.0 + FIB + CARP

Alles rund um Netzwerktechnik und Protokolle
User avatar
Joe User
Project Manager
Project Manager
Posts: 11174
Joined: 2003-02-27 01:00
Location: Hamburg

FreeBSD 9.0 + FIB + CARP

Post by Joe User »

Moin,

ich benötige für ein Projekt eine HA-Lösung auf Basis von FreeBSD-9.0. Nachdem ich nun seit Tagen wie blöd google habe ich eine mögliche Lösung gefunden, wofür es allerdings nur relativ wenig aktuelle Dokumentation gibt. Dahür würde mich interessieren, ob ich mit nachfolgender Konfiguration richtig liege und oder ob ich daran noch etwas schrauben muss.

Gegeben sind zwei Server (Host_A und Host_B) mit je vier NICs, welche in unterschiedlichen Netzen mit jeweils eigenem Default-Gataway hängen. Davon hat lediglich ein Gateway (Firewall/NAT-Router) Verbindung zum Internet, der Rest ist jeweils reines LAN (sollte keine Rolle spielen, aber man weiss ja nie).
Für jedes einzelne NIC wird per FIB eine eigene Default-Route zum jeweiligen Gateway vergeben und funktioniert bereits problemlos.

Jetzt soll in das zuvor beschriebene Setup CARP (Failover+Loadbalance) integriert werden. Um die Server nicht durch Konfigurationsfehler von Extern unerreichbar zu machen, wäre mir ein Review der nachfolgenden Konfigurationen ganz lieb.

Host_A:

Code: Select all

cat >> /etc/rc.conf <<"EOF"
ifconfig_bce0="inet 192.168.0.30 netmask 255.255.255.0 fib 0"
ifconfig_bce1="inet 192.168.1.30 netmask 255.255.255.0 fib 1"
ifconfig_bce2="inet 192.168.2.30 netmask 255.255.255.0 fib 2"
ifconfig_bce3="inet 192.168.3.30 netmask 255.255.255.0 fib 3"
cloned_interfaces="carp30 carp31 carp32 carp33 carp40 carp41 carp42 carp43"
ifconfig_carp30="vhid 30 pass somepass advbase 1 advskew 0 192.168.0.50 netmask 255.255.255.0"
ifconfig_carp31="vhid 31 pass somepass advbase 1 advskew 0 192.168.1.50 netmask 255.255.255.0"
ifconfig_carp32="vhid 32 pass somepass advbase 1 advskew 0 192.168.2.50 netmask 255.255.255.0"
ifconfig_carp33="vhid 33 pass somepass advbase 1 advskew 0 192.168.3.50 netmask 255.255.255.0"
ifconfig_carp40="vhid 40 pass somepass advbase 1 advskew 100 192.168.0.50 netmask 255.255.255.0"
ifconfig_carp41="vhid 41 pass somepass advbase 1 advskew 100 192.168.1.50 netmask 255.255.255.0"
ifconfig_carp42="vhid 42 pass somepass advbase 1 advskew 100 192.168.2.50 netmask 255.255.255.0"
ifconfig_carp43="vhid 43 pass somepass advbase 1 advskew 100 192.168.3.50 netmask 255.255.255.0"
"EOF"
Host_B:

Code: Select all

cat >> /etc/rc.conf <<"EOF"
ifconfig_bce0="inet 192.168.0.40 netmask 255.255.255.0 fib 0"
ifconfig_bce1="inet 192.168.1.40 netmask 255.255.255.0 fib 1"
ifconfig_bce2="inet 192.168.2.40 netmask 255.255.255.0 fib 2"
ifconfig_bce3="inet 192.168.3.40 netmask 255.255.255.0 fib 3"
cloned_interfaces="carp30 carp31 carp32 carp33 carp40 carp41 carp42 carp43"
ifconfig_carp30="vhid 30 pass somepass advbase 1 advskew 100 192.168.0.50 netmask 255.255.255.0"
ifconfig_carp31="vhid 31 pass somepass advbase 1 advskew 100 192.168.1.50 netmask 255.255.255.0"
ifconfig_carp32="vhid 32 pass somepass advbase 1 advskew 100 192.168.2.50 netmask 255.255.255.0"
ifconfig_carp33="vhid 33 pass somepass advbase 1 advskew 100 192.168.3.50 netmask 255.255.255.0"
ifconfig_carp40="vhid 40 pass somepass advbase 1 advskew 0 192.168.0.50 netmask 255.255.255.0"
ifconfig_carp41="vhid 41 pass somepass advbase 1 advskew 0 192.168.1.50 netmask 255.255.255.0"
ifconfig_carp42="vhid 42 pass somepass advbase 1 advskew 0 192.168.2.50 netmask 255.255.255.0"
ifconfig_carp43="vhid 43 pass somepass advbase 1 advskew 0 192.168.3.50 netmask 255.255.255.0"
"EOF"
Host_A + Host_B:

Code: Select all

cat >> /etc/rc.local <<"EOF"
/sbin/route flush
/sbin/ipfw -f flush
/usr/sbin/setfib 0 /sbin/route add default 192.168.0.1
/usr/sbin/setfib 1 /sbin/route add default 192.168.1.1
/usr/sbin/setfib 2 /sbin/route add default 192.168.2.1
/usr/sbin/setfib 3 /sbin/route add default 192.168.3.1
/sbin/ipfw add allow    ip from any to any via lo0
/sbin/ipfw add setfib 0 ip from any to any via bce0
/sbin/ipfw add setfib 1 ip from any to any via bce1
/sbin/ipfw add setfib 2 ip from any to any via bce2
/sbin/ipfw add setfib 3 ip from any to any via bce3
/sbin/ipfw add allow    ip from any to any
"EOF"

cat >> /etc/sysctl.conf <<"EOF"
net.inet.carp.preempt=1
"EOF"

cat >> /boot/loader.conf <<"EOF"
ipfw_load="YES"
net.fibs=4
"EOF"

cat >> /root/kernels/GENERIC_FIB_CARP <<"EOF"
options         ROUTETABLES=16
device          carp
"EOF"
Gemäss http://www.freebsd.org/doc/handbook/carp.html und Google müsste das Ganze theoretisch so funktionieren, ist es praktisch auch so?

Später kommt dann noch HAST dazu, aber das ist ein völlig anderes Thema.


Danke vorab und Gruss,
Joe User
PayPal.Me/JoeUserFreeBSD Remote Installation
Wings for LifeWings for Life World Run

„If there’s more than one possible outcome of a job or task, and one
of those outcomes will result in disaster or an undesirable consequence,
then somebody will do it that way.“ -- Edward Aloysius Murphy Jr.
User avatar
daemotron
Administrator
Administrator
Posts: 2639
Joined: 2004-01-21 17:44

Re: FreeBSD 9.0 + FIB + CARP

Post by daemotron »

Ich sehe jetzt auf die Schnelle auch erst mal keinen Blocker, aber ich würde das dann doch erst mal mit zwei Vbox-Instanzen (o. ä.) testen.
“Some humans would do anything to see if it was possible to do it. If you put a large switch in some cave somewhere, with a sign on it saying 'End-of-the-World Switch. PLEASE DO NOT TOUCH', the paint wouldn't even have time to dry.” — Terry Pratchett, Thief of Time
User avatar
Joe User
Project Manager
Project Manager
Posts: 11174
Joined: 2003-02-27 01:00
Location: Hamburg

Re: FreeBSD 9.0 + FIB + CARP

Post by Joe User »

In virtuellen Umgebungen gibt es Probleme mit CARP, da die virtuellen Switche/Router der VM-Lösungen die VHID auch zur Quelle zurückschicken und damit die CARP-Interfaces nicht wieder in den BACKUP-Mode switchen lassen. Es gibt dafür zwar einen älteren 3rd-Party-Patch, wodurch die Loops von FreeBSD verworfen werden, aber ob der für 9.0-RELEASE (und insbesondere 9-STABLE nach den letzten Codechanges für CARP) noch geeignet ist?

Auf der ersten Kiste hat obiges Setup jedenfalls schonmal geglückt, zumindest kam die Kiste nach dem Reboot wieder normal hoch. Die zweite Kiste folgt in den nächsten zwei Wochen und dann wird mit HAST getestet.


Besteht später Interesse an einem HowTo auf der Basis dieses Setups?



Richtig interessant wird es mit FreeBSD 10, da dort CARP als eigenständiges Subsystem implementiert ist und dann nicht mehr als Alias/Clone sondern echtes Device konfiguriert wird (ähnlich wie bei OpenBSD). Wenn ich es richtig gelesen habe, unterstützten die CARP-Devices dann aber erstmal keine FIBs mehr, was ärgerlich wäre.

Naja, ist noch etwas Zeit bis 10.0 ;)
PayPal.Me/JoeUserFreeBSD Remote Installation
Wings for LifeWings for Life World Run

„If there’s more than one possible outcome of a job or task, and one
of those outcomes will result in disaster or an undesirable consequence,
then somebody will do it that way.“ -- Edward Aloysius Murphy Jr.
User avatar
daemotron
Administrator
Administrator
Posts: 2639
Joined: 2004-01-21 17:44

Re: FreeBSD 9.0 + FIB + CARP

Post by daemotron »

Hm, das Problem mit der VHID hatte ich gar nicht auf dem Schirm - gut zu wissen, dass Vbox da ein merkwürdiges Verhalten an den Tag legt. Könnte man das mit bridged Networking und einem dedizierten HW-Switch umgehen? Dann ließe sich das immer noch mit relativ geringem Blecheinsatz simulieren...

An einem Howto besteht auf jeden Fall Interesse. Habe zwar grade keinen akuten Verwendungszweck, aber vielleicht reicht das Budget irgendwann doch für zwei Dedis :wink:
“Some humans would do anything to see if it was possible to do it. If you put a large switch in some cave somewhere, with a sign on it saying 'End-of-the-World Switch. PLEASE DO NOT TOUCH', the paint wouldn't even have time to dry.” — Terry Pratchett, Thief of Time