Archiv der Kategorie: linux

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.

[vdr] doppelte Aufnahmen löschen

Zum Fernsehen komme ich nicht viel und damit ich die ein oder andere Folge nicht verpasse, nutze ich den Linux Videorekorder.

Ein sehr nützliches Plugin ist epgsearch, mit dessen Hilfe der Timer automatisch programmiert wird. Es können Suchbegriffe eingegeben werden und der vdr programmiert den Timer wenn der gesuchte Begriff im Titel oder in der Beschreibung gefunden wurde.
Neben den Suchbegriff können noch Kanäle ausgewählt werden, auf denen aufgenommen werden darf.
Das Plugin bietet auch eine Funktion das bereits aufgenommene Folgen nicht noch einmal aufgenommen werden sollen, leider habe ich diese Funktion erst spät entdeckt und nun wurden einige Folgen doppelt aufgenommen.

Damit ich die doppelten Folgen schnell entfernen kann, habe ich mir folgendes Script erstellt.
#!/bin/bash
VDRPFAD=/vdr

grep "D " --include="info" -R /vdr/ | cut -d ":" -f 2 | sort | uniq -d > $VDRPFAD/vdrtemp

while read i
do
FILE=`grep "$i" --include="info" -R /vdr | tail -1 | cut -d ':' -f1 | sed -e 's/\/info//g'`
rm -R $FILE

done < $VDRPFAD/vdrtemp rm $VDRPFAD/vdrtemp

Das Script sucht nach doppelten Beschreibungen und löscht dann eine der gefundenen Aufnahmen.

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.

[gerrit] Benutzer auf einen Branch einschränken

Im Gerrit ist es möglich, das ein Benutzer nur den Zugriff auf einen bestimmten Branch bekommt.

Für das Lese und Schreibrecht auf den Branch develop(refs/heads/develop) werden die Rechte Read, Push und Create Referenz benötigt.

Wenn der Benutzer nur das angegebene Recht hat, ist er nicht mehr in der Lage auf das gitweb zuzugreifen. Um das gitweb nutzen zu können, benötigt der Benutzer das Read Recht auf refs/*.
Hat der Benutzer jedoch das Recht, kann er auf alle Branches innerhalb des Repositorys zugreifen.