====== GlusterFS einrichten ======
Scenario:
Wir haben 2 Nodes (Server1 und Server2) und möchten ein verteiltes und automatisch replizierendes Dateisystem auf beiden Maschinen einrichten.
Wir haben außerdem 2 (virtuelle) storages unter /dev/sdb1 auf jedem der beiden Nodes.
===== Pakete installieren =====
apt-get install glusterfs-client glusterfs-common glusterfs-server xfsprogs
===== Partitionierung =====
GlusterFS sollte **niemals** auf der root-Partition laufen
Folgendes dann auf beiden Nodes ausführen:
mkfs.xfs -i size=512 /dev/sdb1
mkdir -p /var/glusterfs
echo "/dev/sdb1 /var/glusterfs xfs defaults 1 2" >>/etc/fstab
mount -a && mount | grep glusterfs
Es sollte ausgegeben werden, dass /dev/sdb1 nach /var/glusterfs gemountet worden ist
Jetzt kann auch schon der Serverdienst gestertet werden
service glusterfs-server start
===== Konfiguration des Pools =====
Auf Server1:
gluster peer probe Server2
# peer probe: success
Auf Server2:
gluster peer probe Server1
# peer probe: success
Wenn man den Test mit den Hostnamen machen möchte, muss sichergestellt sein, dass die DNS-Auflösung funktioniert oder dass die IP/hostnames in der /etc/hosts gepflegt werden
===== Konfiguration des Volumes =====
Auf beiden Server ausführen:
mkdir /var/glusterfs/datenverzeichnis
Nur auf einem Server ausführen:
gluster volume create datenverzeichnis replica 2 Server1:/var/glusterfs/datenverzeichnis Server2:/var/glusterfs/datenverzeichnis
gluster volume start datenverzeichnis
Es sollte nun der Status "started" ausgegeben werden.
gluster volume info
#Volume Name: datenverzeichnis
#Type: Replicate
#Volume ID: 3b857b0e-553a-42df-939c-4901a945eda0
#Status: Started
#Number of Bricks: 1 x 2 = 2
#Transport-type: tcp
#Bricks:
#Brick1: Server1:/var/glusterfs/datenverzeichnis
#Brick2: Server2:/var/glusterfs/datenverzeichnis
===== Testen des Volumes =====
Das Volume kann jetzt vom einem Client (Achtung: Paket glusterfs-client muss installiert sein, wenn man es als glusterfs mounten will) oder auf localhost gemountet werden.
Alternativ kann man das Volume auch nativ mittels nfs oder cifs mounten.
Hier das Mounting auf localhost
mkdir /mnt/gluster_daten
mount -t glusterfs localhost:datenverzeichnis /mnt/gluster_daten
for i in {1..100}; do touch /mnt/gluster_daten/$i; done
Wenn man das oben genannte Beispiel auf Server1 gemacht hat, sollte man nun auf Server2 im mountpoint 100 Dateien finden
Wenn alles passt, dann nur noch das mounting persistent machen
echo "localhost:datenverzeichnis /mnt/gluster_daten glusterfs defaults 0 0" >>/etc/fstab
NIEMALS ins Volume Verzeichnis /var/glusterfs/datenverzeichnis selbst schreiben. Solche Funktionen immer über den gemounteten Client machen
===== Tuning =====
Man kann das NFS-Feature, falls man es nicht benötigt, abschalten. Auch den cifs-support kann man abschalten.
Das spart eine Menge overhead
gluster volume set datenverzeichnis nfs.disable ON
gluster volume set datenverzeichnis user.cifs OFF
===== Troubleshooting =====
Die Konfiguration von GlusterFS liegt unter /var/lib/glusterd
das Logging erfolgt, je nachdem was für Dienste man nutzt:
| geo-replication | /var/log/glusterfs/geo-replication/* |
| self-heal operations | /var/log/glusterfs/glustershd.log|
| NFS access | /var/log/glusterfs/nfs.log|
| SMB access | /var/log/samba/glusterfs--ClientIP.log |
Es kann vorkommen, dass bei einem Mount auf localhost mit dem type=glusterfs das Volume nicht gemountet werden kann, da der Server noch nicht komplett bereit ist. Dies lässt sich durch das folgende upstart-script umgehen:
description "Block the mounting event for glusterfs filesystems until the network interfaces are running"
instance $MOUNTPOINT
start on mounting TYPE=glusterfs
task
exec start wait-for-state WAIT_FOR=glusterd WAITER=mounting-glusterfs-$MOUNTPOINT
===== Hintergrundinformationen =====
==== Protokolle ====
Jedes GlusterFS-Volume kann so konfiguriert werden, dass es mehrere Protokolle gleichzeitig unterstützt. Da allerdings die verschiedenen Protokolle auch verschiedenen Mechanismen z.B. fürs file locking benutzen, kann man diese nicht einfach frei kombinieren. Die unten stehende Tabelle zeigt an, welche Protokolle sicher miteinander kombinieren lassen.
^ ^ SMB ^ NFS ^ Nativ ^ Objekt ^
| **SMB** | --- | Nein | Nein | Nein |
| **NFS** | Nein | ---| Ja | Ja |
| **Nativ** | Nein | Ja | --- | Ja |
| **Objekt** | Nein | Ja | Ja | --- |
==== Firewall-Ports ====
^ Port ^ Type ^ Beschreibung ^
| 24007| tcp| glusterd Kommunikation |
| 49152-59153| tcp | glusterfsd Ports (jeweils einer) |
| 111 | tcp & udp | portmapper für NFS Zugang |
|38465-38466 | tcp | gluster nfs |
|11211 | tcp & udp |memcached port für Swift |
|6000-6002 | tcp | Swift Object, Container und Account Server Ports |
|443,8080 | tcp | Swift Proxy Server |