GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Fehlerbehebung bei GlusterFS

Vorheriger Abschnitt - GlusterFS-Build-Schritte

Dieser Artikel beschreibt zwei GlusterFS-Probleme, auf die Sie möglicherweise stoßen, und bietet Schritte zu deren Lösung:

  • Replizierte Volumes heilen
  • Behebung eines Split-Brain-Problems

Replizierte Volumes heilen

Wenn ein Baustein in einem replizierten Volume offline geht, wird die Datei glusterd Daemons auf den verbleibenden Knoten verfolgen alle Dateien, die nicht auf den Offline-Baustein repliziert wurden. Wenn der Offline-Brick wieder verfügbar ist, initiiert der Cluster einen Heilungsprozess und repliziert die aktualisierten Dateien auf diesen Brick. Der Beginn dieses Vorgangs kann je nach Beobachtung bis zu 10 Minuten dauern.

Sie können Informationen darüber anzeigen, welche Dateien repliziert werden sollen, indem Sie den folgenden Befehl ausführen:

 gluster volume heal volumeName info

Während des Reparaturvorgangs können Sie Informationen zu den replizierten Dateien anzeigen. Sie können auch Informationen zu unabhängig geänderten Dateien auf dem Offline-Knoten (Split-Brain) oder zu Dateien anzeigen, bei denen die Replikation aus irgendeinem Grund fehlgeschlagen ist. Hängen Sie die folgenden Optionen an den vorhergehenden Befehl an:

gluster volume heal volumeName info healed

gluster volume heal volumeName info heal-failed

gluster volume heal volumeName info split-brain

Sie können die Heilung auch manuell erzwingen, indem Sie den folgenden Befehl aufrufen. Wenn Sie das optionale Argument full verwenden , werden alle Dateien, die nicht als zu reparieren markiert sind, ebenfalls synchronisiert.

gluster volume heal volumeName

Optional:

gluster volume heal volumeName full

Beheben Sie ein Split-Brain-Problem

Ein Split-Brain Das Problem tritt auf, wenn einer der replizierten Knoten offline geht (oder vom Cluster getrennt wird) und eine Datei auf einem seiner Bausteine ​​aktualisiert wird. Nachdem der Knoten dem GlusterFS-Cluster wieder beigetreten ist, schlägt der Heilungsprozess aufgrund des Konflikts fehl, der durch zwei verschiedene Versionen der Datei verursacht wird.

Im folgenden Beispiel wird dieses Problem manuell ausgelöst und dann behoben. Der Knoten namens gluster4 wird getrennt und eine der auf seinem Baustein gespeicherten Dateien wird geändert:

[root@gluster1 ~]# cat /mnt/gluster/gvol0/testfile.txt
This is version 1 of the file

[root@gluster4 ~]# ifdown eth2

##Wait just a little bit for the other nodes to see it disconnected

[root@gluster1 ~]# gluster peer status | grep -A2 glus4
Hostname: glus4
Uuid: 734aea4c-fc4f-4971-ba3d-37bd5d9c35b8
State: Peer in Cluster (Disconnected)

[root@gluster4 ~]# echo "This is new content" >> /var/lib/gvol0/brick4/testfile.txt

[root@gluster4 ~]# cat /var/lib/gvol0/brick4/testfile.txt
This is version 1 of the file
This is new content

[root@gluster1 ~]# cat /mnt/gluster/gvol0/testfile.txt
This is version 1 of the file

[root@gluster4 ~]# ifup eth2

##Wait just a little bit for the other nodes to see it reconnected

[root@gluster1 ~]# gluster peer status | grep -A2 glus4
Hostname: glus4
Uuid: 734aea4c-fc4f-4971-ba3d-37bd5d9c35b8
State: Peer in Cluster (Connected)

Jetzt wird der Heilungsprozess ausgelöst:

gluster volume heal gvol0 full

gluster volume heal gvol0 info split-brain
Gathering list of split brain entries on volume gvol0 has been successful

Brick glus1:/var/lib/gvol0/brick1
Number of entries: 1
at                    path on brick
-----------------------------------
2014-05-16 19:55:19 /testfile.txt

Brick glus2:/var/lib/gvol0/brick2
Number of entries: 0

Brick glus3:/var/lib/gvol0/brick3
Number of entries: 0

Brick glus4:/var/lib/gvol0/brick4
Number of entries: 0

[root@gluster1 ~]# cat /mnt/gluster/gvol0/testfile.txt
cat: /mnt/gluster/gvol0/testfile.txt: Input/output error

[root@gluster4 ~]# cat /mnt/gluster/gvol0/testfile.txt
cat: /mnt/gluster/gvol0/testfile.txt: Input/output error

Beachten Sie, dass die testfile.txt Datei aufgelistet, was bedeutet, dass GlusterFS nicht weiß, welche Version der Datei die richtige ist. Es ist wichtig, dieses Problem zu beheben, da es die Clients verwirren und zum Absturz bringen kann.

Jeder GlusterFS-Brick hat einen versteckten Ordner, glusterfs , die eine hexadezimale GlusterFS-ID (GFID) jeder Datei als hartcodierten Link enthält. In unserem Beispiel ist gluster4 eine Nachbildung des Knotens gluster1. Das folgende Beispiel zeigt die GFIDs von testfile.txt auf gluster1 und gluster4:

[root@gluster1 ~]# getfattr -m . -d -e hex /var/lib/gvol0/brick1/testfile.txt
# file: var/lib/gvol0/brick1/testfile.txt
trusted.afr.gvol0-client-0=0x000000000000000000000000
trusted.afr.gvol0-client-1=0x000000000000000000000000
trusted.afr.gvol0-client-2=0x000000000000000000000000
trusted.afr.gvol0-client-3=0x000000000000000000000000
trusted.gfid=0xa702251de4c547e2ba2f96b896a43718

[root@gluster4 ~]# getfattr -m . -d -e hex /var/lib/gvol0/brick4/testfile.txt
# file: var/lib/gvol0/brick4/testfile.txt
trusted.afr.gvol0-client-0=0x000000000000000000000000
trusted.afr.gvol0-client-1=0x000000000000000000000000
trusted.afr.gvol0-client-2=0x000000000000000000000000
trusted.afr.gvol0-client-3=0x000000000000000000000000
trusted.gfid=0xa702251de4c547e2ba2f96b896a43718

Auf einem der Knoten muss die Datei selbst sowie die zugehörige GFID-Datei (in diesem Fall a702251d-e4c5-47e2-ba2f-96b896a43718) aus dem zugrunde liegenden Mount gelöscht werden. Erst dann kann der Heilungsprozess wieder ausgelöst werden. Es ist wichtig zu verstehen, welche Kopie der Datei Sie speichern möchten. Speichern Sie nach Möglichkeit eine vollständige Kopie der Datei an einem Speicherort außerhalb von GlusterFS, löschen Sie die Datei von allen Knoten, lösen Sie einen Reparaturprozess aus und kopieren Sie die Datei zurück über den Bereitstellungspunkt. Diese Methode ist brutaler, aber sie funktioniert, wenn der Heilungsprozess die Datei immer noch nicht richtig durch Replikation reparieren kann.

[root@gluster4 ~]# rm -vf /var/lib/gvol0/brick1/.glusterfs/a7/02/a702251d-e4c5-47e2-ba2f-96b896a43718
[root@gluster4 ~]# rm -vf /var/lib/gvol0/brick1/testfile.txt
[root@gluster4 ~]# gluster volume heal gvol0 full

[root@gluster1 ~]# cat /var/lib/gvol0/brick1/testfile.txt
This is version 1 of the file

[root@gluster4 ~]# cat /var/lib/gvol0/brick4/testfile.txt
This is version 1 of the file

Nächster Abschnitt - GlusterFS HA ​​und Lastenausgleich


Linux
  1. Cat-Dateien mit Verzeichnis?

  2. String-Ersetzung mit einem Wörterbuch?

  3. Linux-Cat-Befehl

  4. SSH-Probleme beheben

  5. In .txt-Datei schreiben?

rm-Befehl unter Linux

Mv-Befehl unter Linux

WIE MAN DEN SCHWANZBEFEHL VERWENDET

Wie man den Head-Befehl verwendet

Openssl generiert Sha-256?

Beispiele für Linux-Diff-Befehle