Clustering mit CentOS 7 und Pacemaker Corosync

In diesem Artikel möchte ich die Einrichtung eines Clusters auf einem CentOS 7 System zeigen.
Eine Veränderung zu CentOS 6 ist der Wegfall des Cluster Ressource Managers (crm), der jetzt durch pcs ersetzt wurde.

In diesem Beispiel habe ich zwei Maschinen, die bei mir folgende Daten haben:

node1.floaz.de
Interne IP: 192.168.100.2
Externe IP: 1.2.3.4

node2.floaz.de
Interne IP: 192.168.100.3
Externe IP: 1.2.3.5

Die Netzwerkkarten habe ich bereits konfiguriert!
Mittels ip addr bitte einmal überprüfen, ob die Knoten richtig konfiguriert sind. Beide sollten sich gegenseitig anpingen können.

Wir schließen die Netzwerkkonfiguration ab indem wir auf beiden Nodes den Hostname (/etc/hostname) setzen und beide interne Adressen in /etc/hosts aufnehmen.

Auf beiden Knoten sollte folgendes stehen:
vi /etc/hosts
192.168.100.2 node1.floaz.de
192.168.100.3 node2.floaz.de

Nun muss noch die Firewall auf beiden Knoten eingerichtet werden:
firewall-cmd --zone=trusted --add-source=192.168.100.0/24 --permanent
firewall-cmd --zone=trusted --add-service=ha-cluster --permanent
firewall-cmd --reload

Anschließend installieren wir corosync und pacemaker:
yum install corosync pacemaker pcs
systemctl start pcsd.service
systemctl enable pcsd.service

Auf beiden Rechnern wurde automatisch ein Benutzer hacluster erstellt. Für diesen müssen wir das Kennwort setzen, damit die Knoten sich mithilfe dessen jeweils authentifizieren können.
Auf beiden Nodes:
passwd hacluster
pcs cluster auth node1.floaz.de
pcs cluster auth node2.floaz.de
Username: hacluster
Password: ********

Auf einem der beiden Nodes starten wir nun die initiale Konfiguration des Clusters:
pcs cluster setup --start --name cluster123 node1.floaz.de node2.floaz.de --transport udpu

Außerdem schalten wir quorum und stonith aus, da wir nur ein 2-Knoten-Cluster haben. Dies hat zur Folge, dass wenn nur das interne Netzwerk zusammenbricht, beide Knoten denken, der jeweils andere ist down, und sich dadurch selber als primary sehen. Das sollte man zumindest im Hinterkopf haben!

pcs property set stonith-enabled=false
pcs property set no-quorum-policy=ignore

Nun legen wir eine sog. Service-IP-Ressource an, über die dann der jeweils aktive Knoten von außen erreichbar ist.
pcs resource create VirtualIP ocf:heartbeat:IPaddr2 ip=1.2.3.6 cidr_netmask=32 nic=eth1 op monitor interval=20s

Anschließend schauen wir uns den Status des Clusters an:

pcs status

Online: [ testnode1 testnode2 ]
Full list of resources:
VirtualIP (ocf::heartbeat:IPaddr2): Started node1.floaz.de

Zum Schluss noch autostart auf beiden Knoten einrichten:

systemctl enable corosync.service
systemctl enable pacemaker.service

Fertig.

Unetbootin mit NTFS

Die aktuelle Version von Unetbootin erkennt keine NTFS-formatierten USB-Partitionen.
Damit man Windows 7 oder 8 von USB-Stick installieren kann, muss man allerdings die Daten auf eine NTFS-Partition bekommen.
Folgender Workaround hilft (sdc1 muss natürlich durch die jeweilige Partition ersetzt werden):

mkfs.ntfs /dev/sdc1
unetbootin installtype=USB targetdrive=/dev/sdc1

Apache Directory LDAP API und SSL

Nach längerem suchen und ausprobieren, habe ich mich für die Apache Directory LDAP API Library entschieden. Sie ist einfach, verständlich und klar strukturiert, und sie eignet sich hervorragend für Spring und OSGI. In diesem kurzen Post möchte ich zeigen, wie einfach ein Verbindungsaufbau ist.
Mir ist dabei vor allem wichtig, dass die Verbindung verschlüsselt ist. Das sollte heute eigentlich Standard sein, dennoch sieht man in vielen Tutorials immer nur die Verwendung des Port 389 auf „localhost“ ohne SSL oder StartTLS.
Apache Directory LDAP API und SSL weiterlesen

BtrFs Kommandos

fstab
Btrfs on a SSD: (deprecated)
noatime,compress=lzo,ssd,discard,space_cache,autodefrag,inode_cache

Btrfs on a HDD: (deprecated)
compress-force=zlib,autodefrag,nospace_cache

Btrfs mit suvolume: (deprecated)
subvol=var

Subvolumes
btrfs subvolume create subvolume-name
btrfs subvolume list -p .
btrfs subvolume set-default subvolume-id /.

GPG – Übersicht der Kommandos

Neuen Key erstellen
Der Key wird dann allerdings nicht als Datei abgespeichert, sondern in der Key-Datenbank abgelegt. Um ihn als Datei zu speichern, muss man ihn noch exportieren.
gpg --gen-key

Alle Public-Schlüssel auflisten
gpg -k

Alle Private-Schlüssel auflisten
gpg -K

Exportieren Public
gpg --output alice.gpg --export alice@cyb.org
oder
gpg --output alice.gpg --export DA46C31F

Exportieren Private
gpg --output alice.gpg --export-secret-key DA46C31F

Verschlüsseln ohne Schlüsseldatei
Verschlüsseln durch ein Passwort. Es folgt eine interaktive Passwortabfrage.
gpg --output doc.txt.gpg --symmetric doc.txt

Referenz: http://www.gnupg.de/gph/de/manual/book1.html

SSH Known Hosts finden

Hosts in der Datei „known_hosts“ zu finden, ist nicht ganz einfach, da der Hostnamen gehasht wird. Um dennoch herauszufinden, ob und wo sich der Eintrag in der Datei befindet, muss folgender Befehl abgesetzt werden:
ssh-keygen -H -F <hostname>

Das zirkuläre Menü in der Sampler-Demo von Vaadin finde ich sehr schön. Leider gibt es das noch nicht als Addon. Das wäre ein wirklich schönes Addon.  😉

LDAP installieren und konfigurieren (Ideen)

LDAP unter CentOS 6.4 einzurichten ist nicht zu kompliziert, wie ich finde. Zuerst muss man mit dem Paketmanager yum, die Pakete installieren:

  • openldap-servers
  • openldap-client

Damit ist die Installation schon geschehen, es folgt die Konfiguration! Die scheint ein klein wenig schwieriger zu sein, da man in mehreren Dateien schauen muss. Die Konfiguration findet nicht mehr in einer Konfigurationsdatei statt, sondern in einem dafür vorgesehenen LDAP-Baum. Dieser hat als Root-DN: „cn=config“.

Um die config dennoch zu ändern, ohne den Server zu starten, kann man in das Verzeichnis „/etc/openldap/slapd.conf/cn=config“ gehen und dort die Dateien anpassen. Diese liegen in einem LDIF-Format vor und können, soweit der Server ausgeschaltet ist, geändert werden. Folgende Informationen müssen geändert werden:

  • Base-DN der Datenbank
  • Rootbenutzer-DN für die Datenbank
  • Rootbenutzer-Password für die Datenbank
  • Rootbenutzer-DN für den Config-Baum
  • Rootbenutzer-Password für den Config-Baum

IPv6 ausschalten

Folgendes funktioniert unter der Linux Distirbution CentOS 6.x:

In die Datei /etc/sysctl.conf folgendes eintragen:

net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1

Damit man das System dann aber nicht restarten muss, kann auch folgendes in der Konsole als Benutzer root ausgeführt werden.

echo 1 > /proc/sys/net/ipv6/conf/all/disable_ipv6
echo 1 > /proc/sys/net/ipv6/conf/default/disable_ipv6

IPv6 ausschalten weiterlesen