So einfach funktioniert ATA over Ethernet (AOE)
Ähnlich wie bei iSCSI können mit ATA over Ethernet (AOE) Festplatten, Partitionen oder «Images» über das Netzwerk als Blockgeräte freigegeben werden. Erstaunlich dabei ist, wie einfach das geht, und auch, wie vielseitig die Anwendungen dafür sein können. Ohne grossen Aufwand kann man Raid übers Netzwerk machen und damit mehr Redundanz und auch Geschwindigkeit einbringen. Wie, zeigt Michi Zaugg in diesem Blogbeitrag.
Ähnlich wie bei iSCSI können mit ATA over Ethernet (AOE) Festplatten, Partitionen oder «Images» (Dateien, Container auf dem Filesystem) über das Netzwerk als Blockgeräte freigegeben werden. Erstaunlich dabei ist, wie einfach das geht, und auch, wie vielseitig die Anwendungen dafür sein können. Ohne grossen Aufwand kann man Raid übers Netzwerk machen (just a commandline away 😉 ) und damit mehr Redundanz und auch Geschwindigkeit einbringen. Ohne Probleme lässt sich AOE für die Virtualisierung einsetzen.
Hier ein kurzer Einstieg zum Lesen und als eine kleine Kommandozeilen-Akrobatikübung zum Testen.
Was brauchen wir?
Optimalerweise zwei bis drei Linuxmaschinen (es könnte auch alles auf einem Host ausprobiert werden, macht aber mehr Spass, wenn dies «echt» übers Netz über mehrere Maschinen geht). Debian, Ubuntu, CentOS, eigentlich wurscht, welche Distro genommen wird, hier habe ich Debian verwendet.
Vorbereitung
Der Kernel muss AOE unterstützen. Haben wir das Modul?
# grep ATA_OVER /boot/config-`uname -r`
Falls das config des Kernels fehlt:
# modprobe aoe
# lsmod | grep aoe
aoe 54175 0
Wie bei iSCSI redet man auch vom «Target» und von einem «Initiator». Das «Target» ist das Ziel, das ein Gerät freigibt. Der Initiator ist quasi der Klient, der Host, der dann das Gerät verwendet, montiert, oder was auch immer er damit anstellt 😉
Auf dem Target brauchen wir «vblade»:
# apt-get install vblade
Auf dem Initiator die Tools für AOE:
# apt-get install aoetools
Target
Um zu testen, kreieren wir ein Raw-File, das wir dann übers Netz freigeben. Hier sollte man darauf achten, dass man auf der Partition, auf der das File liegt, auch genügend Platz hat:
# dd if=/dev/zero of=/var/aoe/test.raw bs=1M count=1000
Dies kann man nun freigeben. Bei AOE redet man von «Shelfs» und «Slot»-Nummer. Fürs Verständnis kann man die Analogie machen, dass «Shelf»-Nummer ein Kontroller wäre und der «Slot» eine Harddisk.
# vbladed 0 1 eth0 /var/aoe/test.raw
vbladed kann auch ohne «d» gestartet werden:
# vblade 0 1 eth0 /var/aoe/test.raw
Damit läuft dies im Vordergrund, praktisch zum Debuggen, muss/kann dann aber durch ctrl-c abgebrochen werden. Mit «d» dämonisiert man das Ding.
Initiator
# aeo-discover
Findet die Geräte im Netz. Unter /dev/etherd findet sich nun ein Gerät mit dem Namen e0.1, dies kann mit fdisk partitioniert werden. Dann kann die Partition (/dev/etherd/e0.1p1) mit mkfs formatiert und eingebunden werden, z.B.:
# mkfs.ext4 /dev/etherd/e0.1p1
# mkdir /mnt/test
# mount /dev/etherd/e0.1p1 /mnt/test
Die Partition steht nun zur Verwendung bereit.
Sichern
Die Sicherheit steht, ähnlich wie bei iSCSI, nicht wirklich im Vordergrund. Es gibt aber Sicherheitsmassnahmen, die getroffen werden können. Wie? Einschränken auf eine oder mehrere MAC-Addressen:
# cat /etc/vblade.conf
# example configuration file
# network_device shelf slot file/disk/partition mac,mac[,mac]
eth0 0 1 /var/aoe/test.raw 00:DE:AD:BE:EF:00
Test it
Ich habe dies auf ein paar KVM-Maschinen auf dem Laptop ausprobiert, kein Wunder, dass dies keine sehr berauschende Geschwindigkeit ausgibt, die 18 MB hier sind aber sicherlich auf meine bescheidene Hardware zurückzuführen.
# dd if=/dev/zero of=/mnt/test/test.dd count=100 bs=1M oflag=direct
100+0 records in
100+0 records out
104857600 bytes (105 MB) copied, 5.75088 s, 18.2 MB/s
Raid it
Es sind nun alle Türen und Tore offen – AOE mit Raid zu verwenden ist eine gute Idee, welche Geschwindigkeit und Redundanz bringt. Dazu werden auf dem Initiator die mdadm Tools gebraucht (und der Kernel, was er normalerweise schon macht, muss Software Raid unterstützen).
# apt-get install mdadm
Auf dem Target (oder den Targets!) geben wir zwei «Disks» frei:
# dd if=/dev/zero of=/var/aoe/test_r1.raw bs=1M count=1000
# dd if=/dev/zero of=/var/aoe/test_r2.raw bs=1M count=1000
# vbladed 1 1 eth0 /var/aoe/test_r1.raw
# vbladed 1 2 eth0 /var/aoe/test_r2.raw
Auf dem Initiator suchen wir die «neuen» Geräte:
# aoe-discover
Nun erstellen wir ein Raid 1 über zwei Geräte:
# mdadm --create /dev/md0 --raid-devices=2 --level=1 \
/dev/etherd/e1.1 /dev/etherd/e1.2
mdadm: array /dev/md0 started.
# cat /proc/mdstat
Personalities : raid1
md0 : active raid1 etherd/e1.21 etherd/e1.10
1023936 blocks 2/2 UU
>.................... resync = 4.2% (43648/1023936)
finish=1.8min speed=8729K/sec
Das Raid synchronisiert ganz nett übers Netz.
Fazit
Ich kann und muss mich einfach wiederholen, Linux rocks! So einfach so krasse Sachen zu implementieren, und das gratis notabene, ist cool! Viel Spass beim Ausprobieren.