Benutzer:Mdbw/LustreFS

Aus Opennet
< Benutzer:Mdbw
Version vom 5. Februar 2009, 10:36 Uhr von Mdbw (Diskussion | Beiträge)

(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Wechseln zu: Navigation, Suche

LustreFS ist ein Clusterfilesystem für Linux. Wurde von der Firma Cluster File Systems entwickelt die 2007 von Sun gekauft wurde. Die Daten eines LustreFS liegen auf einer oder mehreren Rechnern. Der Datendurchsatz ergibt sich daher aus dem Durchsatz alles Notes über die eine Datei verteilt wurde. Der Durchsatz kann bei mehreren GB/s liegen.


Inhaltsverzeichnis


Lustre verteilt die Metadaten auf einem Server (MDS=Meta Data Server) hier ist ein active/passiv Cluster möglich. Die Objektdaten können per Stripping auf mehrere Server (OSS=Objekt Storage Server) verteilt werden.

Fällt ein OSS aus sind die auf ihm gespeicherten Daten nicht verfügbar. Benötigt man hier Redundanz muß man aus zwei OSS jeweils auch wieder ein active/active oder active/passiv Cluster machen. Entweder mit einem Shared-Storage oder mit einer Lösung wie DRBD. Ein natives RAID1/5 der Objektdaten ist in Planung.

Als Backend verwendet Lustre ein leicht angepasstes ext3 (ext4?) Dateisystem das auch direkt als ext3 gemountet werden kann. Hier finden sich dann Dateien mit Nummern als Namen (die Objekt-ID's).

LustreFS ist besonders für folgende Anwendungen sinnvoll:

  • Es wird besonders hoher Datendurchsatz benötigt
  • Das Filesystem ist sehr groß oder wächst schnell oder es müssen sehr große Dateien gespeichert werden (maximale Größe einer Datei ist 1.48 PByte)

Anforderungen / Empfehlungen

  • OSS Backend Storage Raid 6
  • MDS Backend Storage Raid 10 (Empfohlen Linux MD Raid1 und darauf ein Stripe mit LVM. Weiterhin Kernel größer 2.6.15 mit bitmap RAID rebuild features)
  • OSS Memory min. 3GB
  • MDS Memory min. 4GB

Siehe auch Lustre Manual

Installation

Die Lustre Pakete finden sich aktuell in Debian Lenny. Die Patches in linux-patch-lustre sind nur für Kernel 2.6.12, 2.6.18 oder 2.6.22. Kernel 2.6.18 (oder wohl auch darunter) kann man nicht mehr mit gcc 4.3.x kompilieren (Optimierungsprobleme). Unter Lenny steht nur gcc 4.3.2 zu Verführung. Also muß man das Lenny Paket unter etch kompilieren. Kernel 2.6.22.5 habe ich als Vanilla Version zusammen mit den Debian Patches erfolgreich unter etch kompiliert.

Auf einem Debian etch System mit gcc kleiner 4.3 installiert man die Lenny Sources.

deb http://mirror.scl.ameslab.gov/debian/ etch main non-free contrib
deb-src http://mirror.scl.ameslab.gov/debian/ lenny main contrib non-free

Beispiel:

wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.22.5.tar.bz2
tar xjf linux-2.6.22.5.tar.bz2
cp config-2.6.18-4-686 linux-2.6.22.5/.config
cd linux-2.6.22.5
make oldconfig
make menuconfig # scsi einkommentiert (optional)
make-kpkg --rootcmd fakeroot --added-patches=lustre --append-to-version "-lustre-1.6.5.1" --revision=20090130  kernel_image

Nun gibt es weitere Probleme. Zu dem Kernel braucht man nun noch die Lustre Kernel Module. Um die Module zu bauen braucht man das Programm dh_lintian aus dem Paket debhelper das erst in Lenny verfügbar ist. Also muß man den Kernel Source-Tree wieder zurück auf einen Lenny System kopieren und dort das Kernel Modul bauen.

tar tjf lustre.tar.bz2
cd modules/lustre
m-a a-i lustre

Danach ist das Modul-Paket schon installiert und man kann das Modul mit modprobe lustre laden.

Konfiguration

Quick

Server

echo "options lnet networks=tcp0" >> /etc/modprobe.d/aliases
modprobe lnet
lctl network up

Nun ist das Netz konfiguriert und lctl list_nids sollte sowas ähnliches wie 192.168.0.191@tcp ausgeben.

lenny:~# dmesg|grep Lustre
Lustre: Added LNI 192.168.0.191@tcp [8/256]
Lustre: Accept secure, port 988

Das LNET stoppen und die Module entladen geht folgendermaßen.

lctl network unconfigure
lctl modules | awk '{print $2}' | xargs rmmod

Nun legen wir ein MDT MGS sowie ein OST auf dem gleichen Host an.

mkfs.ext2 /dev/sdb
mkfs.lustre --mdt --mgs --fsname=large-fs /dev/sdb
mount -t lustre /dev/sdb /mnt/mdt
mkfs.ext2 /dev/sdc
mkfs.lustre --ost --fsname=large-fs --mgsnode=lenny@tcp0 /dev/sdc
mount -t lustre /dev/sdc /mnt/ost1

Client

Das Filesystem können wir nun auf einem Client mounten. Es wird nicht empfohlen den Client und den Server auf dem gleichen Host zu beteiben. Es funktioniert kann aber zu Problemen führen.

lenny:~# lctl list_nids
192.168.0.191@tcp
lenny:~# mount -t lustre 192.168.0.191@tcp:/large-fs /mnt/testfs
lenny:~# df -h
Dateisystem          GröÃe Benut  Verf Ben% Eingehängt auf
[some more]
192.168.0.191@tcp:/large-fs
                     1008M   34M  924M   4% /mnt/testfs

Maintenance

Speicherplatz anzeigen

lenny:~# lfs df -h
UUID                     bytes      Used Available  Use% Mounted on
large-fs-MDT0000_UUID    895.9M     44.7M    800.0M    4% /mnt/testfs[MDT:0]
large-fs-OST0000_UUID   1007.9M    302.2M    654.4M   29% /mnt/testfs[OST:0]

filesystem summary:    1007.9M    302.2M    654.4M   29% /mnt/testfs

Speicher erweitern

Man kann den Speicher sehr einfach erweitern in dem man weitere OST's hinzufügt.

mkfs.ext2 /dev/sdd
mkfs.lustre --fsname=large-fs --ost --mgsnode=lenny@tcp0 /dev/sdd
mkdir /mnt/ost2
mount -t lustre /dev/sdd /mnt/ost2

Danach steht der Speicher sofort auf dem Client zu Verfügung.

lenny:~# lfs df -h
UUID                     bytes      Used Available  Use% Mounted on
large-fs-MDT0000_UUID    895.9M     44.7M    800.0M    4% /mnt/testfs[MDT:0]
large-fs-OST0000_UUID   1007.9M    302.2M    654.4M   29% /mnt/testfs[OST:0]
large-fs-OST0001_UUID   1007.9M     33.5M    923.2M    3% /mnt/testfs[OST:1]

filesystem summary:       2.0G    335.7M      1.5G   16% /mnt/testfs

Ausfall eines OST

Wenn ein OST ausfällt friert das Dateisystem bzw. alle Zugriff darauf ein. Nach dem die Verbindung zu dem OST wieder hergestellt ist verbinden sich die Clients wieder mit dem ausgefallenen OST und beenden die angefangenen Dateioperationen.

Aushängen eines OST um einen Ausfall zu simulieren:

OSS2:~# umount /mnt/ost3

Daraufhin versucht der Client der Verbindung wieder aufzubauen. Ein der weile laufender cp hält an.

lustre:~# cat /proc/fs/lustre/osc/*/ost_server_uuid 
large-fs-OST0000_UUID   FULL
large-fs-OST0001_UUID   FULL
large-fs-OST0002_UUID   CONNECTING

lustre:~# lfs df -h
UUID                     bytes      Used Available  Use% Mounted on
large-fs-MDT0000_UUID    895.9M     35.9M    808.8M    4% /mnt/testfs[MDT:0]
large-fs-OST0000_UUID   1007.9M     65.6M    891.1M    6% /mnt/testfs[OST:0]
large-fs-OST0001_UUID   1007.9M     71.1M    885.5M    7% /mnt/testfs[OST:1]

filesystem summary:       2.0G    136.7M      1.7G    6% /mnt/testfs

Nach einem Remount des OST findet der Client das OST nach ein paar Sekunden wieder und beendet den angehaltenen cp Prozess.

lustre:~# cat /proc/fs/lustre/osc/*/ost_server_uuid 
large-fs-OST0000_UUID   FULL
large-fs-OST0001_UUID   FULL
large-fs-OST0002_UUID   FULL

Speicher reduzieren

Um den Speicher zu reduzieren bzw ein OST zu entfernen (weil ein Server z.B. ausgemustert werden soll) wird das Target auf dem MDS als Readonly markiert. Nun ermittelt man die Files die auf dem zu entfernenden OST gespeichert sind und kopiert diese an eine andere Stelle. Dabei werden sie von dem als Readonly markierten OST entfernt.

  • OST auf dem MGS deaktivieren
lenny:~# lctl device_list
  0 UP mgs MGS MGS 9
  1 UP mgc MGC192.168.0.191@tcp 28829736-ae29-b0e7-f4b7-0e78e5bb5202 5
  2 UP mdt MDS MDS_uuid 3
  3 UP lov large-fs-mdtlov large-fs-mdtlov_UUID 4
  4 UP mds large-fs-MDT0000 large-fs-MDT0000_UUID 5
  5 UP osc large-fs-OST0000-osc large-fs-mdtlov_UUID 5
  6 UP osc large-fs-OST0001-osc large-fs-mdtlov_UUID 5
  7 UP ost OSS OSS_uuid 3
  8 UP obdfilter large-fs-OST0000 large-fs-OST0000_UUID 7
  9 UP obdfilter large-fs-OST0001 large-fs-OST0001_UUID 7
 10 UP osc large-fs-OST0002-osc large-fs-mdtlov_UUID 5
lenny:~# lctl --device 10 deactivate
lenny:~# cat /proc/fs/lustre/osc/*/ost_server_uuid
large-fs-OST0000_UUID   FULL
large-fs-OST0001_UUID   FULL
large-fs-OST0002_UUID   FULL    DEACTIVATED
  • Auf einem Client kann man sich nun eine Liste mit den Files erstellen die auf dem OST gespeichert sind.
lfs find --obd large-fs-OST0002_UUID /mnt/testfs/
  • Diese Liste kopiert man nun um die Daten von dem deaktivierten OST auf die anderen zu übertragen (am besten per Script)
mv /mnt/testfs/test-daten /mnt/testfs/test-daten.tmp
cp /mnt/testfs/test-daten.tmp /mnt/testfs/test-daten
rm -r /mnt/testfs/test-daten.tmp
  • Während des kopierens sieht man wie der belegte Speicher auf den noch aktiven OST's zu nimmt. Nach dem löschen der alten Daten sollte der belegte Speicher auf der zu entfernenden OST nahe null sein. Das wirklich keine Files mehr dort gespeichert sind überprüfen wir mit einem erneuten Find.
lustre:~# lfs df -h
UUID                     bytes      Used Available  Use% Mounted on
large-fs-MDT0000_UUID    895.9M     49.3M    795.4M    5% /mnt/testfs[MDT:0]
large-fs-OST0000_UUID   1007.9M    241.6M    715.0M   23% /mnt/testfs[OST:0]
large-fs-OST0001_UUID   1007.9M    236.6M    720.0M   23% /mnt/testfs[OST:1]
large-fs-OST0002_UUID   1007.9M     34.0M    922.6M    3% /mnt/testfs[OST:2]

filesystem summary:       3.0G    512.2M      2.3G   16% /mnt/testfs

lustre:~# lfs find --obd large-fs-OST0002_UUID /mnt/testfs/
  • Nun können wir das OST auch auf den Clients deaktivieren und gefahrlos abschalten.
lustre:/mnt/testfs# lctl device_list
  0 UP mgc MGC192.168.0.191@tcp f5499735-0871-711c-f11b-0e01bc8ee056 5
  1 UP lov large-fs-clilov-de4b3e00 1ee20432-23c5-fde6-e65d-287c42363a68 4
  2 UP mdc large-fs-MDT0000-mdc-de4b3e00 1ee20432-23c5-fde6-e65d-287c42363a68 5
  3 UP osc large-fs-OST0000-osc-de4b3e00 1ee20432-23c5-fde6-e65d-287c42363a68 5
  4 UP osc large-fs-OST0001-osc-de4b3e00 1ee20432-23c5-fde6-e65d-287c42363a68 5
  5 IN osc large-fs-OST0002-osc-de4b3e00 1ee20432-23c5-fde6-e65d-287c42363a68 5

lustre:/mnt/testfs# lctl --device 5 deactivate

lustre:/mnt/testfs# lfs df -h
UUID                     bytes      Used Available  Use% Mounted on
large-fs-MDT0000_UUID    895.9M     49.3M    795.4M    5% /mnt/testfs[MDT:0]
large-fs-OST0000_UUID   1007.9M    241.6M    714.0M   23% /mnt/testfs[OST:0]
large-fs-OST0001_UUID   1007.9M    236.1M    719.5M   23% /mnt/testfs[OST:1]
large-fs-OST0002_UUID: inactive device

filesystem summary:       2.0G    477.8M      1.4G   23% /mnt/testfs

Siehe auch

  • GlusterFS ist möglicherweise eine Alternative
Meine Werkzeuge
Namensräume

Varianten
Aktionen
Start
Opennet
Kommunikation
Karten
Werkzeuge