server:drbd

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
server:drbd [2018/07/09 13:33] stserver:drbd [2020/07/07 15:21] (aktuell) – [DRBD] st
Zeile 1: Zeile 1:
 +====== DRBD ======
 +
 +DRBD ist eine Art [[server:RAID]] 1 über Netzwerk und ist seit [[linux:Kernel]]-version 2.6.33 in [[linux:Linux]] integriert. Man kann damit in vielen Fällen teure "shared storage"-Lösungen ersetzen. Durch eine Kernelmodul wird von DRBD ein virtuelles Device zur Verfügung gestellt, das für die Verteilung der Daten über ein Netzwerk sorgt. Dafür wird einer der Rechner als "primary", der zweite als "secondary" eingestellt. Lesezugriffe werden lokal, Schreibzugriffe zusätzlich auf den jeweils anderen Rechner syncronisiert. 
 +
 +In Kombination mit [[wpde>Heartbeat]] bzw. Pacemaker kann eine automatische Übernahme der Serveraufgaben durch einen bereitstehenden Ersatzrechner übernommen werden.
 +
 +<box 100% red round right | **veraltet**>
 +:!: der Artikel ist aus 2014 und veraltet. Alternativen sind Lösungen wie der [[software:ceph storage cluster]] um stärker in die Breite zu skalieren.
 +</box>
 +
 +^ Kernel-Version ^ enthaltene drbd-Version ^
 +| 2.6.33 | 8.3.7 |
 +| 2.6.34 | 8.3.7 |
 +| 2.6.35 | 8.3.8 |
 +| 2.6.36 | 8.3.8.1 |
 +| 2.6.37 | 8.3.9 |
 +| 2.6.38 | 8.3.9 |
 +| 2.6.39 | 8.3.10 |
 +| 3.0 - 3.4 | 8.3.11 |
 +| 3.5 - 3.7 | 8.3.13 |
 +| 3.8 | 8.4  |
 +
 +
 +===== Links =====
 +
 +  * [[http://www.drbd.org/|drbd.org]]
 +  * [[http://hensoko.gssws.de/2013/03/26/debian-wheezy-drbd-ocfs2-corosync-pacemaker-und-kvm-teil-1-drbd/|Debian wheezy: DRBD, OCFS2, Corosync, Pacemaker und KVM Teil 1: DRBD]] [[http://hensoko.gssws.de/2013/07/03/debian-wheezy-drbd-ocfs2-corosync-pacemaker-und-kvm-teil-2-ocfs2/|Teil2]] [[http://hensoko.gssws.de/2013/07/03/debian-wheezy-drbd-ocfs2-corosync-pacemaker-und-kvm-teil-3-corosync-pacemaker/|Teil3]]
 +  * [[http://www.tecchannel.de/server/linux/1741277/|Linux-Cluster mit Open-Source-Tools - DRBD: RAID1 über das Netzwerk]]
 +  * [[http://www.pro-linux.de/work/virtual-ha/virtual-ha5.html|DRBD, Xen und Heartbeat]]
 +  * [[http://www.online-tutorials.net/internet-netzwerk/drbd/tutorials-t-29-289.html|drbd tutorial]]
 +  * [[http://www.slackworks.com/~dkrovich/DRBD/heartbeat.html|Integrating with the heartbeat package]]
 +  * [[http://wiki.debianforum.de/XenDrbdHeartbeat#head-a3c6673bfae1a3cfaf013655021f5b13b5cb5ce6|XEN, LVM, Cryptdevice, DRBD und Heartbeat]]
 +  * [[http://www.looony.de/index.php/archives/11|DRBD - Netzwerk raid 1 unter Linux mit Heartbeat]]
 +  * [[http://www.linux-magazin.de/heft_abo/ausgaben/2004/07/reservespieler/(kategorie)/0%22| Linux-HA-Cluster mit Heartbeat und DRBD]]
 +  * [[http://searchenterpriselinux.techtarget.com/tip/0,289483,sid39_gci1320334,00.html|Build your own iSCSI SAN appliances, save money Part1]] [[http://searchenterpriselinux.techtarget.com/tip/0,289483,sid39_gci1321524,00.html|Part 2]] [[http://searchenterpriselinux.techtarget.com/tip/0,289483,sid39_gci1320352,00.html|Part 3]] [[http://searchenterpriselinux.techtarget.com/tip/0,289483,sid39_gci1320407,00.html|Part 4]]
 +  * [[http://pronetworkconsulting.com/linux/scripts/add_drbd_resource.html|add_drbd_resource.sh]]
 +
 +===== drbd und Xen =====
 +
 +==== Links ====
 +
 +  * [[drbd]]
 +  * [[http://swik.net/Xen+drbd|Xen + drbd Linksammlung]]
 +  * [[http://fghaas.wordpress.com/2007/09/03/drbd-806-brings-full-live-migration-for-xen-on-drbd/|DRBD 8.0.6 brings full live migration for Xen on DRBD]]
 +  * [[http://fghaas.wordpress.com/2007/06/05/high-availability-virtualization-with-xen-and-drbd/|High-availability virtualization with Xen and DRBD]]
 +
 +
 +===== Installation unter Debian Etch =====
 +
 +In Etch ist lediglich drbd Version 0.7 enthalten die mittels dem module-assistant als Modul passend zum kernel kompiliert wird. D. h. bei Updates von drbd oder dem Kernel muss das Kernelmodul neu übersetzt werden.
 +
 +Weiterhin werden die Kernelquellen (linux-header) benötigt, diese sind für Xen im Paket 
 +''linux-headers-2.6-xen-686'' bzw. für den "normalen" Kernel in ''linux-headers-2.6-686'' .
 +Beim Aufruf von module-assistant werden diese benötigen Komponenten jedoch dazu installiert.
 +
 +<code>
 +aptitude install module-assistant build-essential drbd0.7-module-source 
 +m-a a-i drbd0.7
 +</code>
 +
 +  * die 2 Warnungen scheinen keine Auswirkungen zu haben: <file>WARNING: /lib/modules/2.6.18-6-xen-686/kernel/arch/i386/kernel/microcode.ko needs unknown symbol sys_munlock
 +WARNING: /lib/modules/2.6.18-6-xen-686/kernel/arch/i386/kernel/microcode.ko needs unknown symbol sys_mlock
 +</file>
 +
 +Das Modul kann erstmal testweise mit dem Befehl
 +<code>modprobe drbd</code> geladen werden. 
 +
 +  * Die beiden Hosts sind erstmal inkonsistent, was auch <code>drbdadm state r0 </code> bestätigt, dort werden beide Gegenstellen als secondary angegeben.
 +  * Also müssen wir auf dem Master die Ressource aktivieren.
 +<code>drbdadm -- --do-what-I-say primary all</code> Die fortschreitende Syncronisation ist mit 
 +<code> cat /proc/drbd</code> zu beobachten. <file>
 +master:~# cat /proc/drbd
 +version: 0.7.21 (api:79/proto:74)
 +SVN Revision: 2326 build by root@file, 2008-10-01 17:29:19
 + 0: cs:SyncSource st:Primary/Secondary ld:Consistent
 +    ns:5656576 nr:0 dw:0 dr:5656576 al:0 bm:345 lo:0 pe:0 ua:0 ap:0
 + [==>.................] sync'ed: 11.7% (42033/47557)M
 + finish: 0:31:01 speed: 23,060 (20,492) K/sec</file> Nach der Syncronisation ist der Zustand konsistent und die Rollen sind verteilt: <file>xeon:~# cat /proc/drbd
 +version: 0.7.21 (api:79/proto:74)
 +SVN Revision: 2326 build by root@file, 2008-10-01 17:29:19
 + 0: cs:Connected st:Primary/Secondary ld:Consistent
 +    ns:48698492 nr:0 dw:0 dr:48698492 al:0 bm:2973 lo:0 pe:0 ua:0 ap:0</file>
 +
 +^ Kürzel ^ Bedeutung ^
 +| cs | connection state |
 +| st | node state (local/remote) |
 +| ld | local data consistency |
 +| ds | data consistency |
 +| ns | network send |
 +| nr | network receive |
 +| dw | disk write |
 +| dr | disk read |
 +| pe | pending (waiting for ack) |
 +| ua | unack'd (still need to send ack) |
 +| al | access log write count  |
 +
 +  * Der Ressource fehlt jetzt noch ein Dateisystem, dies kann mit den verbreiteten (nicht clusterfähigen) Dateisystemen wie ext3/xfs/reiserfs nur auf einem Host gemounted werden. 
 +
 +
 +===== Installation unter Debian Lenny =====
 +
 +In Lenny ist drbd Version 8.0.14 enthalten.
 +
 +Für AMD64:
 +
 +<code>
 +aptitude install drbd8-modules-2.6.26-2-amd64 drbd8-utils
 +</code>
 +Die Version 8.3 kann über [[http://packages.debian.org/lenny-backports/drbd8-source|lenny-backports]] bezogen werden.
 +
 +
 +===== Rollen manuell umschalten =====
 +Falls der primary neu startet, wird beim starten gesynct und der status ist secondary/secondary. 
 +
 +  * auf dem aktuellen primary (wird secondary): <code>umount /mnt/drbd0 && drbdadm secondary all</code>
 +  * auf dem aktuellen secondary (wird neuer primary):<code>drbdadm primary all && mount /dev/drbd0</code>
 +
 +
 +
 +
 +==== Links ====
 +  * [[http://www.calivia.com/blog/mike/drbd-on-ubuntu-dapper-drake-and-gentoo|DRBD on Ubuntu Dapper Drake and Gentoo]]
 +
 +
 +===== Begriffe =====
 +  * **syncronitäts-Bitmap**: dient für Prüfung ob ein Block auf einem Knoten mit dem des anderen syncron sind. Fällt ein Knoten aus wird beim Beschreiben des verbleibenden Knotens diese Bit gesetzt, so dass schnell wiederhergestellt werden kann.
 +  * **activity-log**: hier werden beschriebene Blöcke festgehalten. Beim Ausfall eines Knoten werden die Blöcke die im activity-log stehen überprüft/syncronisiert. Andernfalls müssten alle Blöcke überprüft werden.
 +
 +
 +
 +===== Konfiguration =====
 +
 +Konfigurationsdatei erstellen und exakt gleich :!: auf beide hosts verteilen. Siehe auch <code>man 5 drbd.conf</code>
 +
 +
 +===== Beispiel =====
 +
 +<file>
 +#
 +# drbd-conf - SYNC CHANGES ALWAYS BETWEEN ALL NODES!
 +#
 +
 +
 +global { 
 +#
 +}
 +
 +#
 +# 50G mirrored partition
 +#
 +resource r50g {
 +
 + # C is: data has reached _both_ local and remote DISK
 + protocol C;
 + incon-degr-cmd "echo '!DRBD! pri on incon-degr' | wall ; sleep 60 ; halt -f";
 + # incon-degr-cmd "halt -f";
 +
 +
 + startup {
 +
 + # Wait for connection timeout if this node was a degraded cluster.
 + # In case a degraded cluster (= cluster with only one node left)
 + # is rebooted, this timeout value is used.
 + degr-wfc-timeout 120;    # 2 minutes.
 + }
 +
 + disk {
 + # if the lower level device reports io-error you have the choice of
 + #  "pass_on"  ->  Report the io-error to the upper layers.
 + #                 Primary   -> report it to the mounted file system.
 + #                 Secondary -> ignore it.
 + #  "panic"    ->  The node leaves the cluster by doing a kernel panic.
 + #  "detach"   ->  The node drops its backing storage device, and
 + #                 continues in disk less mode.
 + #
 + on-io-error   detach;
 + }
 +
 + net{
 + #
 + }
 +
 +
 + syncer {
 + # Limit the bandwith used by the resynchronisation process.
 + # default unit is kByte/sec; optional suffixes K,M,G are allowed.
 + rate 20M;
 + }
 +
 + on xeon {
 + device     /dev/drbd0;
 + disk       /dev/vg_daten/lv_drbd;
 + address    172.16.0.1:7788;
 + meta-disk  internal;
 + }
 +
 + on debfail {
 + device     /dev/drbd0;
 + disk       /dev/sdb3;
 + address    172.16.0.2:7788;
 + meta-disk  internal;
 + }
 +}
 +</file>
 +
 +  * Es gibt also zwei Hosts (xeon und debfail)
 +  * diese haben jeweils 2 Netzwerkkarten
 +    * eine für das normale Intranet
 +    * eine direkte cross-over Verbindung (172.16.0.1 und 172.16.0.2) zum jeweils anderen um split-brain durch defekten Switch zu vermeiden.
 +
 +
 +
 +
 +
 +==== drbdadm ====
 +
 +drbdadm BEFEHL RESSOURCE
 +
 +also z.B. ''drbdadm cstate r50g''
 +
 +  * **Befehle** (commands):
 +    * attach / detach
 +    * connect / disconnect
 +    * up /  down
 +    * primary / secondary
 +    * invalidate / invalidate_remote
 +    * resize / syncer
 +    * adjust / wait_connect
 +    * **state** (master/slave) / **cstate** (Verbindungsstatus)
 +    * dump / wait_con_int
 +Version: 0.7.21 
 +
 +