Inhaltsverzeichnis
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
<wrap important>GlusterFS sollte niemals auf der root-Partition laufen</wrap>
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
<wrap warning>NIEMALS ins Volume Verzeichnis /var/glusterfs/datenverzeichnis selbst schreiben. Solche Funktionen immer über den gemounteten Client machen</wrap>
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-<VOLNAME>-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:
- /etc/init/mounting-glusterfs.conf
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 |
