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

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: