GlusterFS ist ein Dateisystem welches sich wie ein RAID über verschiedene Server repliziert. Mein Aufbau hier:

Gluster1: 
Public IP: 192.168.91.140
Interne IP: 192.168.99.1

Gluster2:
Public IP: 192.168.91.141
Interne IP: 192.168.99.2

Gluster3:
Public IP: 192.168.91.142
Interne IP: 192.168.99.3

Alle Server haben folgendes Partitionslayout:
10 GB als /-Dateisystem (Ext4)
10 GB als /data-Dateisystem (Ext4) - hier werden später die Gluster-Dateien abgelegt die verteilt werden sollen.
1,5 GB als SWAP

Die öffentlichen IPs hängen alle am Switch mit Verbindung zum Internet, die internen IPs hängen an einem (virtuellen) Switch welcher lediglich für die Verbindung unter den Servern eingerichtet ist. Im realen Betrieb wäre dies ein Netzwerk welches nur für die syncronisierung der Serverdateien verwendet wird (ggf. bei zwei Servern auch lediglich ein oder mehrere Crosslink-Kabel). Dieser Switch sollte ggf. natürlich ebenso ausfallsicher gestaltet werden wie der Rest der Server-Infrastruktur. 

1) Vorbereitung

Nach der Installation des Basis-Systems und der Konfiguration des Netzwerkes auf statische IPs ist es noch empfehlenswert die Hosts-File anzulegen so das die Gluster-Server nicht von einem DNS abhängig sind. Meine /etc/hosts-File sieht so aus:

127.0.0.1       localhost
127.0.1.1       gluster1.martv.de       gluster1

192.168.99.1    gluster1
192.168.99.2    gluster2
192.168.99.3    gluster3

# The following lines are desirable for IPv6 capable hosts
::1     localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

IPv6 kann man rausnehmen wenn man möchte (solange man kein IPv6 verwendet natürlich nur). Diese Datei wird dann über die verschiedenen Server verteilt (dabei darauf achten das die zweite Zeile angepasst wird - auf node2 muss es dann natürlich gluster2.DOMAIN und gluster2 werden, auf Node 3 dann gluster3.DOMAIN gluster3).

2) Paket-Installation

Unter Debian reicht ein einfaches

apt-get install glusterfs-server

für die Installation der Pakete

 

3) Peers hinzufügen

Damit bekannt ist welche Server (Peers) im Netz sind wird geprüft ob die Knoten erreichbar sind und diese dem Cluster hinzugefügt (diese Kommandos werden nur auf einem Knoten ausgeführt):

 

gluster peer probe gluster2
gluster peer probe gluster3

Beide Kommandos sollten "Probe successful" zurückgeben. Mit

gluster peer status

wird jetzt überprüft ob die Server korrekt hinzugefügt wurden. Ausgabe z.B.:

root@gluster1:/etc# gluster peer status
Number of Peers: 2

Hostname: gluster2
Uuid: c1d93cbe-84e5-460b-b449-5d96908b9c70
State: Peer in Cluster (Connected)

Hostname: gluster3
Uuid: be51beb4-621d-4634-a264-e10020a06844
State: Peer in Cluster (Connected)

Hier zeigt sich das alle Knoten hinzugefügt wurden. Auf den anderen Knoten kann man mittels 

gluster peer status

ebenfalls die Umkehrprobe machen - auch hier sollten alle Knoten angezeigt werden.

4) Anlegen des Volumes

Mittels 

gluster volume create files replica 3 transport tcp gluster1:/data gluster2:/data gluster3:/data

wird jetzt das Volume angelegt. Hier gibt es folgende Werte:
- "files": Der Name des Volumes
- "replica": Hiermit erzeugt man ein Volume welches einem Raid1 (komplette Spiegelung) entspricht. Alternativ wäre Stripe (Raid0) eine Option
- "transport tcp": Das Protokoll welches zum Übertragen verwendet wird. TCP kann leichter in einer Firewall verwendet werden
- "glusterX:/data": Der Ordner auf dem jeweiligen Server in dem die Daten später liegen. Existiert dies Verzeichnis nicht wird es angelegt.

 Als Antwort auf das Kommando sollte 

 

Creation of volume files has been successful. Please start the volume to access data.

kommen.

5) Start des Volumes

Als nächstes starten wir das Volume mittels

gluster volume start files

6) Check des Volumes

Mittels

gluster volume info

kann der Status des Volumes überprüft werden. Ausgabe:

Volume Name: files
Type: Replicate
Status: Started
Number of Bricks: 3
Transport-type: tcp
Bricks:
Brick1: gluster1:/data
Brick2: gluster2:/data
Brick3: gluster3:/data

7) Mounten des Volumes

Hierbei ist zu beachten dass das Volume gemounted wird, nicht das Verzeichnis:

mount -t glusterfs gluster1:/files /mnt/data

mountet das Cluster-Dateisystem nach /mnt/data (oder in einen anderen beliebigen Mount-Point). 

Wichtig: Man muss zwingend über einen solchen Mount-Point gehen. Direkt in das Dateisystem des GlusterFS zu schreiben (hier /data) funktioniert nicht.

8) fstab

Um das Volume automatisch zu mounten kann man das in die /etc/fstab eintragen

gluster1:/files /mnt/data glusterfs defaults,_netdev 0 0

Hierbei ist zu beachten das man natürlich immer den eigenen Server einträgt - d.h. auf Node2 wäre es gluster2:/files, auf Node3 wäre es gluster3:/files