Linux, network root filesystems

Autor: Markus Hochholdinger <Markus_at_Hochholdinger.net>
Datum: 23.12.2005
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.
------------------------------------------------------\ (----(   )-
                                                       \_)    ) /
                                                             (_/


Received on Fri Dec 23 17:51:16 2005

Dieses Archiv wurde generiert von hypermail 2.1.8.
Zurück zur UUGRN-Homepage.