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