| Home Profil Fun |
#79 Linux 22.07.2009
Bündelung von NetzwerkkartenFür höheren Durchsatz oder Ausfallsicherheit lassen sich mehrere Netzwerkkarten zu einem virtuellen Netzwerkinterface zusammenschließen. Verschiedene Algorithmen stehen zur Verfügung, um den Datenverkehr auf beide Leitungen zu verteilen. Bei manchen sind bestimmte Vorraussetzungen auf dem Switch notwendig bei anderen nicht. Ich verwende hier im Beispiel "balance-rr", wobei die Last per round-robin auf beide Leitungen verteilt wird. Das schöne ist, man kann einfach beliebig Netzkabel ziehen und wieder einstecken. Solange immer mindestens ein Netzwerkkabel angeschlossen ist, gibt es keine sichtbare Unterbrechung des Datenstroms. Man hat also Redundanz und höheren Durchsatz, der Switch erfordert keine besonderen Einstellungen. Andere Algorithmen verwenden z.B. die zweite Leitung als Backup, verwenden sie aber nicht. Dieses Beispiel sieht wie folgt aus: Statische IP 192.168.1.35 auf dem virtuellen bonding-Interface bond0 Algorithmus balance-rr Der gesamte Datenverkehr wird über bond0 geroutet. Am einfachsten ist es, erstmal per Yast die Netzwerkkarten auf dhcp zu konfigurieren, damit man entsprechende Dateien in /etc/sysconfig/network erhält. Diese werden wie folgt geändert (in meinem Beispiel sieht das so aus, das muss natürlich individuell angepasst werden): # cat /etc/sysconfig/network/ifcfg-eth-id-00\:00\:cb\:69\:06\:ca BOOTPROTO='static' BROADCAST='' ETHTOOL_OPTIONS='' IPADDR='' MTU='' NAME='Realtek RT8139' NETMASK='255.255.255.0' NETWORK='' REMOTE_IPADDR='' STARTMODE='auto' UNIQUE='JNkJ.IQxIdIhhuH7' USERCONTROL='no' _nm_name='bus-pci-0000:05:04.0' # cat /etc/sysconfig/network/ifcfg-eth-id-00\:11\:85\:0f\:18\:cd BOOTPROTO='static' BROADCAST='' ETHTOOL_OPTIONS='' IPADDR='' MTU='' NAME='Hewlett-Packard Company HP d530 CMT (DG746A)' NETMASK='255.255.255.0' NETWORK='' REMOTE_IPADDR='' STARTMODE='auto' UNIQUE='rBUF.7LBxAzvZZlA' USERCONTROL='no' _nm_name='bus-pci-0000:05:02.0' Anschließend wird die Datei ifcfg-bond0 neu erstellt: # cat /etc/sysconfig/network/ifcfg-bond0 BOOTPROTO='static' BROADCAST='192.168.1.255' IPADDR='192.168.1.35' NETMASK='255.255.255.0' NETWORK='192.168.1.0' REMOTE_IPADDR= STARTMODE='onboot' BONDING_MASTER='yes' BONDING_MODULE_OPTS='mode=balance-rr miimon=100' BONDING_SLAVE0='eth0' BONDING_SLAVE1='eth1' # oder BONDING_SLAVE0='hwcfg-bus-pci-0000:05:02.0' # BONDING_SLAVE1='hwcfg-bus-pci-0000:05:04.0' Damit alles über bond0 geroutet wird, muss eine Route entsprechend fest eingetragen werden: # cat /etc/sysconfig/network/routes: default 192.168.1.1 - bond0 Änderungen an /etc/modprobe.conf.local sind nicht notwendig. Das ganze sollte dann so aussehen:
gpfs:~ # ip a
1: lo: <LOOPBACK,UP> mtu 16436 qdisc noqueue
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth1: <BROADCAST,MULTICAST,SLAVE,UP> mtu 1500 qdisc pfifo_fast master bond0 qlen 1000
link/ether 00:11:85:0f:18:cd brd ff:ff:ff:ff:ff:ff
inet6 fe80::211:85ff:fe0f:18cd/64 scope link
valid_lft forever preferred_lft forever
3: eth0: <BROADCAST,MULTICAST,SLAVE,UP> mtu 1500 qdisc pfifo_fast master bond0 qlen 1000
link/ether 00:11:85:0f:18:cd brd ff:ff:ff:ff:ff:ff
inet6 fe80::211:85ff:fe0f:18cd/64 scope link
valid_lft forever preferred_lft forever
5: sit0: <NOARP> mtu 1480 qdisc noop
link/sit 0.0.0.0 brd 0.0.0.0
6: bond0: <BROADCAST,MULTICAST,MASTER,UP> mtu 1500 qdisc noqueue
link/ether 00:11:85:0f:18:cd brd ff:ff:ff:ff:ff:ff
inet 192.168.1.35/24 brd 192.168.1.255 scope global bond0
inet6 fe80::200:ff:fe00:0/64 scope link
valid_lft forever preferred_lft forever
gpfs:~ # route -n
Kernel IP Routentabelle
Ziel Router Genmask Flags Metric Ref Use Iface
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 bond0
127.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 lo
0.0.0.0 192.168.1.1 0.0.0.0 UG 0 0 0 bond0
Achtung! Wenn man an diesem Punkt das Netzwerk herunterfährt oder versucht den Server zu booten, hängt das ganze System. Das heist man kann den Stromstecker ziehen. Der Grund ist, dass das Netzwerk-Startskript zuerst versucht bond0 herunterzufahren, aber ohne die Slaves vorher zu detachen. Daher ist es unbedingt notwendig das Startskript anzupassen: In /etc/init.d/network, ab Zeile 820 von:
stop)
echo Shutting down network interfaces:
if [ -z "$INTERFACE" ] ; then
nach:
stop)
echo Shutting down network interfaces:
echo "First detach bonding slaves from master:"
echo "ifenslave -d bond0 eth0"
ifenslave -d bond0 eth0
echo "ifenslave -d bond0 eth1"
ifenslave -d bond0 eth1
if [ -z "$INTERFACE" ] ; then
Ich habe hier der Einfachheit halber ifenslave für beide Slaves hardcoded eingetragen. Eine generische Lösung ist natürlich immer schöner, aber so funktioniert es. SLES Administration |