Hallo,
ich bin gerade dabei zu evaluieren was die "beste" Methode ist bei einem
Linux-System das root Dateisystem im Netzwerk zu lagern. Und am besten noch
redundant. Hintergrund ist auch die Verwendung in Verbindung mit
Virtualisierung. Dabei spielt auch der Punkt Live-Migration (siehe Xen) eine
Rolle.
Prinzipiell verfolge ich den Ansatz Festplatten von der CPU zu trennen. Dabei
habe ich mindestens zwei Festplatten-Server (Redundanz). Und ein oder mehrere
Hardware, wo virtuelle Maschinen darauf laufen. Als Skizze:
----------------- -----------------
|Server1 | <-sync-> | Server2 |
| Festplatte(n) | | Festplatte(n) |
----------------- -----------------
| |
----------------------------------------- Netzwerk ¹
| |
----------------------- -----------------------
|Hardware1 | |Hardware1 |
| Virtueller Server1 | | Virtueller Server4 |
| Virtueller Server2 | | Virtueller Server5 |
| Virtueller Server3 | | Virtueller Server6 |
----------------------- -----------------------
Optimal wäre:
Die virtuellen Server haben ihr root-Dateisystem übers Netzwerk auf Server1
und Server2 (redundant). Das root-Dateisystem ist unabhängig von Hardware1
oder Hardware2. Dadurch hätte man bei einem Ausfall von Server1 oder Server2
kein Problem und könnte gleichzeitig eine Live-Migration von Hardware1 auf
Hardware2 machen.
Wenn eine Hardware "abstürzt" sind natürlich auch alle virtuellen Server
darauf beendet, könnten aber sehr einfach und "schnell" (automatisch) auf
Hardware2 gestartet werden.
Ansätze:
1. nfs
Als erstes trifft man natürlich auf nfs wenn man ein root-Dateisystem übers
Netzwerk haben will.
* Nachteil(e)
- Keine echte Redundanz. Wenn Server1 ausfällt bleibt der virtuelle
Server stehen bis Server1 wieder per nfs erreichbar ist.
- nfs hat (anscheinend) Probleme bei einer hohen Last.
- Performance ist über nfs nicht so gut.
- Nicht jedes Dateisystem Feature wird von nfs unterstützt.
* Vorteil(e)
- Live-Migration möglich.
- Ein virtueller Server kann mit root-Dateisystem auf Server2 schnell
gestartet werden, wenn Server1 ausfällt.
- nfs kann so ziemlich jeder Linux-Lernel von Haus aus.
- Keine Festlegung des verfügbaren Platzes notwendig (Partitionierung).
2. nbd bzw. gnbd
Als nächstes trifft man häufig auf die network block devices oder global
network block devices. Dabei habe ich keine Möglichkeit gefunden ein nbd
schon beim Booten einzubinden (vielleicht kann mich hier jemand eines
besseren belehren?). Deswegen:
* Nachteil(e)
- Ein block device aus nbd(s) muss auf Hardware1 oder Hardware2 erst
konfiguriert werden und ist damit an die Hardware gebunden.
- Deswegen keine Live-Migration möglich.
- Die Größe eines nbd muss entweder über Partitonieren festgelegt werden
oder als Datei (langsamer) freigegeben werden. Ja, man kann dies auch
mit dem LVM abdecken. Hat dann aber immer ein gefummele wenn man
Festplattenplatz neu zuordnen will.
* Vorteil(e)
- Jeweils ein nbd von Server1 und Server2 kann zu einem RAID1
zusammengebaut werden. Ausfallsicherheit wenn Server1 oder Server2
abraucht.
- Performance ist gut.
- nbd wird von so gut wie jedem Linux-Kernel unterstützt.
- Das Dateisystem kann vom virtuellen Server selbst verwaltet (erstellt)
werden und damit sind alle Dateisystem Features möglich die man
benötigt.
3. iSCSI
Habe ich noch nicht genauer angeschaut. Sieht aber vielversprechend aus. Hat
hier jemand Erfahrung damit?
* Nachteil(e)
- iSCSI-Server mit Linux möglich!? Hab dazu nichts gefunden! Sprich man
würde eine (teure) Storage-Lösung benötigen!?
- Benötigt evtl. Kernal-Anpassungen und vor allem eine initrd die man
entsprechend anpassen muss. Ältere Linux-Systeme laufen evtl. damit
nicht.
* Vorteil(e)
- Server1 und Server2 können parallel jeweils ein iSCSI device bereit
stellen welche dann als RAID1 genutzt werden.
- Live-Migration möglich.
- Das Dateisystem kann vom virtuellen Server selbst verwaltet (erstellt)
werden und damit sind alle Dateisystem Features möglich die man
benötigt.
4. gfs (global filesystem), impliziert eine Form der Nutzung von gnbd
Das hier habe ich noch nicht ganz verstanden. Evtl. kann mir auch hier jemand
weiter helfen?
* Nachteil(e)
- Benötigt Kernel-Modifikationen. Ältere Linux-Systeme laufen evtl. damit
nicht.
- Alle Systeme nutzen "dasselbe" gfs. Schweinereien mit symbolischen Links
für die einzelnen Server sind möglich.
- Kompliziert (!?) aufzusetzen.
* Vorteil(e)
- root Dateisystem auf gfs möglich.
- Live-Migration möglich!?
- Ausfallsicherheit mit Multipath zu Server1 und Server2!?
Mehr wirklich nutzbare Möglichkeiten habe ich nicht gefunden. Kennt ihr noch
welche?
Persönlich finde ich den nfs-Ansatz am einfachsten umzusetzen. Gibt es
Möglichkeiten nfs auf Ausfallsicherheit zu clustern, sprich dass auch offene
nfs-Dateien vom Fallback-Server übernommen werden können? Bei nfs ist es auch
sehr unproblematisch ältere Linux-Installationen zu übernehmen. Allerdings
hat nfs doch hier und da Probleme. Anscheinend Probleme bei hoher Last
(konnte ich selbst aber noch nicht nachvollziehen) und Probleme mit dem file
locking (das habe ich jetzt schön öfters gesehen). Außerdem hat man mit nfs
nicht alle "Dateisystem-Features" wie EA und ACL.
Auch sehr gut finde ich den nbd bzw. gnbd Ansatz. Den würde ich sehr gerne
umsetzen wenn ich ein Möglichkeit finde das nbd innerhalb der virtuellen
Server aufzusetzen und nicht schon auf dem Host-system (Hardware). Hm, evtl.
kommt man hier mit einer angepassten initrd weiter? Aber dann wird es wieder
schwierig ältere Linux-Installationen zu übernehmen.
Ich glaube das ganze wird ein Abwägen was man wirklich braucht und was nur
"nice to have" wäre.
Informationen oder Erfahrungen von euch würden mich brennend interessieren.
PS: Ich habe nun als Virtualisierung UML (user mode linux) schon ca. ein
halbes Jahr erfolgreich im Einsatz (allerdings schlechte I/O Performance) und
beginne nun mit Xen 3.0 zu experimentieren. Außerdem steht evtl. ein größeres
Projekt mit VMWare GSX Server an. Damit werde ich hoffentlich ein paar gute
Erfahrungen (und Vergleiche) mit all diesen Virtualisierungs-Lösungen
bekommen.
¹ Das Netzwerk sollte natürlich physikalisch getrennt sein, zur einfacheren
Darstellung hier aber global als "Netzwerk" definiert. Protokoll sollte IP
sein.
--
Gruß
\|/
eMHa (o o)
------------------------------------------------------oOO--U--OOo--
Markus Hochholdinger
e-mail mailto:Markus@Hochholdinger.net .oooO
www http://www.hochholdinger.net ( ) Oooo.
------------------------------------------------------\ (----( )-
\_) ) /
(_/
- application/pgp-signature Anhang: stored
Received on Fri Dec 23 17:51:16 2005