Echtzeitdatenspiegelung unter Linux

ArticleCategory: [Choose a category for your article]

System Administration

AuthorImage:[Here we need a little image from you]

[Photo of the Author]

TranslationInfo:[Author and translation history]

original in en Atif Ghaffar 

en to de Katja Socher 

AboutTheAuthor:[A small biography about the author]

Atif ist ein Cham�leon. Er �ndert seine Rollen von Systemadministrator zu Programmierer, Lehrer, Projektmanager, zu was auch immer erforderlich ist, um die Arbeit getan zu kriegen.
Atif denkt, da� er Linux, der Open Source Gemeinde und Projekten, die seine Lehrer waren, viel schuldet.
Mehr �ber ihn kann auf seiner Homepage gefunden werden

Abstract:[Here you write a little summary]

In diesem Artikel zeigen wir eine M�glichkeit zur Echzeitdatenspiegelung unter Linux, ohne teure SANs (Storage Area Network, z.B. GFS) oder andere Netzwerk Block devices.
Wir werden FAM und IMON f�r unser Datenreplikation benutzen.
FAM (File Alteration Monitor) und IMON (Inode Monitor) wurden von SGI urspr�nglich f�r IRIX entwickelt.

Die Leute von SGI hatte eine sehr gute Idee als sie es nach Linux portierten und Open Source daraus machten.

Wenn Kosten keine Rolle spielen, w�rde ich GFS (Global File System) benutzen und eine SAN basierte L�sung, aber wenn die Kosten ein Faktor sind und Datenverteilung notwendig ist, bleibt mir nicht viel Auswahl offen
Ich habe einige wenige M�glichkeiten, unter denen ich w�hlen kann. In diesem Artikel diskutieren wir sie und sehen, was die Vor- und Nachteile sind.

ArticleIllustration:[This is the title picture for your article]

[Illustration]

ArticleBody:[The article body]

Warum Datenreplikation statt Verteilung ?

Sollten Fileserver nicht Daten f�r die Kunden verf�gbar machen?
Ja, das sollten sie.

Wenn wir einen Fileserver benutzen, der Dateien �ber NFS oder SMB etc. teilt, dann haben wir einen Flaschenhals und einen Single Point Of Failure (Einzelpunkt des Versagens).

Wenn wir Daten �ber GFS teilen mit geteilter Speicherung (SAN oder MultiChannel SCSI) haben wir einen Speicherkasten als einen Einzelpunkt des Versagens und es ist sehr teuer, so ein System mit dieser Konfiguration aufzusetzen.

Wir k�nnen NBD (Network Block Devices) benutzen, um einen Netzwerkspiegel aufzusetzen, aber ich f�hle mich nicht sehr wohl dabei. NBDs haben ihre Grenzen, sind schwierig aufzusetzen und zu verwalten und sind einfach zu viel Aufwand, wenn alles, was man braucht, ein paar replizierte Webserverdaten �ber einige wenige Webserver sind.

Halte es einfach

Okay, la�t uns versuchen, Daten zu replizieren.
Hier ist ein Szenario
Du hast zwei Webserver, einen als Hauptserver und den anderen als Backup.
Du machst alle �nderungen auf dem Masterrechner und rsync-st die �nderungen zum zweiten Rechner.
Einfach?
Aber wie automatisiert man das? Deine Benutzer werden FTP zum Masterrechner mehrere Male am Tag benutzen. Was passiert, wenn der Masterrechner versagt und der Backserver �bernimmt? Einfach. Ich habe die Antwort daf�r. Sie sehen die �nderungen nicht, die sie gemacht haben und sind dar�ber sehr ver�rgert. :)
Nun, du kannst "rsync -av --delete source destination" von CRON alle 5 Sekunden laufen lassen, aber dann ist dein Rechner nicht mehr wirklich zu etwas anderem zu gebrauchen, oder?


Hier ist ein weiteres Szenario
Du hast einen FTPserver, um die Daten darauf zu laden und sechs Webserver, die nach dem round robin Algorithmus darauf antworten.
Deshalb sollten die Daten auf jedem Rechner diesselben sein. Du kannst mit NFS f�r einige Zeit davon kommen, wenn du Gl�ck hast, aber nicht f�r lange.

Nun, was sollte getan werden?
Ich denke, die Antwort ist "kopiere die Daten zu den Webservern nur dann, wenn es �nderungen an den Dateien gegeben hat", und wenn es keine �nderungen an den Daten gibt, mache nichts.

Das ist genau das, was wir durch Benutzen von "fam" tun werden.

Halte es intelligent

So, wie wissen wir, da� es eine �nderung an den Dateien gibt?
Hier ist eine Antwort, die ich von einem M$ Windows Entwickler erwarten w�rde.
Wir k�nnen das Verzeichnis durchsuchen, das wir alle paar Sekunden beobachten und die Zeitstempel und Gr��e mit der Version, die wir im Cache haben, vergleichen.
Ja, richtig

Umfrage: Suchen nach Dateizeitstempeln/Gr��e und Vergleichen mit der �lteren Version ist teuer.
Stell dir vor, da� dein Rechner alle 5 Sekunden "ls -lR /somedirectory" auf deinem Webserver laufen l��t :)

Der elegante Weg w�re, da� die Datei uns mitteilt, wenn sie sich ge�ndert hat, so da� wir dann daraufhin handeln k�nnen.
Dies ist genau das, was "IMON" f�r uns macht.

Was ist FAM?

source: http://oss.sgi.com/projects/fam/faq.html
fam, der File Alteration Monitor, liefert ein API, das Applikationen benutzen k�nnen, um benachrichtigt zu werden, wenn bestimmte Dateien oder Verzeichnisse ge�ndert wurden.
FAM besteht aus zwei Teilen: fam, der Daemon, der auf Anfragen h�rt und Benachrichtigungen liefert und libfam, eine Bibliothek, die Clientapplikationen benutzen k�nnen, um mit FAM zu kommunizieren.
Wenn die beobachteten Dateien von einem remote host gemountet werden, wird der lokale fam versuchen, fam auf dem remote host zu kontaktieren und die Anfragen an den remote fam weiterzuleiten.
fam kann auch seine Clients benachrichtigen, wenn eine Datei eine Ausf�hrung beginnt und stoppt. (Der IRIX Interactive Desktop z.B. benutzt dies, um ein Programmicon zu �ndern, w�hrend es l�uft.)
fam wurde urspr�nglich 1989 von Bruce Karsh f�r IRIX geschrieben und 1995 von Bob Miller umgeschrieben. Dieser Open-Source Release von fam baut und l�uft sowohl auf Linux als auch auf IRIX, und ist derselbe fam, der mit IRIX 6.5.8. dabei ist.

Was ist IMON?

source: http://oss.sgi.com/projects/fam/faq.html
imon, der Inode Monitor, ist der Teil des Kernels, der fam sagt, wenn Dateien sich ge�ndert haben. Wenn Applikationen fam erz�hlen, da� sie an Dateien oder Verzeichnissen interessiert sind, leitet fam dieses Interesse an imon weiter. Wenn Dateioperationen auf Dateien, die von imon beobachtet werden, ausgef�hrt werden, erz�hlt es der Kernel imon; imon erz�hlt es fam und fam benachrichtigt die Anwendungen, die an den Dateien interessiert sind.
imon wurde urspr�nglich 1989 von Wiltse Carpenter f�r den IRIX Kernel geschrieben; die Linuxportierung wurde von Roger Chickering gemacht. Die Linuximplementation im imon Kernelpatch ist �berwiegend �hnlich zur IRIXimplementation, aber sie hakt sich anders im Kerneldateisystem fest.

Installieren von FAM und IMON

FAM und IMON sind beide auf der SGI Webseite verf�gbar. Sieh die Ressourcen unten.
IMON ist ein Patch, den du auf deinen Kernel anwenden kannst. Dies f�gt M�glichkeiten f�r deinen Kernel hinzu, Inodes zu beobachten.
Um den Kernel zu patchen, cd zu deinem Kernelquellverzeichnis und wende den Patch an
cd /usr/src/linux
patch -pi < patchfile

dann la� make config oder make menuconfig laufen und w�hle, wenn du danach gefragt wirst
Inode Monitor (imon) support (EXPERIMENTAL)
Im Dateisystemabschnitt
kompilierst du den Kernel ganz normal und rebootest (tut mir leid).
FAM selbst zu kompilieren ist ganz einfach.
cd zum fam Quellenverzeichnis und la�
./configure && make all install
laufen Voila, es ist installiert.

Als n�chstes installieren wir ein Perlmodul namens SGI::FAM, damit wir unseren event handler in Perl schreiben k�nnen.

Installieren des SGI::FAM Perl Moduls

Du dachtest nicht wirklich, da� ich dich fragen w�rde, in C/C++ zu programmieren. Oder?
Nun, ich wei� nichts �ber dich, aber ich bin zu faul und ungeduldig, deshalb schreibe ich meinen Datenreplizierer in Perl.

Lade es herunter und installiere SGI::FAM von Jesse N. Glick
Um diese Module zu installieren, la� einfach das CPAN Modul laufen
perl -MCPAN -e shell
install SGI::FAM
dies sollte SGI::FAM installieren und alle n�tigen Module.

Replizieren/Spiegeln mit fam_mirror

fam_mirror ist ein Skript, das ich geschrieben habe, um die Replizierung zu automatisieren.
Du kannst es hier anschauen oder herunterladen.
Du kannst es editieren und
$replicaHosts ver�ndern, so da� es zu deinen hosts pa�t,
$rsh �ndern, mit was auch immer f�r einem Befehl, den du von einer Maschine zur anderen laufen lassen kannst und dasselbe gilt f�r $rsync.

So, zur�ck zu Szenario 1
2 Rechner laufen als Webserver (web1, web2). 1 von ihnen als Master (web1) und der andere als Slave (web2).
Prim�rer FTPserver ist (web1).
web2 hat �berhaupt keinen FTPdienst laufen. (sonst w�rden die Benutzer vielleicht versuchen, auf Daten zu schreiben, sogar, wenn das System im Backupmode ist)

Das web-dokument root ist auf beiden Rechnern /var/www
setup rsh oder ssh. web2 sollte web1 erlauben, remote Befehle laufen zu lassen, ohne Pa�wortabfrage. Ich f�ge normalerweise meinen ssh_key zu den autorisierten Schl�sseln des replica Hosts hinzu.
rsync alle Daten von web1 nach web2
rsync -avz /var/www/ web2:/var/www/
Editiere fam_mirror und �ndere @replicaHosts in
@replicaHosts=qw(web2)
La� fam_mirror auf web1 laufen.
fam_mirror /var/www &
und ver�ndere dann die Dateien auf web1. Alle �nderungen werden auch auf web2 geschrieben.

Jetzt zu Szenario 2 (Eine Farm von Webservern)
Hosts "linuxweb1", "linuxweb2", "linuxweb3" und "linuxweb4" laufen als Webserver
Host "linuxftp1" l�uft als ftp server (Hauptfileserver)
Webhosts erlauben den Benutzern kein FTP.
Installiere fam, imon, SGI::FAM und fam_mirror auf host "linuxftp1"
Setze rsh oder ssh zwischen den Rechnern auf.
hosts linuxweb[1-4] sollte linuxftp1 remote Befehle ohne sofortige Nachfrage nach dem Pa�wort erlauben.
Editiere fam_mirror und setze @replicaHosts zu
@replicaHosts=qw(linuxweb1 linuxweb2 linuxweb3 linuxweb4);
�ndere $rsh und $rsync, wenn n�tig. Angenommen, da� das webdokument root auf allen Rechnern /var/www ist.
La� auf linuxftp1
INIT_MIRROR=1 fam_mirror /var/www & laufen

Jetzt sollten alle �nderungen auf linuxftp1 auch auf linuxweb[1-4]sichtbar sein.

Ressourcen

Bekannte Probleme

Ich fand, da� die L�sung, die ich hier dargestellt habe, ein kleines Problem hat: Sie arbeitet tats�chlich nicht mit gro�en Verzeichnissen (ein Verzeichnis mit 4000-5000 Unterverzeichnissen). Der Kernel beschwert sich �ber kmalloc etc.
Ich versuche, es zu l�sen. Wenn ich es gel�st habe, werde ich die Information zu dem Artikel hinzuf�gen.
La� es mich wissen, wenn du schon eine L�sung f�r dieses Problem kennst.