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

flattr this!

Ausgabe des NFC Moduls über die Shell verwenden

Die Inbetriebnahme des NFC Moduls ist wie in dem Artikel zu lesen sehr einfach. Leider lässt sich die Ausgabe mit Hilfe von | nicht umleiten und kann somit auf der Shell nicht weiter verwendet werden.
Ich habe mit den Sourcecode(main.c) der mitgelieferten Polling Software angesehen und ein wenig angepasst, nun wird die UID des Tags in die Datei polling.log geschrieben.

Um so wenig Ausgaben wie möglich zu erhalten habe ich die meisten printf... Ausgaben aus dem Code entfernt, ausgegeben werden nun nur noch Fehlerausgaben und die UID.

Damit die Ausgabe in eine Datei geschrieben wird, habe ich folgendes in der main.c ausgetauscht.
Vorher:
printf("UID: ");
uint8_t i;
for(i = 0; i < bLength; i++)
{
printf("%02X ", bUid[i]);
}
printf("\n\n");

Nachher:
uint8_t i;
FILE *f = fopen("polling.log","a+");
for(i = 0; i < bLength; i++)
{
fprintf(f,"%02X", bUid[i]);
}
fprintf(f,"%s\n", "");
fclose(f);

Zusätzlich habe ich sleep(1) auf sleep(4) gesetzt.

Nach dem kompilieren kann die Software wie vorher über ./card_polling gestartet werde und die UID´s werden in die polling.log geschrieben.

Die UID´s aus der polling.log greife ich über ein kleines Shellscript ab, hierfür mussten zuvor die inotify-tools installiert werden.

apt-get install inotify-tools

Das Script selbst ist wie folgt aufgebaut:
#!/bin/bash
FILE="polling.log"
while true;
do
inotifywait -e modify "${FILE}"
for i in `cat ${FILE}`
do
echo $i
echo "" > ${FILE}
done
done

Wenn das Shellscript gestartet wurde, wird die polling.log überwacht.
Sobald es eine Änderung gibt wird die UID(echo $i) ausgegeben und im Anschluss wird die polling.log geleert.
Anstatt der echo $i Ausgabe könnte die UID auch in eine mysql Datenbank geschrieben werden, diese könnte dann in einem Webfrontend für zum Beispiel eine Zeiterfassung verwendet werden.
Es wäre auch möglich mit zusätzlicher Hardware ein Türschloss zu öffnen oder ein Programm auf dem Raspberry Pi zu starten.

Natürlich wäre das ganze einfacher wenn man den Sourcecode komplett anpassen würde, um zum Beispiel die UID in die mysql Datenbank zu schreiben, für mich reicht jedoch die Verwendung der UID über die Shell.

flattr this!

NFC Modul für den Raspberry Pi

Zu dem NFC Modul welches ich bei Farnell element14 bestellt habe gehört das Modul selbst, ein kleiner Zettel mit Mini Anleitung und eine RFID Karte. Das Modul ist ungefähr so groß wie der Rasbperry Pi und wird direkt auf die GPIO Ports gesetzt. Durch das aufsetzen des Moduls sind leider die anderen GPIO Ports nicht mehr nutzbar.

Damit das Modul genutzt werden kann muss SPI aktiviert werden.
Hierfür auf der Kommandozeile sudo raspi-config ausführen und unter den Advancded Options SPI aktivieren, im Anschluss den Rasbperry Pi neustarten.

Über einem Windows oder Linux Rechner (nicht über den Rasbperry Pi) die benötigte Software hier herunterladen und entpacken. In den entpackten Verzeichnissen befindet sich die card_polling.zip, diese muss auf den Rasbperry Pi kopiert und werden.

Für das kompilieren der polling Software muss zunächst cmake installiert werden.

Als root auf der Kommandozeile:
apt-get update
apt-get install cmake

Nun als Pi user in das Verzeichniss wechseln in der die zip Datei liegt und mit unzip card_polling.zip entpacken.
Nach dem entpacken müssen folgende Befehle ausgeführt werden:

cd ~/card_polling/build
cmake ../source
make

Nun über ./card_polling die kompilierte Software starten und das polling beginnt.

/home/pi/card_polling/build# ./card_polling
/****** Begin Polling ******/
No card or Tag detected
No card or Tag detected
MIFARE Ultralight detected
UID: 04 F1 DE 81 A0 22 80

MIFARE Ultralight detected
UID: 04 F1 DE 81 A0 22 80

No card or Tag detected
No card or Tag detected

Sobald eine RFID Karte auf das Modul gelegt wird, gibt die Software den Typ und die UID der Karte aus.

NFC Paket

NFC montiert

UPDATE:Leider hatte ich vergessen die verwendete Distribution mit anzugeben, ich nutze hier Raspian. Danke für den Hinweis Marco

flattr this!

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.

flattr this!

NFC Modul für den Raspberry Pi

Ich habe in einem der vorangegangenen Artikel das NFC Modul für den Rasbperry Pi erwähnt. Ein Kollege fand die Idee mit den Büchern und der Ausleihverwaltung interessant und nun habe ich das Modul bei Farnell bestellt, damit ich es einmal ausprobieren kann.
Wenn das Modul da ist werde ich hier einen kleinen Artikel veröffentlichen, aus dem hervorgeht wie man es in Betrieb nimmt etc.
Eventuell werde ich auch eine kleine PHP Seite erstellen, über die man die ausgelesene Nummer des RFID tags ausgeben kann.

flattr this!