Im Modus 5 oder im Balance-tlb-Modus verwendet der ausgehende Verkehr die MAC-Adresse der Slave-Schnittstelle, die er verlässt, anstatt die Adresse der Bond-Schnittstelle zu verwenden.
In der Regel wird der MAC der Anleihe für den gesamten Datenverkehr verwendet, was zu einem MAC-Flattern zwischen zwei Ports eines bestimmten Switches führen kann. Jeder Ihrer Switches sieht eingehenden Datenverkehr mit dem MAC der Anleihe als Quelle, beide von der direkten Verbindung zum Gerät und von der Querverbindung zum anderen Schalter.
Der Übertragungslastausgleichsmodus umgeht dieses Problem, indem er ausgehenden Datenverkehr zwischen Schnittstellen ausgleicht, aber die MAC-Adresse der Schnittstelle als Quelle für ausgehenden Datenverkehr verwendet. Wenn Ihre anderen Knoten im Subnetz (insbesondere der Router) dieses Verhalten nicht stören, funktioniert es einwandfrei - normalerweise gibt es kein Problem, aber ich kann mir vorstellen, dass einige restriktive Einstellungen für die Routersicherheit beleidigend sind.
Die Bond-Schnittstelle nimmt die MAC-Adresse einer ihrer Slave-Schnittstellen an:
root@test1:~# ifconfig
bond1 Link encap:Ethernet HWaddr 00:0c:29:3d:f7:35
inet addr:192.168.100.25 Bcast:192.168.100.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fe3d:f735/64 Scope:Link
UP BROADCAST RUNNING MASTER MULTICAST MTU:1500 Metric:1
eth1 Link encap:Ethernet HWaddr 00:0c:29:3d:f7:35
UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500 Metric:1
eth2 Link encap:Ethernet HWaddr 00:0c:29:3d:f7:3f
UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500 Metric:1
Der MAC von eth1 passt zur Bond-Schnittstelle, er ist der "primäre", sodass er den eingehenden Datenverkehr erhält.
Und nur zur Bestätigung:
root@test1:~# cat /sys/class/net/bond1/bonding/mode
balance-tlb 5
root@test1:~# cat /sys/class/net/bond1/bonding/active_slave
eth1
Ok, also ... ist es ein Lastausgleich? So sieht es von einem anderen Knoten aus, der konstante Pings sendet:
root@test2:~# tcpdump -e -n -i eth0 proto 1
20:33:08.094078 00:0c:29:46:4f:c6 > 00:0c:29:3d:f7:35, ethertype IPv4 (0x0800), length 98: 192.168.100.40 > 192.168.100.25: ICMP echo request, id 5810, seq 38, length 64
20:33:08.094549 00:0c:29:3d:f7:35 > 00:0c:29:46:4f:c6, ethertype IPv4 (0x0800), length 98: 192.168.100.25 > 192.168.100.40: ICMP echo reply, id 5810, seq 38, length 64
20:33:09.094052 00:0c:29:46:4f:c6 > 00:0c:29:3d:f7:35, ethertype IPv4 (0x0800), length 98: 192.168.100.40 > 192.168.100.25: ICMP echo request, id 5810, seq 39, length 64
20:33:09.094520 00:0c:29:3d:f7:35 > 00:0c:29:46:4f:c6, ethertype IPv4 (0x0800), length 98: 192.168.100.25 > 192.168.100.40: ICMP echo reply, id 5810, seq 39, length 64
20:33:10.094078 00:0c:29:46:4f:c6 > 00:0c:29:3d:f7:35, ethertype IPv4 (0x0800), length 98: 192.168.100.40 > 192.168.100.25: ICMP echo request, id 5810, seq 40, length 64
20:33:10.094540 00:0c:29:3d:f7:35 > 00:0c:29:46:4f:c6, ethertype IPv4 (0x0800), length 98: 192.168.100.25 > 192.168.100.40: ICMP echo reply, id 5810, seq 40, length 64
Das sieht alles normal aus - eth1 reagiert. Dann gibt es unaufgefordert einen Schalter. Beachten Sie, dass der Ziel-MAC der Anforderung und der Quell-MAC der Antwort nicht mehr übereinstimmen.
20:33:11.094084 00:0c:29:46:4f:c6 > 00:0c:29:3d:f7:35, ethertype IPv4 (0x0800), length 98: 192.168.100.40 > 192.168.100.25: ICMP echo request, id 5810, seq 41, length 64
20:33:11.094614 00:0c:29:3d:f7:3f > 00:0c:29:46:4f:c6, ethertype IPv4 (0x0800), length 98: 192.168.100.25 > 192.168.100.40: ICMP echo reply, id 5810, seq 41, length 64
20:33:12.094059 00:0c:29:46:4f:c6 > 00:0c:29:3d:f7:35, ethertype IPv4 (0x0800), length 98: 192.168.100.40 > 192.168.100.25: ICMP echo request, id 5810, seq 42, length 64
20:33:12.094531 00:0c:29:3d:f7:3f > 00:0c:29:46:4f:c6, ethertype IPv4 (0x0800), length 98: 192.168.100.25 > 192.168.100.40: ICMP echo reply, id 5810, seq 42, length 64
20:33:13.094086 00:0c:29:46:4f:c6 > 00:0c:29:3d:f7:35, ethertype IPv4 (0x0800), length 98: 192.168.100.40 > 192.168.100.25: ICMP echo request, id 5810, seq 43, length 64
20:33:13.094581 00:0c:29:3d:f7:3f > 00:0c:29:46:4f:c6, ethertype IPv4 (0x0800), length 98: 192.168.100.25 > 192.168.100.40: ICMP echo reply, id 5810, seq 43, length 64
Bei einem konstanten Ping werden die Wechsel zwischen den Quellen willkürlich fortgesetzt, basierend auf der Bewertung der Last durch die Bond-Schnittstelle - sie scheint alle 10 Sekunden neu zu bewerten.
Das Failover für eingehenden Datenverkehr in Modus 5 ist wesentlich einfacher. Wenn die Schnittstelle als ausgefallen erkannt wird, wird der MAC der Bond-Schnittstelle einfach auf die Live-Schnittstelle verschoben. Dies löst häufig eine MAC-Flattern-Warnung in Ihren Switch-Protokollen aus, aber das ist zu erwarten. Nichts, über das man sich sorgen sollte.
Die Schnittstellen-MACs ändern sich daraus:
eth1 Link encap:Ethernet HWaddr 00:0c:29:3d:f7:35
eth2 Link encap:Ethernet HWaddr 00:0c:29:3d:f7:3f
..zu, nachdem eth1 entfernt wurde, dies:
eth1 Link encap:Ethernet HWaddr 00:0c:29:3d:f7:3f
eth2 Link encap:Ethernet HWaddr 00:0c:29:3d:f7:35
Und alle Verkehrsquellen von eth2 mit einem MAC von :35
.
Also, ja - vorausgesetzt, Sie kümmern sich nicht um den Lastausgleich des eingehenden Datenverkehrs, scheint der Balance-TLB-Modus einen hervorragenden Job für den schaltersicheren Lastausgleich des ausgehenden Datenverkehrs und das Failover des eingehenden Datenverkehrs zu leisten.
Wenn Ihr Router sich nicht um mehrere Quell-MACs kümmert, die Datenverkehr für eine einzelne IP senden, und nicht durch kostenlose ARP-Failover beleidigt wird, sollten Sie bereit sein!