Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen gezeigt.

Link zu dieser Vergleichsansicht

tux:drbd_failed_node [2012/12/31 16:20]
wikisysop
tux:drbd_failed_node [2013/01/01 19:42] (aktuell)
wikisysop [Split-Brain]
Zeile 2: Zeile 2:
 =====DRBD: Ausfall eines Nodes===== =====DRBD: Ausfall eines Nodes=====
  
-<note important>​**<​fc #​800000>​Note</​fc>:​** Ausgangslage dieses Tutorials ist das aus dem Tutorial [[:​tux:​drbd_lan_raid1|DRBD:​ RAID1 über LAN]] erstellte Setup, zweier >>​DRBD-Nodes<<​.</​note>​+<note important>​**<​fc #​800000>​Note</​fc>:​** Ausgangslage dieses Tutorials ist das aus dem Tutorial [[:​tux:​drbd_lan_raid1|DRBD:​ RAID1 über LAN]] erstellte Setup, zweier >><fc #008000>​DRBD-Nodes</fc><<​.</​note>​
  
 ====Timing Trouble==== ====Timing Trouble====
 Mit einem ganz anderen Problem hatte ich im Vorfeld zu kämpfen. Nach einem Neustart eines beliebigen Nodes, wurde das im LAN verteilte DRBD-Volume nicht wieder automatisch hergestellt. Sollte es aber, zumindest mindestens dann, wenn der >><​fc #​008000>​Secondary Node</​fc><<​ neu gestartet wurde. Statt dessen wurde ich beim Booten des >><​fc #​008000>​Secondary Nodes</​fc><<​ mit folgender Meldung konfrontiert:​ Mit einem ganz anderen Problem hatte ich im Vorfeld zu kämpfen. Nach einem Neustart eines beliebigen Nodes, wurde das im LAN verteilte DRBD-Volume nicht wieder automatisch hergestellt. Sollte es aber, zumindest mindestens dann, wenn der >><​fc #​008000>​Secondary Node</​fc><<​ neu gestartet wurde. Statt dessen wurde ich beim Booten des >><​fc #​008000>​Secondary Nodes</​fc><<​ mit folgender Meldung konfrontiert:​
  
-''<​fc #​800000><​fs large>​block drbd0: bind before connect failed, err = -99</​fs></​fc>''​+''<​fc #​800000><​fs large>>>block drbd0: bind before connect failed, err = -99<<</​fs></​fc>''​
  
 und im Syslog findet sich passend dazu noch etwas mehr Information:​ und im Syslog findet sich passend dazu noch etwas mehr Information:​
Zeile 92: Zeile 92:
  
 ===Totalausfall des Primary Nodes=== ===Totalausfall des Primary Nodes===
-Ganz anders ist das Problem gelagert, wenn der >><​fc #​008000>​Primary Node</​fc><<​ komplett ausfällt oder zumindest solange, dass auf die Verfügbarkeit der Daten nicht gewartet werden kann. Eine erste Maßnahme dürfte sein, den >><​fc #​008000>​Secondary Node</​fc><<​ zum >><​fc #​008000>​Primary Node</​fc><<​ heraufzustufen,​ um die Daten erst mal wieder zur Verfügung zu haben:+Ganz anders ist das Problem gelagert, wenn der >><​fc #​008000>​Primary Node</​fc><<​ komplett ausfällt oder zumindest solange, dass auf die Verfügbarkeit der Daten nicht gewartet werden kann. Eine erste Maßnahme dürfte sein, den >><​fc #​008000>​Secondary Node</​fc><<​ zum >><​fc #​008000>​Primary Node</​fc><<​ heraufzustufen,​ um die Daten erst mal wieder zur Verfügung zu haben. Deshalb wird auf dem >><​fc #​008000>​**Secondary-Node**</​fc><<​ folgendes Kommando ausgeführt,​ um ihn zum >><​fc #​008000>​Primary-Node</​fc><<​ zu machen. 
 + 
 +<​xterm>​root@<​fc #​800000>​**server2**</​fc>​:~# <fc #​008000>​drbdadm primary r0</​fc></​xterm>​ 
 + 
 +Danach das DRBD-Volume mounten: 
 + 
 +<​xterm>​root@<​fc #​800000>​**server2**</​fc>:​~#​ <fc #​008000>​mount -t ext3 /dev/drbd0 /​drbd_data/</​fc></​xterm>​ 
 + 
 +Und die Daten sind nun am >><​fc #​008000>​server2</​fc><<​ verfügbar:​ 
 + 
 +<​xterm>​root@<​fc #​800000>​**server2**</​fc>:​~#​ <fc #​008000>​ls -l /​drbd_data/</​fc>​ 
 +insgesamt 1501504 
 +drwx------ 2 root root     16384 30. Dez 17:00 lost+found 
 +-rw-r--r-- 1 root root 512000000 30. Dez 21:45 testfile4.dd 
 +-rw-r--r-- 1 root root 512000000 31. Dez 13:29 testfile5.dd 
 +-rw-r--r-- 1 root root 512000000 30. Dez 17:16 testfile.dd</​xterm>​ 
 + 
 +Nun kann die Reparatur oder Neuinstallation des ausgefallenen Servers beginnen. Wenn Sie sich für einen komplett neuen Server entscheiden müssen, gilt zu beachten, dass das neu bereitgestellte Volume für den DRBD-Spiegel auf keinen Fall kleiner sein darf, als das bereits vorhandene. Gehen Sie im Grunde genommen so vor, wie bei der Installation des neuen Nodes im Tutorial __[[:​tux:​drbd_lan_raid1|DRBD:​ RAID1 über LAN]]__ beschrieben. Hie in meinem Beispiel habe ich einen Snapshot des >>​server1<<​ wieder eingespielt,​ der mich in die Grundinstallation des Systems, ohne DRBD zurück gebracht hat. Die notwendigen Schritte in diesem Szenario waren: 
 + 
 +  * Die Festplatte >><​fc #​008000>/​dev/​sdb</​fc><<​ einbauen und partitionieren 
 +  * Installation der drbd8-utils:​\\ <​xterm>​root@**<​fc #​800000>​server1</​fc>​**:​~#​ <fc #​008000>​aptitude install drbd8-utils</​fc>​ 
 +Die folgenden NEUEN Pakete werden zusätzlich installiert:​ 
 +  drbd8-utils </​xterm>​ 
 +  * Die Konfogurationsdatei >><​fc #​008000>/​etc/​drbd.conf</​fc><<​ vom noch existierenden Node kopieren:\\ <​xterm>​root@<​fc #​800000>​**server1**</​fc>:​~#​ scp root@192.168.167.135:/​etc/​drbd.conf /​etc/</​xterm>​ 
 +  * Die lokale Datei >><​fc #​008000>/​etc/​hosts</​fc><<​ anpassen:\\ <code bash|/​etc/​hosts>​127.0.0.1 ​      ​localhost 
 +127.0.1.1 ​      ​server1.localdomain ​    ​server1 
 +192.168.167.135 server1 
 +192.168.167.136 server2</​code>​ 
 +  * Das DRBD-Metadata-Storage anlegen:\\ <​xterm>​root@<​fc #​800000>​**server1**</​fc>:​~#​ <fc #​008000>​drbdadm create-md r0</​fc></​xterm>​ 
 +  * DRBD Daemon starten:\\ <​xterm>​root@<​fc #​800000>​**server1**</​fc>:​~#​ <fc #​008000>/​etc/​init.d/​drbd start</​fc>​ 
 +Starting DRBD resources:[ d(r0) ].</​xterm>​ 
 +  * Danach startet DRBD automatisch die Synchronisation und der neu hinzugefügte Node bindet sich als >><​fc #​008000>​Secondary Node</​fc><<​ ins System ein:\\ <​xterm>​root@<​fc #​800000>​**server1**</​fc>:​~#​ <fc #​008000>​cat /​proc/​drbd</​fc>​  
 +version: 8.3.7 (api:​88/​proto:​86-91) 
 +srcversion: EE47D8BF18AC166BE219757  
 + 0: cs:​Connected ro:​**__Secondary/​Primary__** ds:​UpToDate/​UpToDate C r---- 
 +    ns:0 nr:2096348 dw:2096348 dr:0 al:0 bm:128 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:​0</​xterm>​ 
 +  * Abschließend noch das oben bereits geschilderte Timing Problem lösen:\\ <​xterm>​root@<​fc #​800000>​**server1**</​fc>:​~#​ <fc #​008000>​mv /​etc/​rc2.d/​S19drbd /​etc/​rc2.d/​S99drbd</​fc></​xterm>​\\ <code bash|/​etc/​init.d/​drbd>#​!/​bin/​bash 
 +
 +# chkconfig: - 70 08 
 +# description:​ Loads and unloads the drbd module 
 +
 +# Copright 2001-2008 LINBIT Information Technologies 
 +# Philipp Reisner, Lars Ellenberg 
 +
 +### BEGIN INIT INFO 
 +# Provides: drbd 
 +# Required-Start:​ $local_fs $network $syslog 
 +# Required-Stop: ​ $local_fs $network $syslog 
 +# Should-Start: ​  sshd multipathd 
 +# Should-Stop: ​   sshd multipathd 
 +# Default-Start: ​ 2 3 4 5 
 +# Default-Stop: ​  0 1 6 
 +# X-Start-Before:​ heartbeat corosync 
 +# X-Stop-After: ​  ​heartbeat corosync 
 +# Short-Description: ​   Control drbd resources. 
 +### END INIT INFO 
 + 
 +sleep 5 
 +
 +
 +.</​code>​ 
 + 
 +**<fc #​800000>​Note:</​fc>​** Wenn Sie einen neuen Server einsetzen, müssen Sie darauf achten, dass Sie die neue IP-Adresse und den neuen Hostnamen in den Konfigurationsdateien >><​fc #​008000>/​etc/​hosts</​fc><<​ und >><​fc #​008000>/​etc/​drbd.conf</​fc><<​ Ihrem neuen Setup entsprechend anpassen. 
 + 
 +====Split-Brain==== 
 +Wenn alle Cluster-Partner gleichzeitig die Verbindung verlieren, kommt es zu einem undefinierten Zustand, welcher >><​fc #​008000>​Split-Brain</​fc><<​((http://​de.wikipedia.org/​wiki/​Split_Brain_%28Informatik%29)) genannt wird. In diesem Fall funktionieren noch mindestens zwei Nodes, jedoch ist keine Koordination zwischen ihnen mehr möglich. In unserer Beispielkonfiguration hier ist ein Split-Brain nicht weiter schlimm, die Ressourcen sind weiterhin verfügbar und da eh nur einer der beiden Nodes als alleinige Ressource zur Verfügung steht, besteht keine Gefahr von Inkonsistenzen. Dramatischer wirkt sich da eine >><​fc #​008000>​Split-Brain</​fc><<​ Situation in einem Clusterverband aus, welcher motiviert zB zur Lastverteilung,​ mehrere oder alle Nodes als Ressource zur Verfügung zu stellen. Im Falle einer >><​fc #​008000>​Split-Brain</​fc><<​ Situation werden unkontrolliert an alle Ressourcen Daten gesendet, welche sich dann in einem undefinierten Zustand befinden. Da alle Nodes irgendwelche Daten erhalten haben, können diese nur noch sehr schwer zusammengeführt werden. 
 + 
 +Erkennen können Sie eine >><​fc #​008000>​Split-Brain</​fc><<​ Situation zB durch folgende Meldung im Syslog: 
 + 
 +''<​fc #​800000><​fs large>​block drbd0: Split-Brain detected, dropping connection!</​fs></​fc>''​ 
 + 
 +Eine >><​fc #​008000>​Split-Brain</​fc><<​ Situation kann in >><​fc #​008000>​DRBD</​fc><<​ manuell durch folgende Kommandos aufgelöst werden: 
 + 
 +Entscheiden Sie zuerst, welcher Node die aktuellen Daten enthält. IdR ist dies der >><​fc #​008000>​Primary-Node</​fc><<,​ zumindest in unserem Setup. Auf dem Node, welcher die ungültigen Daten enthält (hier im Beispiel der >><​fc #​008000>​Secondary Node</​fc><<​) führen Sie folgende Kommandos aus, um seine Daten als ungültig zu markieren:​ 
 + 
 +<​xterm>​root@**<​fc #​800000>​server2</​fc>​**:​~#​ <fc #​008000>​drbdadm disconnect r0</​fc>​ 
 +root@**<​fc #​800000>​server2</​fc>​**:​~#​ <fc #​008000>​drbdadm secondary r0</​fc>​ 
 +root@**<​fc #​800000>​server2</​fc>​**:​~#​ <fc #​008000>​drbdadm -- --discard-my-data connect r0</​fc></​xterm>​ 
 + 
 +Danach sollte die >><​fc #​008000>​Split-Brain</​fc><<​ Situation bereits wieder aufgehoben sein. Sollte der >><​fc #​008000>​Primary-Node</​fc><<​ jedoch auch im >><​fc #​008000>​Stand-Alone</​fc><<​ Modus stecken, schieben Sie auf dem anderen Node noch folgendes Kommando hinterher:​ 
 + 
 +<​xterm>​root@**<​fc #​800000>​server1</​fc>​**:​~#​ <fc #​008000>​drbdadm connect r0</​fc></​xterm>​ 
 + 
 +**Verwandte Artikel:​** 
 +[[:​tux:​drbd_lan_raid1|->​ DRBD: Raid1 über LAN (Setup)]] 
 +[[:​tux:​drbd_heartbeat|->​ DRBD: Integration in Heartbeat]] 
 + 
 + --- //pronto 2013/01/01 14:47// 
 +{{keywords>​linux drbd node failure}}
tux/drbd_failed_node.1356967237.txt.gz (15039 views) · Zuletzt geändert: 2012/12/31 16:20 von wikisysop
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0