Ich hab in den letzten Tagen viel Zeit damit verbracht, mich in Sachen Linux-HA mal wieder auf den neuesten Stand zu bringen und im Zuge dessen viel mit OpenAIS, Corosync, DRBD, OCFS2 und Pacemaker experimentiert. Da bei mir zu Hause natürlich nicht zehn Rechner rumstehen, habe ich stattdessen zwei Virtualisierungstechniken benutzt. Zum einen war das User Mode Linux Sachen, die man ohne größeres Verbiegen des Kernels hinbekommen kann - meistens also als “Applikationsserver” und dergleichen, wo ich, wenn überhaupt, nur Heartbeat oder so gebraucht habe (und bevor jemand aufmerkt: Klar, man kann das auch alles für UML bauen. Ich war nur zu faul!). Das geht mittlerweile echt gut, moderne Kernel kommen standardmäßig zumindest mit dem SKAS0-Patch was dazu führt, daß sowohl die Performance als auch der Ressourcenhunger an und für sich in Ordnung sind. Für die komplizierteren Sachen habe ich mich bei Suns VirtualBox bedient - und dabei ist mir eine echt interessante Sache aufgefallen:

Ich habe mein Szenario mit zwei Netzwerken abgebildet: Einmal eines, das im Endeffekt ganz normal an meine Ethernet-Karte gebridged ist (also einen uml-Switch an tap0 hängen, tap0 und eth0 zur Bridge br0 hinzufügen, der eine IP in meinem Netz geben und in der VirtualBox-GUI einen Netzwerkadapter auf br0 bridgen), für Sachen wie Internet, und ein zweites Netzwerk mit einem dedizierten Switch für die Heartbeat-Verbindungen. Das zweite Netz ist eigentlich denkbar einfach:

1
2
3
4
tunctl -u uml-net -t tap1
ip a a 10.0.0.254/24 dev tap1
ip l s tap1 up
/usr/bin/uml_switch -tap tap1 -unix /var/run/uml-utilities/uml_switch_virtual.ctl

Für die UML-Gäste hieß das beim Aufruf dann eth1=daemon,,,/var/run/uml-utilities/uml_switch_virtual.ctl und in der VirtualBox-GUI habe ich den zweiten Adapter dann einfach auf tap1 gebridged. Und jetzt kommts: Die Maschinen können alle miteinander reden, aber sobald ich das erste Mal von einer VirtualBox-Maschine aus über den zweiten UML-Switch eine UML-Maschine anpinge, kommt irgendwas aus dem Tritt: Jedes Paket, daß direkt von der Adresse von tap1 an den Gast geht, wird doppelt gesendet. Jedes. Antworten auf Pings, TCP-RST, alles, was ich getestet habe. Und auch nur, wenn es direkt tap1 ist, das antwortet.

Kennt irgendjemand von Euch das Verhalten?