Tutorial

Einleitung – Software-Verteilung

Software-Installation bzw. Verteilung auf PCs wird in vielen Netzwerken immer noch nach der „Turnschuh“-Methode gemacht. Ein Administrator läuft an den betroffenen Rechner, installiert die gewünschte Software per CD/DVD oder USB-Stick. In den besseren Fällen erfolgt die manuelle Installation remote über Teamviewer oder andere Fernwartungs-Software. – Alles in allem ist die manuelle Installation von Software bzw. Ganzen PCs oder Notebooks vor allem aus zeitlichen Gesichtspunkten nicht effizient.

Besser wäre es einen PC möglichst vollautomatisch zu installieren. Gleiches gilt natürlich für die nachträgliche Installation von Software auf Windows-PCs. Wie lange bräuchte wohl ein IT-Administrator um auf 30 Endgeräten die Aktualisierung der Java-Runtime, des Adobe Acrobat Readers oder einer anderen Software die auf praktisch jedem Endgerät vorhanden ist?

Die Lösung für diesen Zeitfresser sind Software-Tools, die die Inventarisierung und Software-Verteilung im Idealfall vollautomatisch übernehmen. Zum Glück existieren neben kommerziellen Systemen wie SCCM von Microsoft, PDQ-Deploy oder DeskCenter auch Opensource-Kandidaten aus der Gruppe der Software-Deployment-Tools. Eines davon – OPSI (kurz für Open PC Server Integration) – möchten wir heute vorstellen.

OPSI ist Opensource und wird von der deutschen Firma UIB aus Mainz entwickelt. Da OPSI zur Benutzung nicht lizenziert werden muss, kommt die Software oft bei öffentlichen Verwaltungen (Behörden, Schulen, etc.) vor. Aber auch kleinere mittelständische Firmen nutzen OPSI um PCs zu installieren und Software auszurollen.

Was kann OPSI

Der Leistungsumfang von OPSI ist durchaus ansehnlich. Mit dem Software-Deployment-Tool kann der IT-Administrator die folgenden Aufgaben erledigen:

  • Betriebssystem-Installationen (via PXE-Boot oder Boot-CD)
  • Software-Installationen – in der Regel als „Silent“ oder unattended Installation
  • De-Installationen und Updates bestehender Software
  • Betriebssystem-Updates
  • Konfigurationen von Endgeräten (bspw. Domain-Beitritt) etwa in der Registry
  • Inventarisierung von Software und Hardware

Interessant ist hierbei, daß über die Skript-Sprache von OPSI ganz normale cmd Befehle von Windows im Kontext eines Administrators ausgeführt werden können. Damit kann bspw. mit wenigen Zeilen Code etwa die Windows Firewall ein- oder ausgeschaltet werden.

Konzept der Softwareverteiling mit OPSI

OPSI besteht aus einem Linux-Server, auf dem neben mysql (bzw. mariadb) noch Samba installiert sein muss. Der eigentliche Verteilungsmechanismus erfolgt vom Server aus über einen in Java geschriebenen Client, vom den aus der IT-Administrator die Software-Pakete auf die Notebooks und PCs der Anwender verteilt. Auf den Endgeräten muss ein Agent als Dienst für OPSI installiert sein.

Wie auch bei kommerziellen Deployment-Produkten muss zunächst aus der Installations-Datei des jeweiligen Software-Herstellers ein „Paket“ zur automatischen Installation erstellt werden. Diese Paketierung erfolgt bei OPSI in einer Skript-ähnlichen Sprache.

Voraussetzungen

Um OPSI zu testen oder produktiv zu nutzen, benötigt man lediglich einen einfachen Linux-Server. Opsi funktioniert unter allen wesentlichen Linux-Distributionen (Debian, Ubuntu, RHEL, SLES, CentOS, etc.). Für Interessierte stellt der Hersteller UIB auch noch eine fertige virtuelle Maschine für VMWare oder Hyper-V zur Verfügung. Diese kann bereits mit nur einer CPU und 1 GB RAM betrieben werden.

Wer OPSI produktiv einsetzen möchte, sollte eher 2 CPUs und 2-4 GB RAM veranschlagen. Die Größe des Festplatte richtet sich je nach Kundensituation nach

  • Der Anzahl an Endgeräten (diese werden in einer mysql Datenbank gespeichert)
  • Der Summe der Software-Pakete, die später auf der lokalen Freigabe /var/lib/opsi/repository liegen.

Insbesondere die Software-Pakete benötigen Platz. Wer also ein ansehnliches Arsenal an Software hat, die automatisch verteilt werden soll, sollte hier großzügig Plattenplatz einplanen. Hier bietet sich die Installation einer eigenen Partition unter LVM für das Verzeichnis /var/lib/opsi an.

 

Für alles weiter unten Beschriebene nutzen wir ein aktuelles und frisch installiertes CentOS 7 System. Auf diesem haben wir zur Vereinfachung selinx unter /etc/sysconfig/selinux deaktiviert und den firewalld-Daemon deaktiviert. Das Centos selbst bringen wir mit „yum –y update“ und einem Reboot auf den aktuellen Stand.

Installation von OPSI

Der OPSI-Server sollte unbedingt eine statische IP-Adresse erhalten. In unserem Fall hat der Host die IP 10.42.136.89 aus unserem Testnetz.

Wichtig: Hostname und IP müssen einwandfrei im DNS aufzulösen sein. Wer auf Nummer sicher gehen möchte, der trägt in die /etc/hosts Datei die eigene IP und den Hostnamen ein:

1
10.42.136.89 opsiserver2.intern.local

 

Im Test störte dabei noch die per dhcp vergebene IPV6 Adresse. Diese deaktivieren wir wie folgt:

vi /etc/sysctl.conf => dort einfügen

1
2
3
net.ipv6.conf.all.disable_ipv6 = 1

net.ipv6.conf.default.disable_ipv6 = 1

anschließend

1
sysctl -p

Vorbereiten der Installation von OPSI

Zum Betrieb braucht OPSI zwingend eine SQL-Datenbank – hier mariadb – und SAMBA für die Dateifreigaben. Daher installieren wir die Pakete Samba und mariadb:

1
yum -y install mariadb-server samba

Anschließend starten und aktivieren wir Samba, NMB und mariadb

1
2
3
4
5
6
7
8
9
10
11
systemctl start smb.service

systemctl start nmb.service

systemctl start mariadb.service

systemctl enable smb.service

systemctl enable nmb.service

systemctl enable mariadb.service

Mariadb sichern wir anschließend noch ab, setzen ein root-Password für die mysql-Datenbank und unterbrinden außerdem den Zugriff von extern per mysql. Eine ausführliche Anleitung zur Installation von mysql bzw. mariadb finden Sie bei uns im Blog.

1
mysql_secure_installation

Zur Abwärtskompatibilität sollte noch folgendes in die Datei /etc/my.cnf im Abschnit [mysqld] eingefügt werden:

1
sql_mode=NO_ENGINE_SUBSTITUTION

Danach starten wir mysqld bzw. mariadb einmal neu

1
Service mariadb restart

Last but not least installieren wir 5 kleine Helferlein, damit wir gleich OPSI richtig herunter laden und installieren können.

1
yum -y install wget mlocate net-tools yum-utils sysstat

OPSI Installation

Die eigentliche Installation von OPSI erfolgt durch das Herunterladen eines Repositories und dem anschließenden Installieren von zwei Opsi-Paketen, die ihrerseits gut zwei Dutzend Software-Pakete nach sich ziehen.

1
2
3
4
5
6
7
8
9
cd /etc/yum.repos.d/

wget https://download.opensuse.org/repositories/home:uibmz:opsi:4.1:stable/CentOS_7/home:uibmz:opsi:4.1:stable.repo

yum makecache

yum –y install opsi-server opsi-configed

yum –y install opsi-windows-support

Hinweis: Bei den obigen Befehlen werden Sie zwischendurch aufgefordert einen „GPG-Schlüssel 0xD8361F81“ zu importieren. Bestätigen Sie dies mit „j“.

OPSI für den ersten Einsatz konfigurieren

Opsi wird mit wenigen Befehlen für den Einsatz vorbereitet:

1
[root@opsiserver2> opsi-setup --configure-mysql

In der sich öffnenden Maske lassen Sie die ersten beiden Zeilen so wie sie sind. Geben Sie bei “Database admin password“ das root-Passwort des mysql-Benutzers root ein. (Das sollten sie weiter oben bei mysql_secure_installation eingegeben haben).

Sofern Sie das mysql-Passwort des neuen mysql-Benutzers „opsi“ mit setzen möchten, so geben Sie ein entsprechendes neues Passwort in der letzten Zeile ein. Der mysql-Benutzer „opsi“ mit diesem Passwort wird anschließend automatisch angelegt.

Tippen Sie mit der TAB-Taste solange bis SIe auf das Feld “OK” gelangen und drücken Return/Enter.

Die eigentliche Konfiguration von OPSI wird mit dem folgenden Befehl erstellt:

1
2
3
4
5
6
7
8
9
[root@opsiserver2 ~] opsi-setup --init-current-config

(...)

Mit dem folgenden Befehl werden alle notwendigen Berechtigungen gesetzt:

[root@opsiserver2 ~] opsi-setup --set-rights

(...)

Danach werden die beiden Services “opsiconfd” sowie “opsipxeconfd” neu gestartet

1
2
3
[root@opsiserver2 ~] systemctl restart opsiconfd

[root@opsiserver2 ~] systemctl restart opsipxeconfd

Der folgende Befehlt bereitet die für OPSI notwendige Samba-Konfiguration vor.

1
opsi-setup --auto-configure-samba

Anschließend sollten die Samba-Dienste neu gestartet werden:

1
2
3
systemctl restart smb.service

systemctl restart nmb.service

Last but not least benötigt OPSI noch zwei Benutzer (pcpatch und „adminuser“) und passende Berechtigungen

1
opsi-admin -d task setPcpatchPassword

Anschließend legen wir einen neuen Benutzer namens “adminuser” an.

1
useradd -m -s /bin/bash adminuser

Wir vergeben nun Passwörter für Unix:

1
passwd adminuser

Ebenso ein Passwort für Samba für den Benutzer „adminuser“

1
smbpasswd -a adminuser

 

Zum Schluss wird die Gruppenmitgliedschaft für den Nutzer „adminuser“ eingerichtet und getestet. Dies erfolgt mit:

1
usermod -aG opsiadmin adminuser

Der getent-Befehl sollte dann so etwas ausgeben wie:

1
2
3
[root@opsi01 ~] getent group opsiadmin

opsiadmin:x:1001:opsiconfd,adminuser

Alle User, die Software packen (opsi-makepackage), installieren (opsi-package-manager) oder Konfigurationsdateien manuell bearbeiten wollen, müssen zusätzlich in der Gruppe pcpatch sein. Daher fügen wir den neuen Benutzer „adminuser“ der Gruppe pcpatch hinzu:

1
usermod -aG pcpatch adminuser

Anschließend lassen wir OPSI noch zwei Dinge anapssen:

1
2
3
opsi-setup --patch-sudoers-file

opsi-set-rights

Zu guter Letzt starten wir den OPSI-Dienst einmal neu

1
systemctl restart opsiconfd.service

Damit haben wir die eigentliche Installation von OPSI geschafft.

DHCP für OPSI einrichten

OPSI benötigt an sich keinen eigenen DHCP-Server zur reinen Software-Paketverteilung. Lediglich eine funktionierende Namensauflösung mit DNS ist erforderlich. Wer aber mit PXE (Preboot Execution Environment) ganze Betriebssystem-Installationen auf „nackten“ Endgeräten vornehmen möchte, der muss zumindest die PXE-Boot Option mit einem dhcp-Server vornehmen.

Das geht entweder mit einem bestehenden dhcp-Server in dem die next-Server Option passend eingetragen wird. Oder man installiert auf dem OPSI-Server einen dhcp-Dienst, der PCs und Notebooks das PXE-Boot-Image übermittelt, wenn Sie neu installiert werden sollen.

Die gleiche Konfiguration funktioniert übrigens auch mit einer pfsense Firewall und dort aktiviertem dhcpd-Dienst. Hier muss im Abschnitt „Network Boot“ die IP-Adresse des OPSI-Servers im Feld „Next Server“ eingegeben werden. In das Feld „Default Bios file name“ wird „linux/pxelinux.0“ eingetragen

Übrigens: Mit OPSI lassen sich nicht nur Windows 7,8 sowie Windows 10 installieren. Auch die Server-Betriebssysteme Windows 2008 R2, 2012 und Windows 2016 Server lassen sich mit OPSI von der Pike auf installieren.

OPSI Pakete herunter laden.

Um die öffentlich verfügbaren Vorlagen und fertigen Software-Pakete zu nutzen, müssen diese einmalig aus dem Internet herunter geladen werden. Das erledigen Sie mit dem folgenden Befehl „opsi-package-updater“.

Achtung: das dauert je nach Internet-Anbindung zwischen 15 und 30 Minuten – an einer dünnen DSL-Leitung auch gerne länger:

1
opsi-package-updater -v install

Eine bestehende Installation aktualisieren Sie mit:

1
opsi-package-updater -v update

 

Mit der OPSI-Konsole starten

Für den Aufruf der Konsole von OPSI benötigen Sie eine aktuelle Java Runtime (Version 1.8) und einen Browser. Um nun OPSI zu nutzen und die Verwaltungs-Oberfläche aufzurufen, öffnen Sie einen Browser und rufen die nachfolgende URL auf:

Die Java/Web-Konsole von Opsi

Die Java/Web-Konsole von Opsi

https://<servername oder IP>:4447/configed.jnlp

Die Zertifikatswarnung bestätigen Sie. Anschließend wählen Sie die oberste Option „opsi configuration editor (java web start)“ oder direkt über https://<servername oder IP>:4447/configed.jnlp . Es öffnet sich eine Java-Anwendung, die einige Sekunden braucht bis sie vollständig geladen ist. In der anschließenden Maske geben Sie den Admin-User „adminuser“ als Benutzer ein und das vorhin für den Benutzer „adminuser“ vergebene Passwort.

Die Übersicht der Verwaltungskonsole von OPSI sieht dann wie folgt aus. Hier gibt es allerdings im Moment noch nicht viel zu sehen – es fehlen noch die Laptops und PCs.

OPSI-Client Agent einrichten

OPSI Client auf dem PC installieren

OPSI Client auf dem PC installieren

Das Salz in der Suppe jeder Software-Verteilung sind neben den Software-Paketen die Clients (also PCs und Notebooks) die in den Genuss der installierten Software kommen sollen.

Damit Software-Pakete via OPSI auf den Clients automatisch installiert werden können, benötigt jeder PC einen OPSI-Client. Dieser muss einmal installiert werden und stellt anschließend die Verbindung zwischen PC und OPSI-Server her.

Es gibt dabei zwei Möglichkeiten, wie der OPSI-Client installiert werden kann:

  • Vom PC aus über die Freigabe \\<opsiserver>\opsi_depot
  • Vom OPSI-Server aus über die c$ Freigabe des Clients

Installation des Agenten über die „Opsi_depot“ Freigabe

Dazu verbinden Sie von dem PC, den Sie in Opsi einbinden möchten die OPSI-Freigabe \\<opsiserver>\opsi_depot mit einem freien Laufwerksbuchstaben auf dem PC.

Dort wechseln Sie ins Verzeichnis opsi-client-agent und führen die Datei „service_setup.cmd“ aus. Sobald das abgeschlossen ist, rebooten Sie den PC.

1
C:\Users\&gt;net use z: \\opsiserver2\opsi_depot /user:pcpatch

Geben Sie das Kennwort für „pcpatch“ ein, um eine Verbindung mit „opsiserver2“ herzustellen:

1
2
3
4
5
6
7
Der Befehl wurde erfolgreich ausgeführt.

C:\Users\&gt; z:

Z:\&gt;cd opsi-client-agent

Z:\opsi-client-agent&gt;service_setup.cmd (return)

Nach der eigentlichen Installation wird noch der Zugang zu OPSI benötigt. Dazu muss interaktiv am Client der Benutzername (bspw. pcpatch oder adminuser) sowie das dazu passende Passwort eingegeben werden.

Achtung: Direkt danach bootet der PC ohne weitere Rückfragen.

Hinweis: Das Skript „service_setup.cmd“ kann auch mit dem Parameter /u aufgerufen werden und verhält sich dann fast „silent“.

 

Nach dem Reboot sollte der PC mit seinem Clientnamen in der OPSI GUI auftauchen.

Installation des OPSI-Agenten vom Server aus

Mit dem Befehl „opsi-client-agent“ aus dem Verzeichnis „/var/lib/opsi/depot“ können Sie auch vom Server aus einen PC aufnehmen. Voraussetzung ist das Vorhandensein der Datei winexe.exe . Außerdem benötigt der PC eine offene c$ Freigabe. Außerdem brauchen sie ein Benutzerkonto auf dem PC sowie das Passwort dazu.

In unseren Tests hakte es bei der Vorgehensweise deutlich öfter als bei der Installation vom PC aus.

Der Vollständigkeit halber:

1
2
3
[root@] cd /var/lib/opsi/depot/opsi-client-agent

[root@] ./opsi-deploy-client-agent -u boehmichen -p --h

 

Mit OPSI Software automatisiert auf dem PC installieren

Mit OPSI ein Software-Paket auf den Client installieren

Mit OPSI ein Software-Paket auf den Client installieren

Auch wenn in der nackten Installation von OPSI kaum fertige Pakete für Windows vorhanden sind, kann man doch zumindest das Paket zur Hardware-Inventarisierung sowie das für die Software-Inventarisierung installieren.

Um grundsätzlich eine vorhandene Software als Paket zu installieren muss man

– Den Client links auswählen (1)

– Im Reiter „Produktkkonfiguration“ (2) die gewünschte SW auswählen.

– In der Spalte „Angefordert“ (3) der jeweiligen Zeile der Software „Setup“ auswählen (4) – das ist relativ klein geschrieben.

– Anschließend die Zeile nochmal auswählen (1) und rechts-Klick -> Speichern (2)

– Danach kann ebenfalls mit einem Rechts-Klick die „On demand“ (3) Installation starten (Alternativ: booten)

 

Sofern ein Benutzer angemeldet ist, erscheint nur wenige Sekunden danach beim Anwender ein kleines Popup. Danach startet die jeweilige Installation.

 

Sofern kein Benutzer angemeldet ist, so startet die anstehende Software-Installation oder Software-Änderung nach dem nächsten Reboot vor der ersten Anmeldung

 

Schritt 2 der Software-Zuweisung: Speicher und Starten

Schritt 2 der Software-Zuweisung: Speicher und Starten

 

Für den Administrator ist direkt nach der Installation durch ein erneutes Laden der Daten vom OPSI Server sichtbar, ob die Installation erfolgreich war. Falls ja, wird die Versions-Nummer der Software in grün in der betreffenden Zeile angezeigt.

Wer jetzt auf den Geschmack gekommen ist, der sollte nach Möglichkeit den OPSI-Agenten automatisiert per Group-Policy auf den betroffenen Rechnern einrichten.

OPSI – weitere Schritte

Die eigentliche Arbeit besteht bei OPSi wie auch allen anderen Software-Deployment Tools darin, die genutzte Software zu paketieren und testen.

Um diese anstehenden Aufgaben zu vereinfachen, werden bei OPSI zwei Software-Produkte zur Verfügung gestellt. Dies sind zum einen eine Analyse-Software für bestehende *.exe oder MSI-Installer und eine weitere mit der die eigentliche Paketierung und Veröffentlichung erfolgt.

Der OPSI Setup Detector analysiert bestehende MSI und EXE-Installer

Der OPSI Setup Detector analysiert bestehende MSI und EXE-Installer

Der „opsi Setup Detector“ ermittelt aus bestehenden Installern möglichst viele Informationen um anschließend eine möglichst automatische und Bediener-lose Installation zu ermöglichen.

Mit dem OPSI Package Builder werden die Software-Installationen paketiert.

Mit dem OPSI Package Builder werden die Software-Installationen paketiert.

Mit dem  „Opsi Package Builder“ können IT-Administratoren mit relativ wenig Aufwand die Paketierung der notwendigen Software selbst vornehmen.

Ebenso ist es natürlich möglich bestehende, fertige paketierte (freie) Software aus öffentlichen Repositories herunter zu laden und in den eigenen OPSI Server zu integrieren.

An dieser Stelle sei der Hinweis auf das öffentliche Wiki bzw. das Forum von OPSI für die weitere Lektüre erlaubt.

Mehr Infos zu Opsi

Opsi an sich ist sehr gut dokumentiert. Allein die Doku zur Erst-Installation umfasst fast 100 Seiten. Die Dokumentation zur Paketierung ist ebenfalls mehr als ausführlich.

Darüber hinaus finden sich bei Youtube (https://www.youtube.com/watch?v=KW5J3Ymw9NQ&feature=youtu.be ) einige kurze Videos, die interessierten IT-Entscheidern den ersten Überblick erleichtern:

Wer sich intensiver mit OPSI auseinander setzen möchte, dem rate ich zuerst zur Lektüre des „OPSI Getting Started“ PDF . Dort wird nicht nur die Installation von OPSI beschrieben. Im zweiten Teil wird auch exemplarisch beschrieben, wie eine Software-Paketierung abläuft und welche Schritte man als IT-Administrator durchführen muss um eigene bzw. lizenzierte Software zu paketieren.

Im eigentlichen Handbuch zu OPSI 4.1 wird auf knapp 400 Seiten sehr ausführlich erläutert, wie die Verwaltung der PCs sowie Software mit OPSI funktioniert. Die OPSI-Skript-Sprache zur Paketierung selbst ist ebenfalls mit einem separaten über 200 Seiten langen PDF ausführlich dokumentiert.

Fazit zu Opsi

OPSI macht als Software-Verteilungs-System einen sehr robusten und mittlerweile auch ausgereiften Eindruck. Geübte Admins mit Basis-Linux-Kenntnissen sollten in wenigen Stunden in der Lage sein, ein funktionierendes Test-System zu installieren und zu nutzen. Wie hoch der tatsächliche Nutzen im Tagesgeschäft ist, hängt natürlich von Fall zu Fall von der Diversität der eingesetzten Software ab.

IT-Admins, die Netze mit mehr als 30 PCs verwalten, sollten auf jeden Fall OPSI einmal testen. Es lohnt sich.

Einleitung: Hochverfügbarer Samba-Server

Je größer eine Firma bzw. deren Infrastruktur wird, desto unwahrscheinlicher ist es, daß man einen einzelnen Host im laufenden Betrieb updaten oder gar herunter fahren kann. Für den sicheren Systembetrieb ist es aber wesentlich, daß aktive Komponenten regelmässig gewartet bzw. aktualisiert werden können. Im Zuge von Updates und Wartung ist sehr häufig ein Reboot des betroffnene Servers notwendig. Leider geht mit Reboots einher, dass Anwender nicht auf die IT-Dienste des Servers zugreifen können.

In diesem Tutorial werden wir einen Ausfallsicherer Samba-Server mit LVM, Gluster-FS sowie Pacemaker/Corosync einrichten und konfigurieren.

Konzeptioneller Ansatz

Um selbstverständliche Dienste wie Windows-Freigaben (etwa für Team-Laufwerke oder andere Shares) ausfallsicher und mit hoher Verfügbarkeit zu gestalten, braucht es an sich nur 3-4 wesentliche Komponenten:

  • 2 identische Hosts
  • Ein oder mehrere gespiegelte Dateisysteme sowie einen Mechanismus zur Synchronisierung der Daten
  • LVM zur nahtlosen Erweiterung des Storage-Bereichs
  • 100%-ige Erreichbarkeit eines der beiden Hosts über eine Cluster-IP-Adresse
  • Samba für die Freigabe(n)

Wirklich wichtig für die nahezu 100-prozentige Verfügbarkeit ist, daß die beiden Hosts sich praktisch nichts teilen, was immer online sein muss.

Beispiel: Wenn wir das File-System mit den Freigaben auf eine zentrale Storage (Storage-SAN oder NAS) legen würden, so hätten wir einen Teil des Systems nur einmal vorrätig, so daß beim Fehlen dieses Bestandteils das Gesamt-System nicht mehr funktionieren würde. Das zentrale Storage wäre ein großer (und meist teurer) „Single Point of Failure“ (SPoF)

Daher: Die beiden Hosts werden also als exakte Klone voneinander betrachtet. Sie teilen sich nichts – zumindest nichts physisches. Dieses Prinzip des „shared nothing“ erreichen wir durch den Einsatz der Opensource-Software Gluster-FS, das das Dateisystem spiegelt.

Die einzige Ressource die entweder auf dem einen oder dem anderen Host vorhanden ist, ist die Cluster-IP (oder Service-IP) die mit Pacemaker/Corosync immer auf einem aktiven Host vorhanden ist und sich im Ernstfall binnen Sekunden auf den jeweils anderen Host übertragen läßt

Um das Dateisystem der beiden Hosts später auch im laufenden Betrieb erweitern zu können, legen wir die Partition mit den Dateien mittels LVM (logical volume manager) unter Linux an.

Voraussetzungen

Für alles Folgende setzen wir zwei identische (virtuelle) Server mit CentOS7 voraus. Diese sollten in etwa die gleichen Ressourcen in Bezug auf RAM und CPU haben. In Sachen Festplatten bzw. Partitionen sollten die beiden Hosts identisch sein. Dabei spielt es keine wirkliche Rolle ob die Linux-Hosts physische Server oder wie in unserem Fall virtuelle Server sind.

Für unser Beispiel nehmen wir an, daß die Linux-Server folgendermaßen heißen:

1
2
3
4
5
10.51.137.245   gstest01.itsc.local     gstest01

10.51.137.246 gstest02.itsc.local     gstest02

10.51.137.247 fileserver.itsc.local    fileserver

Diese drei  Zeilen kommen in die /etc/hosts Datei.

Vorbereiten der Partitionen

Wir bereiten also 2 identische Hosts mit Minimal-Installation unter Centos 7 jeweils auf /dev/sda vor. Außerdem brauchen die Hosts ein zweites File-system /dev/sdb das in etwa identisch groß sein sollte

Im ersten Schritt legen wir mit „parted“ und „fdisk“

Schritt 1: Mit Parted und fdisk Partition anlegen:

1
2
parted /dev/sdb
mklabel -> gpt

Anschließend legen wir eine Partition /dev/sdb1 unter /dev/sdb an und wählen als Partitionstyp “LVM”.

1
2
fdisk /dev/sdb
fdisk -&gt; partition anlegen und Typ 31 auswählen

Schritt 2: Volume Group und LVM anlegen

Wir legen nun zuerst ein „physical volume“ und anschließend eine Volume Group unter LVM an.

Mit dem folgenden Schritt erstellen wir auf der Partition /dev/sdb1 eine Volume Group mit Namen „storagevg“

1
vgcreate storagevg /dev/sdb1

Schritt 3: Das eigentliche Logical Volume anlegen

1
lvcreate --name storage01 --size 198G storagevg

Der obige Befehl legt auf der Volume Group “storagevg“ das logische Volume „storage01“ mit 198 GB Speicher an.

Schritt 4: Formatieren und Einbinden des LVM

Unser frisch erstelltest LV heißt nun also „/dev/storagevg/storage01“. Auf diesem erstellen wir nun ein XFS_Dateisystem:

1
mkfs.xfs /dev/storagevg/storage01

Damit wir das Filesystem später auch nutzen können, legen wir den Mountpoint bzw. das Verzeichnis „/data“ an und mounten das LVM anschließend.

1
2
3
mkdir /data

mount /dev/storagevg/storage01 /data

 

Damit das Filesystem auch nach dem nächsten Reboot wieder unter /data eingeängt wird, tragen wir folgenden Zeile in der /etc/fstab ein.

1
/dev/storagevg/storage01 /data xfs defaults 0 0

Installation von glusterfs unter CentOS 7

Damit wir später unsere identischen Partitionen auch synchron halten können, benötigen wir ein Gluster-Filesystem. Dafür installieren wir die folgenden Pakete unter Centos:

1
2
3
yum -y install epel-release yum-priorities centos-release-gluster

yum -y install glusterfs-server

 

Anschließend aktvieren wir den Dienst und starten ihn

1
2
3
systemctl enable glusterd.service

systemctl start glusterd.service

Zur Sicherheit schauen wir uns den Status an

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
[root@gstest01 ~]# glusterfsd --version

glusterfs 3.12.9

#

# status prüfen

[root@gstest01 ~]# gluster peer probe gstest02

peer probe: success.

# Status teil 2

[root@gstest01 ~]# gluster peer status

Number of Peers: 1

Hostname: gstest02

Uuid: b8fb70b5-fa46-4b11-aaf7-c5697ca3d6da

State: Peer in Cluster (Connected)

Gluster-FS Volume erstellen

MIt dem folgenden Befehl erstellen wir nun ein Dateisystem “storage01” innerhalb von Gluster-FS, dass auf den Hosts gstest01 und gestest02 jeweils physisch unter /data liegt. Der Parameter „replica 2“ bedeutet, dass wir faktisch eine Spiegelung erstellen.

1
2
3
[root@gstest01 ~]# gluster volume create storage01 replica 2 transport tcp gstest01.itsc.local:/data gstest02.itsc.local:/data force

volume create: storage01: success: please start the volume to access data

Das eigentliche Volume unter Gluster-FS muss nun noch auf einem (!) der beiden Hosts gestartet werden. Das erledigt der Befehl:

1
2
3
4
5
6
7
#gluster volume start <volume-name>

&nbsp;

[root@gstest01 ~]# gluster volume start storage01

volume start: testvol: success

[root@gstest01 ~]#

Glusterfs client installieren und mounten

Damit das gerade erstellte Gluster-Filesystem auch nutzbar wird, muss es auf beiden Hosts auch gemountet werden.

Hinweis: Bei der Installation des Gluster-FS- Servers ist der Gluster-FS client bereits mit enthalten.

1
yum -y install glusterfs-client

Anschließend legen wir ebenfalls auf beiden Hosts das Verzeichnis “/datastore” als Mountpoint an:

1
mkdir /datastore

Nun können wir das angelegte synchronisierte Verzeichnis /datastore auf jedem der Hosts mounten:

1
mount.glusterfs gstest01:/storage01 /datastore

 

Damit der Mount auch wieder nach einem Reboot da ist, nehmen wir den Befehl in die /etc/rc.d/rc.local auf.

1
2
3
4
5
6
7
vi /etc/rc.d/rc.local

#einfügen: /usr/sbin/mount.glusterfs gstest01:/storage01 /datastore

chmod +x /etc/rc.d/rc.local

systemctl enable rc-local

Achtung wichtig: Bitte achten Sie unbedingt darauf, daß jeder Host das „eigene“ FileSystem mounted.

Also auf host „gstest01“:

1
/usr/sbin/mount.glusterfs gstest01:/storage01 /datastore

… und auf dem Host „gstest02“

1
/usr/sbin/mount.glusterfs gstest02:/storage01 /datastore

Zur Sicherheit rebooten wir nacheinander jeden Host einmal. Wenn danach das File-System und der gluster service wieder online sind, dann haben wir erfolgreich ein synchrones Filesystem mit Gluster-FS erstellt

Beim Wechsel  bzw. Reboot kommt nun noch ein etwas nerviger Timeout . Während dieser Zeit kommt der verbliebene Host nicht wirklich schnell in die Puschen. Dies kann allerdings mit einem einfachen Einstellen des Timeouts von Gluster-FS erledigt werden.

1
2
3
gluster volume info storage01

gluster volume set storage01 network.ping-timeout 10

Gluster-FileSystem testen

Wenn Sie nun das Gluster-Filesystem testen möchten, so legen Sie auf dem Host gstest01 im Verzeichnis /datastore eine Datei an. Diese sollte nach wenigen Augenblicken auf gstest02:/datastore auftauchen. Änderungen die Sie nun auf gstest02:/datastore an der Datei vornehmen, werden wiederum sofort nach gstest01:/datastore übertragen.

 

Ausfallsicherheit mit Corosync und pacemaker:

Damit wir von Clients nun noch permanent auf Samba zugreifen können, benötigen wir eine dritte, virtuelle IP-Adresse. Über diese IP bzw. den dazu passenden DNS-Namen greifen später die Benutzer auf das hoch verfügbare Samba-Verzeichnis zu. Dafür erstellen wir mit Corosync und Pacemaker folgende Konfiguration.

Wie auch für Gluster-FS sollten die beiden Hostnamen und IP-Adressen in der jeweiligen /etc/hosts auf beiden Nodes enthalten sein. Das können wir an dieser Stelle überspringen, da wir das schon weiter oben erledigt haben.

Schritt 1: Installation von Corosync und Pacemaker / pcs

Auf beiden Hosts installieren wir nun noch Pacemaker und Corosync:

1
2
3
yum  -y install pacemaker pcs
systemctl enable pcsd.service
systemctl start pcsd.service

Während der Installation  wird ein neuer User namens „hacluster“ angelegt: Diesem geben wir ein Passwort und merken es uns gut. Am besten gleich in die IT-Dokumentation schreiben….

1
passwd hacluster

(auf beiden Hosts – jeweils identisches Passwort…)

Schritt 2: Einrichtung von  Pacemaker

Hinweis: Der nachfolgende Linux-Befehl ist nur auf einem der beiden Knoten notwendig. Dazu geben Sie das Passwort des Benutzers „hacluster“ von weiter oben ein

[root@gstest01 ~]# pcs cluster auth gstest01 gstest02

1
2
3
4
5
pcs cluster auth gstest01 gstest02
Username: hacluster
Password:
gstest02: Authorized
gstest01: Authorized

 

1
2
3
4
[root@gstest01]# pcs cluster setup --name cluster01 gstest01 gstest02
Destroying cluster on nodes: gstest01, gstest02...
gstest01: Success
gstest02: Success

Schritt 3: Pacemaker Cluster starten

Als letzten Schritt starten wir nun das Pacemaker Cluster. Auch dies wird nur auf einem der beiden Server erledigt:

1
2
3
[root@gstest01 ~]# pcs cluster start --all
gstest02: Starting Cluster...
gstest01: Starting Cluster...

Schritt 4: Corosync und Pacemaker aktivieren

Damit die Dienste auch nach einem Reboot wieder starten, aktivieren wir sie mit systemctl:

1
2
systemctl enable corosync.service
systemctl enable pacemaker.service

Schritt 5: Stonith und Quorum deaktivieren

Ein Cluster-Quorum und Stonith machen in der Regel erst ab 3 Hosts Sinn. Für unser 2-Server Setup sind sie nicht hilfreich. Daher deaktivieren wir sie:

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

 

Schritt 6: Virtuelle Service IP einrichten

Mit dem folgenden Befehl wird die Service-IP-Adresse für das Cluster angelegt. Die Ressource heißt hier “samba-ip” und hat die Adresse 10.51.137.247 (mit der Netzmaske 255.255.254.0)

1
pcs resource create samba-ip ocf:heartbeat:IPaddr2 ip=10.51.137.247 cidr_netmask=23 op monitor interval=5s

Schritt 7: Testen und Reboot

Mit “pcs status” können Sie jederzeit auf beiden Hosts ermitteln, wo die Service-IP-Adresse gerade läuft:

pcs status

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[root@gestest01 ~]# pcs status
Cluster name: cluster
Stack: corosync
Current DC: gstest02 (version 1.1.18-11.el7_5.3-2b07d5c5a9) - partition with quorum
Last updated: Tue Jul 10 16:49:05 2018
Last change: Tue Jul 10 12:56:42 2018 by root via crm_resource on gstest01
2 nodes configured
1 resource configured
Online: [gstest01 gstest02]

Full list of resources:
samba-ip    (ocf::heartbeat:IPaddr2):       Started - gstest02

Daemon Status:
corosync: active/enabled
pacemaker: active/enabled
pcsd: active/enabled

Um die Funktion der Cluster-IP-Adresse zu testen, rebooten wir nun den Server, auf dem die aktuelle Cluster-IP sich gerade befindet. Wenn alles richtig konfiguriert wurde, so wird beim Shutdown des aktiven Servers die Service/Cluster-IP automatisch von Pacemaker und Corosync auf den zweiten Host übertragen. Testen können Sie das mit einem „ping“ von einem Windows-Host auf die Cluster-IP:

1
ping –t 10.51.137.247

Installation von Samba

Zu guter Letzt installieren wir noch auf beiden Servern Samba als Dienst.

1
yum  -y install samba samba-client samba-common

Die  Datei /etc/samba/smb.conf passen Sie nun noch an Ihre Bedürfnisse an.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[global]
workgroup = WORKGROUP
security = user
guest account = nobody
map to guest = bad user
passdb backend = tdbsam
#load printers = yes
cups options = raw

[datastore]
path = /datastore
guest ok = yes
guest only = yes
guest account = nobody
browseable = yes

Wie man für Samba die Datei /etc/samba/smb.conf so anpasst, daß sie mit personalisierten Benutzern zugreifen können, beschreiben wir in einem weiteren Tutorial hier im Blog.

 

Samba Dienste aktivieren und starten

Die beiden nachfolgenden Befehle aktivieren die für Samba notwendigen Dienste smb und nmb:

1
2
systemctl enable smb.service
systemctl enable nmb.service

Abschließend starten Sie die beiden Linux-Dienste:

1
2
systemctl restart smb.service
systemctl restart nmb.service

 

Firewalld für Samba anpassen

Sofern Sie unter Centos7 den firewalld-Dienst aktiviert haben, so sollten Sie die Zugriffe per SMB-Protkoll erlauben. Das erledigt der folgende Befehl:

1
2
firewall-cmd --permanent --zone=public --add-service=samba
firewall-cmd --reload

 

Nun sollte von erlaubten Clients aus bzw. mit dem passenden Passwort der der Zugriff auf \\<hostname>\datastore möglich sein. Wer einen anderen Share-Namen möchte, ändert das entsprechend in der smb.conf.

Damit wir nun noch einen „schönen“ Namen für unsere Service-IP im Share-Namen nutzen können, erstellen wir einen entsprechenden Host-Eintrag im DNS – bspw. „fileserver“ für die Cluster-IP 10.51.137.247 aus unserem Beispiel von oben.

Damit können nun Anwender über den Freigabe-Namen \\fileserver\datastore auf ihre Dateien von nun an mit 99,99% Verfügbarkeit zugreifen.

 

 

 

Weiterführende Links zum Thema

 

Fazit zum hochverfügbaren, ausfallsicheren Samba-Server

Wer die Kosten für die doppelten Ressourcen nicht scheut, kann mit den kostenfreien OpenSource-Produkten Pacemaker, Gluster-FS, LVM und Samba und einer Stunde Arbeit die Verfügbarkeit seiner IT-Services erheblich steigern.

Auch wenn das hier gezeigte Beispiel im echten Leben von Anwendern und IT-Verantwortlichen nicht so kritisch gesehen wird, so bleibt doch immerhin in der obigen Konstellation die Möglichkeit etwa Updates und Wartungsarbeiten während der normalen Arbeits- und Nutzungszeit durch den IT-Administrator durchführen zu lassen – anstatt dafür immer wieder Nachtschichten einlegen zu müssen.