Schlagwort-Archive: drbd

drbd primary über Clustersoftware setzen

Das drbd und auch die Clustersoftware(Pacemaker und Corosync) wurden eingerichtet. Im nächsten Schritt geht es darum Pacemaker so zu konfigurieren das die Software das primary device des drbd setzt.

Folgendes muss auf der Kommandozeile ausgeführt werden um die benötigte Konfigurationsdatei zu erstellen.

pcs cluster cib drbd_cfg
pcs -f drbd_cfg resource create drbd-data ocf:linbit:drbd drbd_resource=data op monitor interval=60s
pcs -f drbd_cfg resource master drbd-datamaster drbd-data master-max=1 master-node-max=1 clone-max=2 clone-node-max=1 notify=true

Im Anschluss die Datei an das cluster übergeben pcs cluster cib-push drbd_cfg
und über pcs status sollte man folgende Ausgabe erhalten:

Current DC: drbd1 - partition with quorum
Version: 1.1.10-14.el6_5.3-368c726
2 Nodes configured
2 Resources configured

Online: [ drbd1 drbd2 ]

Full list of resources:

Master/Slave Set: drbd-datamaster [drbd-data]
Masters: [ drbd1 ]
Slaves: [ drbd2 ]

Zur Zeit läuft der primary Master auf dem drbd1, über den Befehl pcs resource move drbd-datamaster drbd2 wechselt der primary zum Server drbd2.

Jetzt muss noch noch manuel das entsprechende Device auf dem primary Master gemountet werden.

Automatisch mounten

Das mounten kann auch von der Clustersoftware übernommen werden, hierfür muss folgendes als root auf der Kommandozeile ausgeführt werden.

pcs cluster cib fs_cfg
pcs -f fs_cfg resource create appfs Filesystem device="/dev/drbd1" directory="/app" fstype="ext4"
pcs -f fs_cfg constraint colocation add appfs drbd-datamaster INFINITY with-rsc-role=Master
pcs -f fs_cfg constraint order promote drbd-datamaster then start appfs
pcs -f fs_cfg constraint
pcs -f fs_cfg resource show
pcs cluster cib-push fs_cfg

In der oberen Konfiguration wird das Device /dev/drbd1 nach /app gemountet, zuvor muss mit mkdir /app das /app Verzeichniss angelegt werden.

Ausgabe pcs status:

Cluster name: clusterOne
Last updated: Thu Jul 17 16:53:51 2014
Last change: Thu Jul 17 16:53:43 2014 via crm_resource on drbd1
Stack: cman
Current DC: drbd1 - partition with quorum
Version: 1.1.10-14.el6_5.3-368c726
2 Nodes configured
3 Resources configured

Online: [ drbd1 drbd2 ]

Full list of resources:

Master/Slave Set: drbd-datamaster [drbd-data]
Masters: [ drbd2 ]
Slaves: [ drbd1 ]
appfs (ocf::heartbeat:Filesystem): Started drbd2

Installation und Konfiguration von Pacemaker und coroync unter CentOS

Damit das Primary device aus dem Artikel automatisch gesetzt werden kann, müssen die folgenden Softwarepakete installiert werden.

yum install pacemaker corosync pcs cman

Für die gegenseitige Authentifizierung der beiden Systeme wird über corosync-keygen ein authkey erstellt und unter /etc/corosync/authkey abgelegt. Der authkey muss nur auf einem System erstellt werden und wird dann auf das andere System kopiert.

Im Anschluss die Datei etc/corosync/corosync.conf.example nach etc/corosync/corosync.conf kopieren und die IP Adresse anpassen.
# Please read the corosync.conf.5 manual page
compatibility: whitetank

totem {
version: 2
secauth: off
threads: 0
interface {
ringnumber: 0
bindnetaddr: 192.168.1.1
mcastaddr: 226.94.1.1
mcastport: 5405
ttl: 1
}
}

logging {
fileline: off
to_stderr: no
to_logfile: yes
to_syslog: yes
logfile: /var/log/cluster/corosync.log
debug: off
timestamp: on
logger_subsys {
subsys: AMF
debug: off
}
}

amf {
mode: disabled
}

Ich verwende in diesem Beispiel die IP-Adresse, die ich auch für die drbd Devices verwendet habe. Neben der corosync.conf wird auch die /etc/cluster/cluster.conf benötigt:

<cluster name="clusterOne" config_version="2">
<cman two_node="1" expected_votes="1"/>
<clusternodes>
<clusternode name="drbd1" nodeid="1">
<fence>
</fence>
</clusternode>
<clusternode name="drbd2" nodeid="2">
<fence>
</fence>
</clusternode>
</clusternodes>
<fencedevices>
</fencedevices>
<rm>
</rm>
</cluster>

Damit die clustersoftware ohne Probleme gestartet werden kann, müssen die IP Adressen von drbd1 und drbd2 in der /etc/hosts hinterlegt werden. Ansonsten könnte es zu folgenden Fehler kommen:

Starting cman... Can't determine address family of nodenameUnable to set mcast_name
Unable to get the configuration
Can't determine address family of nodename
cman_tool: corosync daemon didn't start Check cluster logs for details
[FEHLGESCHLAGEN]

Neben den gerade aufgeführten Dateien muss noch die Datei /etc/corosync/service.d/pcmk mit folgendem Inhalt erstellt werden.
service {
# Load the Pacemaker Cluster Resource Manager
name: pacemaker
ver: 1
}

Als letzten Punkt noch die folgenden Befehle auf der Kommandozeile ausführen.
echo "CMAN_QUORUM_TIMEOUT=0" >> /etc/sysconfig/cman
pcs property set stonith-enabled=false

Das ganze wird dann über /etc/init.d/pacemaker start gestartet und über pcs status kann festgestellt werden ob die Nodes (drbd1 + drbd2) online sind.
pcs status
Cluster name: clusterOne
Last updated: Thu May 1 21:29:21 2014
Last change: Thu May 1 21:28:07 2014 via cibadmin on drbd2
Stack: cman
Current DC: drbd2 - partition with quorum
Version: 1.1.10-14.el6_5.3-368c726
2 Nodes configured
0 Resources configured

Online: [ drbd1 drbd2 ]

Full list of resources:

Im nächsten Artikel geht es um die Konfiguration des drbd in Pacemaker.

[drbd] Need access to UpToDate data

Als ich an dem drbd und corosync weiterarbeiten wollte, startete ich zunächst meine virtuellen Maschinen und überprüfte ob das drbd noch funktionierte.
Über cat /proc/drbd erhielt ich folgende Ausgabe
version: 8.4.4 (api:1/proto:86-101)
GIT-hash: 599f286440bd633d15d5ff985204aff4bccffadd build by phil@Build64R6, 2013-10-14 15:33:06

1: cs:Connected ro:Secondary/Secondary ds:Diskless/Diskless C r-----
ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:b oos:0

Nun wollte ich auf dem drbd1 das drbd device als Master setzen.
Jedoch nach dem absetzen des Befehls drbdadm primary –force data erhielt ich die Fehlermeldung.
1: State change failed: (-2) Need access to UpToDate data
Command 'drbdsetup primary 1 --force' terminated with exit code 17

Erst hier viel mir auf, das ich bei der Ausführung von cat /proc/drbd ein Diskless in der Ausgabe hatte.

Bei der Migration der virtuellen Maschinen vom VMWare Player zu Parallels ist anscheinend die /dev/sdb verloren gegangen, dadurch fehlten dem drdb die benötigten Festplatten.
Letztendlich richtete ich das /dev/sdb neu ein und im Anschluss das drdb device.

brbd unter centos installieren

Angenommen man betreibt einen kleinen Server auf dem Daten abgelegt werden, diese werden zur Sicherheit auf zum Beispiel einem Raid abgelegt. Nun sollen die abgelegten Daten beim Ausfall des Server schnellstmöglich auf einem anderen System zur Verfügung stehen. Eine Möglichkeit die Daten auf den anderen Server zu kopieren wäre ein cronjob der alle x Minuten rsync ausführt. Eine weitaus bessere Lösung ist drbd.
Grob gesagt ist drbd ein Raid zwischen zwei Servern und wer mehr darüber wissen möchte, sollte sich die Seite http://www.drbd.org/ anschauen.

Zunächst muss unter centos das Repository installiert werden:
rpm -Uvh http://elrepo.org/elrepo-release-6-5.el6.elrepo.noarch.rpm
Im Anschluss die benötigten Programme installieren
yum install drbd84 kmod-drbd84

Für das drbd device habe ich auf beiden Servern(drbd1,drbd2) /dev/sdb angelegt und die Netzwerkkarten eth1 über ein Crossover Kabel miteinander verbunden.

Die Konfiguration des drbd Device erfolgt in der Datei /etc/drbd.d/data.res:

resource data {
net{
csums-alg md5;
}
disk {
resync-rate 40M;
}
on drbd1 {
device /dev/drbd1;
disk /dev/sdb;
address 192.168.1.1:7789;
meta-disk internal;
}
on drbd2 {
device /dev/drbd1;
disk /dev/sdb;
address 192.168.1.2:7789;
meta-disk internal;
}
}

Dann die drbd devices auf beiden Servern initialisieren:
drbdadm create-md data

Ausgabe:
Writing meta data...
initializing activity log
NOT initializing bitmap
New drbd meta data block successfully created.
success

Im Anschluss das drbd auf beiden Servern starten /etc/init.d/drbd start und das Device aktivieren drbdadm up data.

Über cat /proc/drbd kann man feststellen ob die beiden drbd’s miteinander verbunden sind.
cs:Connected ro:Secondary/Secondary ds:Inconsistent/Inconsistent C r—–

Sollte dort anstatt Connected WFConnection stehen, konnte keine Verbindung hergestellt werden.

Zum Schluss muss auf einem der Server das drbd device als primary gesetzt werden, automatisch startet dann die Synchronisierung.

drbdadm primary --force data

Die Ausgabe von cat /proc/drbd sieht dann wie folgt aus
1: cs:SyncSource ro:Primary/Secondary ds:UpToDate/Inconsistent C r-----
ns:0 nr:0 dw:0 dr:70296 al:0 bm:4 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:10415772
[>....................] sync'ed: 0.8% (10168/10236)M
finish: 0:02:28 speed: 69,632 (69,632) K/sec

Während die Synchronisierung läuft, kann bereits das Dateisystem auf gewohntem Weg (mkfs.ext4 /dev/drbd1) formatiert werden.

Nach der Formatierung kann das drbd device gemountet und genutzt werden.

drbd Resource auf dem anderen Server mounten

Möchte man das drbd Device auf dem anderen Server mounten, muß man es zunächst unmounten und das drbd device von Primary auf Secondary setzen.

umount /dev/drbd1
drbdadmin secondary data

Nun kann auf dem zweiten Server das drbd Device als primary gesetzt und gemounted werden.

Anmerkung
Ich bin in dem kleinen Artikel nicht auf die Iptables eingegangen, diese müssen natürlich auch entsprechend angepasst werden.
Demnächst werde ich einen Artikel erstellen in dem es darum geht, das eine Clustersoftware das setzen des Primary drbd device und das mounten übernimmt.