DRBD: Unterschied zwischen den Versionen

Aus xinux.net
Zur Navigation springen Zur Suche springen
(Die Seite wurde neu angelegt: „'''DRBD<sup>®</sup>''' (''Distributed Replicated Block Device'') ist eine freie Netzwerkspeicherlösungs-Software. Als Kernel…“)
 
 
(15 dazwischenliegende Versionen von 5 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
'''DRBD<sup>®</sup>''' (''Distributed Replicated Block Device'') ist eine [[Free/Libre Open Source Software|freie]] Netzwerkspeicherlösungs-Software. Als Kernel-Modul zusammen mit einer Management-Applikation im Userspace und einem Skript dient es dazu, ein [[Blockspeichergerät|Blockgerät]] auf einem produktiven (primary) [[Server]] in Echtzeit auf einen anderen (secondary) [[Server]] zu spiegeln. Dieses Verfahren wird verwendet, um [[Hochverfügbarkeit]] (HA) im [[Linux]]-Umfeld zu realisieren und somit eine gute Verfügbarkeit verschiedener Dienste zu erreichen.
+
==Minimale Konfigurationsdatei==
 +
<source lang="bash">
 +
global { usage-count yes; }
 +
common {
 +
        syncer { rate 100M; }
 +
        protocol C;
 +
}
 +
resource data {
 +
                device          /dev/drbd0;
 +
                meta-disk      internal;
 +
        on cp1 {
 +
                disk            /dev/sdb;
 +
                address        10.0.0.1:7788;
 +
        }
 +
        on cp2 {
 +
                disk            /dev/sdb;
 +
                address        10.0.0.2:7788;
 +
        }
 +
}
 +
</source>
  
== Funktionsweise ==
+
<!---
Es werden alle Schreibzugriffe über das [[Netzwerk]] an den zweiten Server übermittelt. Erst wenn der zweite Server den erfolgreichen Schreibvorgang an den ersten Server zurückgemeldet hat, meldet dieser der Applikation das Ende des Schreibvorgangs (diese Technik ist vergleichbar mit einem [[RAID]] 1 über TCP/IP).
+
<source lang="bash">
Falls der erste Server ausfällt, wird dieser als inaktiv gemeldet.
+
global {
Durch eine Serverüberwachungssoftware wie [[Heartbeat]] kann der zweite Server die Funktion des ersten Servers übernehmen und mit denselben Daten weiterarbeiten.
+
    usage-count yes;
 +
}
 +
common {
 +
        syncer {
 +
                rate 10M;
 +
        }
 +
        protocol C;
 +
        handlers {
 +
                pri-on-incon-degr "echo o > /proc/sysrq-trigger ; halt -f";
 +
                pri-lost-after-sb "echo o > /proc/sysrq-trigger ; halt -f";
 +
                local-io-error "echo o > /proc/sysrq-trigger ; halt -f";
 +
                outdate-peer "/usr/sbin/drbd-peer-outdater";
 +
        }
 +
        startup {
 +
        }
 +
        disk {
 +
                on-io-error  detach;
 +
        }
 +
        net {
 +
                after-sb-0pri disconnect;
 +
                after-sb-1pri disconnect;
 +
                after-sb-2pri disconnect;
 +
                rr-conflict disconnect;
 +
        }
 +
}
 +
resource data {
 +
                device          /dev/drbd0;
 +
                meta-disk      internal;
 +
        on emi {
 +
                disk            /dev/sdd;
 +
                address        10.0.0.1:7788;
 +
        }
 +
        on lilly {
 +
                disk            /dev/sdb;
 +
                address        10.0.0.2:7788;
 +
        }
 +
}
 +
</source>
  
Jede DRBD-Komponente (lokal auch als Partition bezeichnet) besitzt einen Status, welcher entweder primär oder sekundär sein kann.
+
#/etc/drbd.conf
Zwischen allen Systemen erzeugt DRBD eine Verbindung von der lokalen Partition zu einem virtuellen Gerät ''/dev/drbd'''X''''', welches nicht direkt angesprochen werden kann.
+
global {
Schreibzugriffe auf das primäre System werden über das Low-level-Blockgerät (die Partition) und gleichzeitig an das sekundäre System propagiert.
+
    usage-count yes;
Das sekundäre System übermittelt dann die Daten an sein eigenes lokales Low-level-Blockgerät.
+
}
Alle Lesezugriffe werden stets lokal durchgeführt.
+
common {
 +
  syncer { rate 10M; }
 +
}
 +
resource data {
 +
  protocol C;
 +
  handlers {
 +
    pri-on-incon-degr "echo o > /proc/sysrq-trigger ; halt -f";
 +
    pri-lost-after-sb "echo o > /proc/sysrq-trigger ; halt -f";
 +
    local-io-error "echo o > /proc/sysrq-trigger ; halt -f";
 +
    outdate-peer "/usr/sbin/drbd-peer-outdater";
 +
  }
 +
  startup {
 +
  }
 +
  disk {
 +
    on-io-error  detach;
 +
  }
 +
  net {
 +
    allow-two-primaries;
 +
    after-sb-0pri disconnect;
 +
    after-sb-1pri disconnect;
 +
    after-sb-2pri disconnect;
 +
    rr-conflict disconnect;
 +
  }
 +
  syncer {
 +
    rate 10M;
 +
    al-extents 257;
 +
  }
 +
  on thorin {
 +
    device    /dev/drbd0;
 +
    disk      /dev/sda3;
 +
    address    172.18.241.29:7788;
 +
    meta-disk  /dev/sda5 [0];
 +
  }
 +
  on thrain {
 +
    device    /dev/drbd0;
 +
    disk      /dev/sda3;
 +
    address    172.18.241.30:7788;
 +
    meta-disk /dev/sda5 [0];
 +
  }
 +
}
 +
--->
 +
konfigurationsdatei auf andere node kopieren
 +
root@thorin:~# scp /etc/drbd.conf thrain:/etc
  
Sollte das primäre System ausfallen, versetzt ein Cluster-Management-Prozess das sekundäre System in den primären Systemzustand. Wenn das ehemals primäre System wieder verfügbar ist, wird dieses nach einer Resynchronisation der Gerätedaten normalerweise, um keine überflüssige Downtime zu erzeugen, als sekundäres System weiterlaufen, kann aber auch wieder in den primären Status versetzt werden.
+
auf beiden seiten md kreieren
Der Algorithmus der DRBD-Synchronisation arbeitet dadurch effizient, dass nur während des Ausfalls geänderte Datenblöcke wieder resynchronisiert werden müssen, nicht das ganze Gerät.
+
root@thorin:~# drbdadm create-md  data
 +
root@thrain:~# drbdadm create-md  data
  
In der im Januar 2007 erschienenen Version 8 wurde eine Unterstützung für Konfigurationen mit Lastverteilung eingeführt, welches beiden Systemen ermöglicht, einzelne DRBDs im Lese-/Schreib-Modus wie bei gemeinsam genutztem Speicher (shared storage) zu nutzen.<ref>[[Philipp Reisner]]: ''[http://www.drbd.org/fileadmin/drbd/publications/drbd8_wpnr.pdf DRBD v8 - Replicated Storage with Shared Disk Semantics]''. In: ''Proceedings of the 12th International Linux System Technology Conference''. 2005.</ref>
+
partitionen aktivieren
Diese Art der Nutzung erfordert die Verwendung eines Sperrmechanismus, dem „distributed lock manager“.
+
root@thorin:~# drbdadm up  data
 +
root@thrain:~# drbdadm up  data
  
== Vorteile gegenüber gemeinsam genutztem Cluster-Speicher ==
+
eine seite auf master setzen.
Konventionelle Computer-Cluster-Systeme benutzen in der Regel eine Art gemeinsamen Speicher, der für die Clusterressourcen benutzt wird.
+
root@thorin:~# drbdsetup /dev/drbd0 primary --o
Dieser Ansatz hat jedoch eine Reihe von Nachteilen, die DRBD umgeht.
 
* Gemeinsam genutzte Speicher ([[Shared Storage|shared storage]]) bringen typischerweise eine einzelne Fehlerstelle ([[Single Point of Failure]]) mit sich, da beide Clustersysteme vom gleichen gemeinsamen Speicher abhängig sind. Bei der Verwendung von DRBD besteht hier keine Gefahr, da die benötigten Clusterressourcen lokal repliziert werden und nicht auf einem eventuell wegfallenden gemeinsamen Speicher liegen.
 
* Gemeinsam genutzter Speicher wird in der Regel über ein [[Storage Area Network|SAN]] oder ein [[Network Attached Storage|NAS]] adressiert, was einen gewissen Mehraufwand beim Lesezugriff erfordert. Bei DRBD wird dieser Aufwand signifikant reduziert, da Lesezugriffe immer lokal stattfinden.
 
  
== Anwendungen ==
+
formatieren.
DRBD arbeitet innerhalb des Linux-Kernels auf Blockebene und ist damit für darauf aufsetzende Schichten transparent. DRBD kann somit als Grundlage verwendet werden für:
+
root@thorin:~# mkfs.ext3 /dev/drbd0
* konventionelle Dateisysteme
 
* gemeinsam genutzte Cluster-Dateisysteme wie z.B. [[Global File System|GFS]] oder [[OCFS2]]
 
* ein weiteres logisches Blockgerät wie z.B. [[Logical Volume Manager|LVM]]
 
* jede Applikation, die den direkten Zugriff auf ein Blockgerät unterstützt.
 
  
DRBD-basierende Cluster werden häufig eingesetzt, um Dateiserver und relationale Datenbanken (wie [[MySQL]]) um synchrone Replikation und Hochverfügbarkeit zu erweitern.
+
==Split Brain recovery manuell==
  
== Aufnahme in den Linux-Kernel ==
+
Auf dem Secondary Node folgendes ausführen:
Im Juli 2007 stellten die DRBD-Autoren die Software der Linux-Entwicklergemeinde für eine mögliche zukünftige Aufnahme von DRBD in den offiziellen Linux-Kernel zur Verfügung.<ref>[[Lars Ellenberg]]: ''[http://lkml.org/lkml/2007/7/21/255 DRBD wants to go mainline]''. Linux-kernel-Mailingliste. 21. Juli 2007.</ref> Im Kernel 2.6.33 wurde DRBD neu aufgenommen.<ref>[http://www.golem.de/0912/71800.html DRBD schafft es in den Linux-Kernel]</ref>
+
drbdadm secondary data
 +
drbdadm disconnect data
 +
drbdadm -- --discard-my-data connect data
  
== DRBD+ wird Open Source ==
+
und auf dem Primary Node:
Die kommerziell lizenzierte Version DRBD+ wurde in der ersten Hälfte des Dezember 2008 mit der Open-Source-Version zusammengeführt und unter der [[GNU General Public Licence]] freigegeben. Seit der daraus resultierenden Version 8.3 ist es möglich, den Datenbestand auf einen dritten Knoten zu spiegeln. Die Höchstgrenze von 4 TiByte pro Gerät ist auf 16 TiByte erhöht worden. <ref>[[heise.de]]: ''[http://www.heise.de/open/Hochverfuegbarkeitsloesung-DRBD-wird-Open-Source--/news/meldung/118998 Hochverfügbarkeitslösung DRBD+ wird Open Source]''. 17. November 2008.</ref><ref>[http://www.linbit.com/de/presse/mitteilungen/presse-2008/groesser-besser-frei-mit-drbd-raus-aus-der-hardwarefalle/ Ankündigung von DRBD 8.3 unter der GPL]</ref>
+
drbdadm connect data
  
== Weblinks ==
+
Das System stellt sich dann von selbst wieder her, wenn keine anderen Probleme vorliegen.
{{Commons}}
 
* [http://www.drbd.org/ Offizielle Website] (englisch)
 
* [http://www.linux-ha.org/ The High-Availability Linux Project] (englisch)
 
  
== Quellen ==
+
==Zustand checken==
<references/>
+
root@reliant:~# drbd-overview
 +
  0:galactica-services  SyncTarget Primary/Primary Inconsistent/UpToDate C r----
 +
[====>...............] sync'ed: 25.7% (38072/51196)M
 +
  1:orion              Connected  Primary/Primary UpToDate/UpToDate    C r----
 +
==Hozhammermethode==
 +
drbdadm -- --overwrite-data-of-peer primary data
 +
=Nützliche Kommandos für drbdadm=
 +
Der Befehl drbdadm ist vergleichbar mit mdadm bei Softraids. Er kann mit verschiedenen Parametern dazu benutzt werden, DRBD-Devices wie oben bereits gezeigt zu erstellen, aber auch zu ändern, zu (de-)aktivieren oder zu löschen.
 +
==Volle Neusynchronisation==
 +
von /dev/drbd0 mittels der DRBD-Ressource 'home-data' (Status in /proc/drbd)
 +
drbdadm attach home-data
 +
 
 +
==Trennen der Verbindung von Laufwerk und DRBD-Ressource:==
 +
drbdadm detach home-data
 +
==Verbinden des DRBD-Treibers mit dem anderen Node:==
 +
drbdadm connect home-data
 +
==Bestehende DRBD-Verbindung zum anderen Node trennen:==
 +
drbdadm disconnect home-data
 +
==Masterrolle agbgeben:==
 +
drbdadm secondary home-data
 +
==Masterrolle übernehmen:==
 +
drbdadm primary home-data
 +
==Übernahme von Änderungen an /etc/drbd.conf:==
 +
drbdadm adjust home-data
 +
==Statusabfrage der Verbindung:==
 +
drbdadm role home-data
 +
=Synrate=
 +
==erhöhen==
 +
*drbdadm disk-options --c-plan-ahead=0 --resync-rate=110M home-data
 +
==rückgängig machen==
 +
*drbdadm adjust home-data
 +
 
 +
=Links=
 +
*https://docs.linbit.com/doc/users-guide-84/s-configure-sync-rate/

Aktuelle Version vom 20. September 2017, 17:40 Uhr

Minimale Konfigurationsdatei

global { usage-count yes; }
common {
        syncer { rate 100M; }
        protocol C;
}
resource data {
                device          /dev/drbd0;
                meta-disk       internal;
        on cp1 {
                disk            /dev/sdb;
                address         10.0.0.1:7788;
        }
        on cp2 {
                disk            /dev/sdb;
                address         10.0.0.2:7788;
        }
}

konfigurationsdatei auf andere node kopieren

root@thorin:~# scp /etc/drbd.conf thrain:/etc

auf beiden seiten md kreieren

root@thorin:~# drbdadm create-md  data
root@thrain:~# drbdadm create-md  data

partitionen aktivieren

root@thorin:~# drbdadm up  data
root@thrain:~# drbdadm up  data

eine seite auf master setzen.

root@thorin:~# drbdsetup /dev/drbd0 primary --o

formatieren.

root@thorin:~# mkfs.ext3 /dev/drbd0

Split Brain recovery manuell

Auf dem Secondary Node folgendes ausführen:

drbdadm secondary data 
drbdadm disconnect data 
drbdadm -- --discard-my-data connect data

und auf dem Primary Node:

drbdadm connect data

Das System stellt sich dann von selbst wieder her, wenn keine anderen Probleme vorliegen.

Zustand checken

root@reliant:~# drbd-overview 
  0:galactica-services  SyncTarget Primary/Primary Inconsistent/UpToDate C r---- 
	[====>...............] sync'ed: 25.7% (38072/51196)M
  1:orion               Connected  Primary/Primary UpToDate/UpToDate     C r----

Hozhammermethode

drbdadm -- --overwrite-data-of-peer primary data

Nützliche Kommandos für drbdadm

Der Befehl drbdadm ist vergleichbar mit mdadm bei Softraids. Er kann mit verschiedenen Parametern dazu benutzt werden, DRBD-Devices wie oben bereits gezeigt zu erstellen, aber auch zu ändern, zu (de-)aktivieren oder zu löschen.

Volle Neusynchronisation

von /dev/drbd0 mittels der DRBD-Ressource 'home-data' (Status in /proc/drbd)

drbdadm attach home-data

Trennen der Verbindung von Laufwerk und DRBD-Ressource:

drbdadm detach home-data 

Verbinden des DRBD-Treibers mit dem anderen Node:

drbdadm connect home-data 

Bestehende DRBD-Verbindung zum anderen Node trennen:

drbdadm disconnect home-data 

Masterrolle agbgeben:

drbdadm secondary home-data

Masterrolle übernehmen:

drbdadm primary home-data 

Übernahme von Änderungen an /etc/drbd.conf:

drbdadm adjust home-data 

Statusabfrage der Verbindung:

drbdadm role home-data

Synrate

erhöhen

  • drbdadm disk-options --c-plan-ahead=0 --resync-rate=110M home-data

rückgängig machen

  • drbdadm adjust home-data

Links