Seit ein paar Tagen beschäftige ich mich mit dem Thema Bonding. Dabei handelt es sich nicht um eine Sexualpraktik, sondern um das Bündeln von Netzwerkkarten.
Die großen Hersteller verschiedener Switches nennen das unter anderem auch:
- Port Trunking
- Etherchannel
- Link Aggregation
Mir persönlich ging es nur um die Steigerung der Bandbreite. Leider benötigt man für das Vorhaben ein Spezielles Switch, welches 802.3ad unterstützt. Das Switch wird über das WebInterface so eingerichtet, dass mehrere Ports gebündelt werden. Linux beherrscht von Haus aus Bonding. Unter Windows benötigt man dafür spezielle Netzwerkkarten, dessen Treiber das unterstützt. Da die meisten Boards bereits zwei OnBoard-Netzwerkkarten haben, bot sich der Test mit meinem Server an. Das Switch musste ich weglassen und habe stattdessen die Netzwerkkabel direkt mit den Netzwerkkarten verbunden.
Ich habe im Server und im meinem SpielePC noch jeweils eine zusätzliche Netzwerkkarte eingebaut. Dadurch hatte ich in beiden PCs 3 GBit-Netzwerkkarten. Da auf dem Server bereits Debian-Linux installiert war, konnte ich dort recht schnell das Bonding einrichten. Unter Debian ist das recht einfach.
/etc/network/interfaces:
|
Quellcode
|
1
2
3
4
5
6
7
8
|
auto lo
iface lo inet loopback
auto bond0
iface bond0 inet static
address 10.0.0.1
netmask 255.255.255.0
slaves eth0 eth1 eth2
|
D.h. die Netzwerkkarten eth0 - eth2 sind in einem Bond zusammengefasst, der mit bond0 angesprochen wird. Das Modul bonding wird durch das Netzwerkscript automatisch geladen. Ohne zusätzliche Optionen wird der Modus 0 verwendet.
mode=0 (balance-rr)
Round-robin policy: Transmit packets in sequential order from the first available slave through the last. This mode provides load balancing and fault tolerance.
Auf dem SpielePC habe in kein Linux installiert. Aus diesem Grund habe ich mir eine Debian-LiveCD gebrannt, von der ich den PC dann gebootet habe.
Die Konfiguration habe ich dann manuell vorgenommen:
|
Quellcode
|
1
2
3
|
modprobe bonding
ifconfig bond0 10.0.0.100 netmask 255.255.255.0
ifenslave bond0 eth0 eth1 eth2
|
Auf dem Server ist bereits ein Apache2-Server installiert gewesen. Zusätzlich habe ich für den Test noch eben eine Ramdisk auf das SharedMemory gemountet:
|
Quellcode
|
1
2
3
4
5
6
|
mount -t tmpfs /dev/shm /var/www/isos-rd
cd /var/www/isos
#testimage kopieren 1,5GiB groß
cp testiso.iso ../isos-rd/test.bin
#MD5-Hashwert erstellen
md5sum ../isos-rd/test.bin > ../isos-rd/test.md5
|
Auf dem SpielePC war das nicht notwendig, da diese ja schon von Haus aus SharedMemory für / verwendet. Aus diesem Grund konnte ich dann direkt mit dem Testen anfangen.
Mittels wget hatte ich dann die beiden Dateien, die ich auf dem Webserver in den SharedMemory kopiert habe, heruntergeladen.
Das Resultat sieht dann so aus:
|
Quellcode
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
|
root@debian:/home/user# wget 10.0.0.1/test.bin 10.0.0.1/test.md5
--2011-05-29 16:13:35-- http://10.0.0.1/test.bin
Connecting to 10.0.0.1:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 1593360384 (1.5G) [application/octet-stream]
Saving to: test.bin
100%[==============>] 1,593,360,384 276M/s in 5.5s
2011-05-29 16:13:41 (278 MB/s) - test.bin saved [1593360384/1593360384]
--2011-05-29 16:13:41-- http://10.0.0.1/test.md5
Reusing existing connection to 10.0.0.1:80.
HTTP request sent, awaiting response... 200 OK
Length: 43 [text/plain]
Saving to: test.md5
100%[==============>] 43 --.-K/s in 0s
2011-05-29 16:13:41 (11.8 MB/s) - test.md5 saved [43/43]
FINISHED --2011-05-29 16:13:41--
Downloaded: 2 files, 1.5G in 5.5s (278 MB/s)
root@debian:/home/user# rm test.*
root@debian:/home/user# wget 10.0.0.1/test.bin 10.0.0.1/test.md5
--2011-05-29 16:14:34-- http://10.0.0.1/test.bin
Connecting to 10.0.0.1:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 1593360384 (1.5G) [application/octet-stream]
Saving to: test.bin
100%[==============>] 1,593,360,384 321M/s in 6.2s
2011-05-29 16:14:40 (243 MB/s) - test.bin saved [1593360384/1593360384]
--2011-05-29 16:14:40-- http://10.0.0.1/test.md5
Reusing existing connection to 10.0.0.1:80.
HTTP request sent, awaiting response... 200 OK
Length: 43 [text/plain]
Saving to: test.md5
100%[==============>] 43 --.-K/s in 0s
2011-05-29 16:14:40 (8.00 MB/s) - test.md5 saved [43/43]
FINISHED --2011-05-29 16:14:40--
Downloaded: 2 files, 1.5G in 6.2s (243 MB/s)
root@debian:/home/user# md5sum -c test.md5
test.bin: OK
root@debian:/home/user#
|
Der Kopiervorgang fing bei 125MB/s an und steigerte sich zum Schluss auf 321 MB/s. Theoretisch wäre ein Datendurchsatz von 375 MB/s durch die drei 1-GBit-Netzwerkkarten möglich. In einem Raid0 müsste man da schon ein paar Festplatten für nehmen. Um große Datenmengen mal eben zu kopieren, eignet sich das sicherlich ganz gut. Bei einem Raid-0-Verbund mit Festplatten oder SSDs hätte man für den Transfer mehr als genügend Bandbreite. Für Lan-Partys mit geeigneter Hardware (Switches die das unterstützen) und einem Server, der schnell genug ist, wäre somit auch ein schneller redundanter Fileserver möglich, der mit mehr als nur 1GBit/s angebunden ist.