Re: Verwendet jemand GlusterFS?
Hi,
ich habe erst heute ein neues Server-Paar freigeschaltet wo ich nun
GlusterFS nutze. Längere Langzeit aussagen kann ich also erst später
geben, aber GlusterFS haben Vor/Nachteile. Da ich momentan wenig Zeit
habe möchte ich da erstmal nicht ganz drauf eingehen.
Ich selber verwende GlusterFS sozusagen im Raid-1 betrieb. Daher zwei
Server mit Shared Storage.
> Nun, um den Diskspace effizienter zu nutzen, würde ich lieber meinen
> neuen Sun Storage Server mit sowas wie GlusterFS laufen lassen, nur habe
> ich ein kleines Problem, wie ich das konfigurieren soll...
>
> Kann mir da jemand auf die Sprünge helfen?
Ich habe in meiner Firma intern im Wiki ein kleines Tutorial geschirben,
ich habe dir das einmal als Datei angehangen. Dies ist zwar
mit Wiki Syntax, sollte aber trotzdem verständlich sein.
> Ich gehe mal davon aus, das ich Kernel 3.0 installieren muß um GlusterFS
> 2.0 zu bekommen oder kann ich davon ausgehen, GlusterFS 3.22 selber
> einzukompilieren?
Nein, musst du nicht. Du musst generell dein Linux Kernel nicht updaten.
GlusterFS baut auf Fuse auf, daher musst du lediglich Fuse installiert
haben.
In Debian Squeeze ist aber bereits GlusterFS 3.0.5 enthalten. Wenn man
lediglich ein RAID-1 aufsetzt halte ich das für ausreichend und würde
die mitgelieferte Version in Debian Squeeze nutzen. Es ist zumindest
empfohlen eine 3.x Variante zu nutzen. Aus einigen Blogs wird berichtet
das 2.x oft noch verbindungsabbrüche hatte.
GlusterFS 3.2 sollte wohl ohne Probleme direkt auf Squeeze kompilierbar
sein. Eventuell mit "apt-get build-dep glusterfs-server" nötige Dev
Packete installieren.
Ich habs aber nicht ausprobiert. GlusterFS 3.2 hat eine CLI und bietet
Support im rebalancing. Wenn du mehr planst als nur ein RAID-1
aufzusetzen eher ein RAID-10 oder andere komplexe setups würde ich zur
neuen Version gehen.
Ansonsten bekommst du aber auch schon fertige Debian GLusterFS Packete
direkt von GlusterFS.
http://download.gluster.com/pub/gluster/glusterfs/3.2/LATEST/Debian/
{{>toc}}
h1. Glusterfs
Dokumentation zu GlusterFS. Es wird die Version in Debian Squezze genutzt. Dies ist: 3.0.5
h1. Installation
*aptitude install glusterfs-client glusterfs-server*
h1. Server Konfiguration
Mit dem Kommando *glusterfs-volgen* werden Konfigurationsdateien erzeugt die zu jedem Server/Client kopiert werden muss.
Wenn man das Verzeichniss "/www" als RAID1 spiegeln möchte über zwei Hosts *host01* und *host02* so muss man folgendes eingeben:
*glusterfs-volgen -n www -r 1 host01:/www host02:/www*
Bei der angabe der Server sollte eine IP/DNS Namen ausgewählt werden der von allen Clients aufgelöst werden kann.
Im gleichen Verzeichnis werden daraufhin entsprechende "*.vol" Dateien erzeugt. In diesem beispiel werden drei erzeugt. Einmal jeweils eine Konfigurationsdatei
für jeden Server, und weiterhin eine Konfigurationsdateien für alle Clients. Die Dateien für den Server muss man unter */etc/glusterfsd.vol* abspeichern.
Danach muss man mit */etc/init.d/glusterfs-server restart* den GlusterFS Daemon neu starten.
Zu beachten sind folgende Punkte:
* Das Replizieren macht der Client, daher wenn man nun in /www direkt auf dem Server etwas ändert hat der Slave diese änderung nicht
* Soll der eigentliche Server auf dem eine replizierung gemacht wird ebenfalls auf die daten zugreifen muss der Server den Client einrichten und nicht direkt auf das verzeichnis zugreifen.
* Es wird einfach ein Verzeichnis geshared, das Verzeichniss kann ruhig schon daten enthalten.
* Replizierung wird immer nur dann gemacht wenn man ein Verzeichnisinhalt abruft. Sollten die server auser sync sein muss man am besten ein "find" kommando laufen lassen
h1. Client konfiguration
Bei der einrichtung des Servers wurde ebenfalls eine Datei für die Clients konfiguriert. Diese Datei kopiert man nun auf den Client Rechner als */etc/glusterfs/glusterfs.vol*. Hiernach
editiert man die */etc/fstab* und trägt dort folgende Zeile ein.
/etc/glusterfs/glusterfs.vol /var/www glusterfs defaults 0 0
Diese Zeile bewirkt das das GlusterFS Verzeichnis unter /var/www gemountet wird.
h2. Authentifizierung
Grundsätzlich soll nicht jeder im inernet zugriff auf den Speicher haben, daher benötigen wir eine authentifizierung. Hierbei gibt es zwei Möglichkeiten. IP bassiert und username/password basiert.
Weiterhin müssen alle Server die korrekten Rechte in ihrer Konfiguration abdecken. Sollte Server X den Zugriff von Host A erlauben und Server Y nicht, so kann Host A trotzdem auf das Verzeichnis
zugreifen. Host A wird dann allerdings nur mit Server X kommunzieren. Daten die gespeichert/gelöscht werden, werden trotzdem korrekt zwischen Server X und Y repliziert.
h3. IP basierte Authentizierung
Standardmä�ig findet man in der Server Datei folgenden abschnitt.
volume server-tcp
type protocol/server
option transport-type tcp
option auth.addr.brick1.allow *
option transport.socket.listen-port 6996
option transport.socket.nodelay on
subvolumes brick1
end-volume
Interessant ist hier die Zeile *option auth.addr.brick1.allow ** Diese Zeile erlaubt den Zugriff von überall aus. Möchte man den Zugriff auf bestimmte IP Adressen festlegen kann man anstatt des Sternes die IP-Adressen mit Komma getrennt angeben.
option auth.addr.brick1.allow 127.0.0.1,46.4.1.133,46.4.115.143
h3. Benutzerbasierte Authentifizierung
Auf dem Server muss im *protocol/server* Abschnitt folgendes hinzugefügt werden.
option auth.login.brick1.allow flo
option auth.login.flo.password hello
Es können auch mehrere Benutzernamen mit Komma getrennt angegeben werden.
Im Client muss man im *protocol/client* bereich für den Server dann Benutzername/Passwort hinzugefügt werden
option username flo
option password hello
h2. Mounten beim Start
Da GlusterFS ein Netzlaufwerk ist, kann es leider nicht korrekt beim Starten gemountet werden, auch wenn es in der */etc/fstab* eingetragen ist. Der Eintrag sollte
dort aber trotzdem gemacht werden. Wenn man beim starten des Servers nun noch die Partition mounten möchte so öffnet man die Datei */etc/rc.local*. Diese Datei
wird am ende des Boot Prozesses ausgeführt und man fügt dort ein *mount /var/www* zum Beispiel ein wenn /var/www das GlusterFS verzeichnis ist. Der entsprechende
eintrag in der */etc/fstab* muss natürlich für */var/www* vorhanden sein.
h1. Praktische Nutzung
Sollen zwei Server einen bestimmten Datenbestand synchronisieren muss man Server sowie client konfigurieren. Als erstes sollten die Daten die man Synchronisieren möchte an einer Stelle abgelegt auf der man
nicht direkt zugreift oder arbeitet. Beispiel: Man möchte */www* zwischen zwei Server synchronisieren, und der Server soll auch mit den Datenbestand unter */www* Arbeiten. Daher zuerst müssen die Daten an eine
andere Stelle verschoben oder gemountet werden. Zum Beispiel unter */mnt/www*. Dann richtet man die Synchronisation mit */mnt/www* auf beiden Servern ein. Wenn dies getan wurde, so konfiguriert man den GlusterFS
Client. Dieser mountet nun unter */www* das Gluster Verzeichniss.
Daher auf den Servern existieren die Daten zweimal, unter */mnt/www* sind die Rohdaten. �ndern die Server daten direkt hier geschieht erstmals *keine* Replikation der Daten. Weiterhin können die Daten nun unter
*/www* abgerufen werden. Dies ist aber über den GlusterFS gemountet, daher änderungen auf den einen oder anderen Server replizieren sich automatisch zum anderen Server.
h1. Heilung
Unter Heilung versteht man wenn ein Node ausgefallen ist, ein anderer Node in der zwischenzeit neue Daten bekommen hat, und dann der ausgefallen Node wieder aktiv wird. Dann müssen auf den wieder aktiven Node alle Daten
die noch nicht vorhanden sind, übertragen werden damit der Datenbestan identisch ist. Dies erreicht man durch folgendes Kommando:
find /www -noleaf -print0 | xargs --null stat >/dev/null
Reply to: