[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Linux, network root filesystems


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 waere:
Die virtuellen Server haben ihr root-Dateisystem uebers Netzwerk auf Server1 
und Server2 (redundant). Das root-Dateisystem ist unabhaengig von Hardware1 
oder Hardware2. Dadurch haette man bei einem Ausfall von Server1 oder Server2 
kein Problem und koennte gleichzeitig eine Live-Migration von Hardware1 auf 
Hardware2 machen.
Wenn eine Hardware "abstuerzt" sind natuerlich auch alle virtuellen Server 
darauf beendet, koennten aber sehr einfach und "schnell" (automatisch) auf 
Hardware2 gestartet werden.


Ansaetze:

1. nfs
 Als erstes trifft man natuerlich auf nfs wenn man ein root-Dateisystem uebers
 Netzwerk haben will.
  * Nachteil(e)
    - Keine echte Redundanz. Wenn Server1 ausfaellt bleibt der virtuelle
      Server stehen bis Server1 wieder per nfs erreichbar ist.
    - nfs hat (anscheinend) Probleme bei einer hohen Last.
    - Performance ist ueber nfs nicht so gut.
    - Nicht jedes Dateisystem Feature wird von nfs unterstuetzt.
  * Vorteil(e)
    - Live-Migration moeglich.
    - Ein virtueller Server kann mit root-Dateisystem auf Server2 schnell
      gestartet werden, wenn Server1 ausfaellt.
    - nfs kann so ziemlich jeder Linux-Lernel von Haus aus.
    - Keine Festlegung des verfuegbaren Platzes notwendig (Partitionierung).

2. nbd bzw. gnbd
 Als naechstes trifft man haeufig auf die network block devices oder global
 network block devices. Dabei habe ich keine Moeglichkeit 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 moeglich.
    - Die Groesse eines nbd muss entweder ueber 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 unterstuetzt.
    - Das Dateisystem kann vom virtuellen Server selbst verwaltet (erstellt)
      werden und damit sind alle Dateisystem Features moeglich die man
      benoetigt.

3. iSCSI
 Habe ich noch nicht genauer angeschaut. Sieht aber vielversprechend aus. Hat
 hier jemand Erfahrung damit?
  * Nachteil(e)
    - iSCSI-Server mit Linux moeglich!? Hab dazu nichts gefunden! Sprich man
      wuerde eine (teure) Storage-Loesung benoetigen!?
    - Benoetigt evtl. Kernal-Anpassungen und vor allem eine initrd die man
      entsprechend anpassen muss. Aeltere Linux-Systeme laufen evtl. damit
      nicht.
  * Vorteil(e)
    - Server1 und Server2 koennen parallel jeweils ein iSCSI device bereit
      stellen welche dann als RAID1 genutzt werden.
    - Live-Migration moeglich.
    - Das Dateisystem kann vom virtuellen Server selbst verwaltet (erstellt)
      werden und damit sind alle Dateisystem Features moeglich die man
      benoetigt.

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)
    - Benoetigt Kernel-Modifikationen. Aeltere Linux-Systeme laufen evtl. damit
      nicht.
    - Alle Systeme nutzen "dasselbe" gfs. Schweinereien mit symbolischen Links
      fuer die einzelnen Server sind moeglich.
    - Kompliziert (!?) aufzusetzen.
  * Vorteil(e)
    - root Dateisystem auf gfs moeglich.
    - Live-Migration moeglich!?
    - Ausfallsicherheit mit Multipath zu Server1 und Server2!?

Mehr wirklich nutzbare Moeglichkeiten habe ich nicht gefunden. Kennt ihr noch 
welche?

Persoenlich finde ich den nfs-Ansatz am einfachsten umzusetzen. Gibt es 
Moeglichkeiten nfs auf Ausfallsicherheit zu clustern, sprich dass auch offene 
nfs-Dateien vom Fallback-Server uebernommen werden koennen? Bei nfs ist es auch 
sehr unproblematisch aeltere Linux-Installationen zu uebernehmen. 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 schoen oefters gesehen). Ausserdem hat man mit nfs 
nicht alle "Dateisystem-Features" wie EA und ACL.

Auch sehr gut finde ich den nbd bzw. gnbd Ansatz. Den wuerde ich sehr gerne 
umsetzen wenn ich ein Moeglichkeit 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 aeltere Linux-Installationen zu uebernehmen.

Ich glaube das ganze wird ein Abwaegen was man wirklich braucht und was nur 
"nice to have" waere.
Informationen oder Erfahrungen von euch wuerden 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. Ausserdem steht evtl. ein groeÃ?eres 
Projekt mit VMWare GSX Server an. Damit werde ich hoffentlich ein paar gute 
Erfahrungen (und Vergleiche) mit all diesen Virtualisierungs-Loesungen 
bekommen.


¹ Das Netzwerk sollte natuerlich physikalisch getrennt sein, zur einfacheren 
Darstellung hier aber global als "Netzwerk" definiert. Protokoll sollte IP 
sein.


-- 
Gruss
                                                          \|/
       eMHa                                              (o o)
------------------------------------------------------oOO--U--OOo--
 Markus Hochholdinger
 e-mail  mailto:Markus@xxxxxxxxxxxxxxxxx             .oooO
 www     http://www.hochholdinger.net                (   )   Oooo.
------------------------------------------------------\ (----(   )-
                                                       \_)    ) /
                                                             (_/