Proxmox Virtual Environment – PVE

,

Proxmox Virtual Environment (kurz PVE) ist eine auf Debian-Linux und KVM basierende Virtualisierungs-Plattform zum Betrieb von Gast-Betriebssystemen. Proxmox ist frei verfügbar – kommerzieller Support kann über den Hersteller (Fa. Proxmox Server Solutions GmbH in Wien) erworben werden.

Proxmox benötigt, um im Verbund (Cluster) stabil zu laufen mindestens 3 physische Server.

Homepage von Proxmox: https://www.proxmox.com/de/

Vorteile von Proxmox:

Gegenüber Hyper-V, VMWare, Openstack oder Cloudstack hat Proxmox einige Vorteile auf Lager:

  • Proxmox läuft auf fast jeder x86-Hardware
  • Die Installation ist in weniger als 5 Minuten pro Host erledigt
  • Proxmox kann ab 3 Servern Hochverfügbarkeit abbilden.
  • Es fallen keine Lizenzkosten an da Proxmox OpenSource ist und der Hypervisor auf KVM basiert

Gegenüber den bekannten Cloud-Plattformen wie VSphere, Openstack oder Cloudstack hat Proxmox noch den Vorteil, dass die Verwaltungs-GUI auf den Virtualisierungs-Hosts mit läuft. Somit sind keine zusätzlichen Hosts für Administration oder das Management des Clusters notwendig

Einschränkungen von Proxmox:

Proxmox verwendet für das Management des Clusters corosync. Corosync kann maximal 32 Knoten verwalten bzw. steuern. D.h. die maximale Anzahl an Hosts für Virtualisierung und Storage beträgt bei einem Proxmox Cluster 32 physische Server.

Installation von Proxmox

Bevor Sie Proxmox nutzen können, sollten Sie sich das aktuelle ISO-Image bzw. den ISO-Installer unter https://www.proxmox.com/de/downloads/category/iso-images-pve herunterladen.

Es empfiehlt sich das Image entweder auf eine DVD oder besser auf einen USB-Stick (min. 1 GB groß) zu ziehen. Für das Aufspielen auf einen Stick eignet sich z.B. die Software Etcher. (Download: https://etcher.io/)

Voraussetzungen / Mindest-Anforderungen

Um Proxmox stabil zu betreiben, sollten folgende Anforderungen erfüllt sein

  • 3 Hosts bzw. physikalische Server
  • Zentrale Storage (wenn VMs live verschoben werden sollen) – etwa Ceph oder NFS
  • Auf den Hosts, die Virtualisierung anbieten, müssen in der CPU zur Virtualisierung die VT Erweiterung aktiviert sein.

Wichtig: Wenn im laufenden Betrieb später virtuelle Maschinen live verschoben werden sollen, muss die Benennung der Netzwerk-Interfaces (NIC) auf den Hosts gleich sein.

Das Standard-Interface für den internen LAN-Anschluss heißt „vmbr0“. Ein externes Interface sollte „vmbr1“ benannt werden.

Sofern Disk-Images von virtuellen Maschinen zentral – z.B. über Ceph – abgespeichert werden, so sollten 10G-Switche eingesetzt werden. Die an das 10G-Netzwerk angeschlossenen Proxmox-Hosts benötigen selbstverständlich mindestens einen 10G-Netzwerkanschluss.

Vorbereitung:

Hostnamen und IP-Adressen der Proxmox-Hosts lassen sich nachträglich nur schwer ändern. Bevor Sie mit der Installation starten, sollten Sie die Hostname und die (internen) IP-Adressen der zu installierenden Hosts festlegen:

HostnameIP-AdresseNetzmaskePasswort
pvehost0110.20.30.1/24
Pvehost0210.20.30.2/24
Pvehost0310.20.30.3/24

 

Proxmox

Begrüßungsbildschirm von Proxmox

Installation des ersten Servers

Booten Sie den ersten Server von der DVD bzw. ihrem USB-Stick. Sofern das ISO-Image korrekt erkannt wurde, begrüßt Sie Proxmox mit dem folgenden Bildschirm:

Klicken Sie auf „Install Proxmox VE“. Im nächsten Screen müssen Sie lediglich die Lizenzbedingungen von Proxmox bestätigen. Klicken Sie anschließend rechts unten auf „Next“.

Auswahl der Boot-Partition

Auf der folgenden Seite wählen Sie bei „Target Harddisk“ ihre Boot-Partition aus, auf der Proxmox gleich installiert wird. Bei einer Standard-Installation auf physischer Hardware wird die erste Festplatte in der Regel „/dev/sda“ heißen.

Hinweis: Die Festplatte wird vor der Installation partitioniert, d.h. alle Daten auf der Partition werden gelöscht.

 

Länder- und Tastaturauswhl

Nachfolgend wählen Sie das Land und das Tastaturlayout für Ihren Server und klicken wieder auf „Next“.

 

In der nächsten Maske  setzen Sie bei (1) das Passwort für den root-Account fest und tragen unter (2) eine E-Mail Adresse ein.

Passwort und Email-Adresse

Hinweis: Die E-Mail muss valide sein. Fake-Emails funktionieren nicht.

 

Weitere Festlegungen

In der letzten Maske legen Sie unter (1) das interne Netzwerk-Interface fest.

Hinweis: Da Server in der Regel mehrere NICs haben, prüfen Sie bitte vorher, welcher NIC zu welchem Anschluss gehört

Unter (2) tragen Sie den vollständigen Hostnamen (fqdn, inkl. Domain) ein. In (3) kommt die IP-Adresse rein und darunter die Netzmaske, der Gateway und DNS-Server.

Wenn Sie anschließend auf „Next“ klicken, startet die eigentliche Installation von Proxmox. Der Installationsvorgang von Proxmox dauert je nach Hardware zwischen 3 und 5 Minuten pro Host.

Sobald der Installationsvorgang erfolgreich beendet wurde, werden Sie aufgefordert, den neu installierten Host zu rebooten. Entfernen Sie den USB-Stick bzw. die DVD und rebooten Sie den Host.

Sie können sich für die meisten nachfolgenden Aufgaben nun über das Web mit ihrem neuen Host verbinden: https://<IP>:8006/

Erstellung der Cluster-Config auf dem ersten Host

Damit Sie später einen weiteren, bzw. mindestens zwei weitere Hosts in ihr Proxmox-Cluster aufnehmen können, müssen Sie zunächst eine Cluster-Konfiguration erstellen. Loggen Sie sich dazu auf dem gerade installierten Host ein.

Wichtig: Diese Einrichtung des Clusters können Sie nur genau einmal machen.

(Entweder über ssh oder die Web-GUI -> Server (links) -> Shell (rechts)

Screenshot des einzugebenden Kommandos

Geben Sie folgendes Kommando ein:

root@pvehost01:  pvecm create <clustername> # ersetzen Sie “clustername” durch den Namen ihres Clusters.

 

Prüfen Sie den Status des neu erstellten Clusters mit dem Befehl:

root@pvehost01:~# pvecm status

 

Die Ausgabe sollte in etwa ähnlich wie das Folgende aussehen:

Quorum information
——————
Date:             Wed Jan 17 17:50:12 2018
Quorum provider:  corosync_votequorum
Nodes:            1
Node ID:          0x00000001
Ring ID:          1/4
Quorate:          Yes
Votequorum information
———————-
Expected votes:   1
Highest expected: 1
Total votes:      1
Quorum:           1
Flags:            Quorate

Membership information
———————-
Nodeid      Votes Name
0x00000001          1 10.20.30.1 (local)

Installation weiterer Server

Jeden weiteren Server installieren Sie so wie den ersten Server. (selbstverständlich mit einem anderen Hostnamen und einer unterschiedlichen IP-Adresse).

Sobald die Installation fertig ist, loggen Sie sich auf dem zweiten Server ein und melden den neuen Host am bestehenden Cluster an. Dazu verwenden Sie als Ziel-IP-Adresse im folgenden Kommando die IP eines Hosts, der bereits im Cluster Mitglied ist.

Geben folgendes Kommando ein: pvecm add <IP-des-ersten-Hosts>

Bsp.:

root@pvehost02:~# pvecm add 10.20.30.1
The authenticity of host ‚10.20.30.111 (10.20.30.1)‘ can’t be established.
<…>
Are you sure you want to continue connecting (yes/no)? yes
root@10.20.30.1’s password:
copy corosync auth key
stopping pve-cluster service
backup old database
waiting for quorum…OK
generating node certificates
merge known_hosts file
restart services
successfully added node ‚pvehost02‘ to cluster.

Prüfen des Cluster-Status’

Den Status des 2-Knoten-Clusters prüfen Sie wieder mit “pvecm status”:

 

root@pvehost02:~# pvecm status
Quorum information
——————
Date:             Wed Jan 17 17:59:36 2018
Quorum provider:  corosync_votequorum
Nodes:            2
Node ID:          0x00000002
Ring ID:          1/8
Quorate:          Yes

Votequorum information
———————-
Expected votes:   2
Highest expected: 2
Total votes:      2
Quorum:           2
Flags:            Quorate

Membership information
———————-
Nodeid      Votes Name
0x00000001          1 10.20.30.1
0x00000002          1 10.20.30.2 (local)

Wichtig ist hier der Eintrag Expected Votes und Total Votes. Diese beiden Werte (hier „2“) sollten identisch sein.

Übersicht über die Proxmox-Web-GUI

Sobald der erste Host im Netz aktiv ist, können Sie sich über die Web-GUI am Cluster anmelden. Grundsätzlich ist die Anmeldung an jedem Host über die folgende URL möglich:

https://<IP>:8006/  ; ersetzen Sie die IP durch die IP eines Hosts bzw. dessen Hostnamen.

GUI Übersicht

Als Benutzernamen verwenden Sie „root“ und das Passwort, das Sie während der Installation eingegeben haben.

Die Elemente der GUI

Links oben: (1) Auswahl der Ansicht für die linke Baumstruktur

Links: (2) Baumstruktur (Server, Pools)

Oben Mitte (3): Suchfunktion

Rechts: Anzeige oder Bearbeiten eines Elements (Datacenter, Host, Gast). Innerhalb des Fensters ist wiederum links eine Leiste für die Befehle (4), um das jeweilige Objekt (Cluster, Host, Gast) zu verändern. (5)

Rechts oben: (6) Kommando-Buttons zum Erstellen von VMs/Containern

Unten: (7) Status-Leiste

Die Elemente der GUI

In der Standard-Übersicht des so genannten Rechenzentrums bzw „Datacenters“ sehen Sie den Status aller Knoten, sowie die CPU, RAM (Hautpspeicher) und Storage-Auslastung des gesamten Clusters.

Um in Proxmox ein Element (Host, Gast oder das Cluster) zu verändern, klicken Sie zunächst links auf das Element (2), das Sie verändern oder ansehen möchten. Anschließend bearbeiten Sie die Einstellung in der Menüleiste des Elements (4).

Konfiguration des Proxmox – Clusters für den Betrieb

Um das Cluster für den echten Betrieb mit Hosts vorzubereiten, müssen nun noch die zentralen Ablagen für ISO-Images bzw. Templates sowie die Speicherung der virtuellen Festplatten der Gast-Betriebssysteme eingerichtet werden. Ebenso benötigen wir ein Verzeichnis, in das Datensicherungen (Backups) und Snapshots der virtuellen Maschinen gespeichert werden können.

Hinweis: Proxmox kann selbstverständlich die Templates und Maschinen-Images lokal auf dem jeweiligen Proxmox-Host speichern. Dann könnten die virtuellen Maschinen aber nicht im laufenden Betrieb verschoben werden.

Unterstützte Speicher von Proxmox

Speicherarten

Neben der lokalen Speicherung (in der Regel LVM) unterstützt Proxmox die folgenden Speicherarten

  • Verzeichnis(se)
  • LVM
  • LVM thin
  • NFS
  • GlusterFS
  • iSCSI
  • RBD (Ceph), von Proxmox gemangt
  • RBS (Ceph), externes Cluster
  • ZFS
  • ZFS über iSCSI

 

Hinweis zu Ceph: Proxmox unterstützt Ceph nicht nur sehr gut. Ceph kann auch über Proxmox selbst installiert und verwaltet werden. Im Gegensatz zur reinrassigen Ceph-Installation ist die Verwaltung von Ceph in Proxmox selbst (Option RBD(PVE)) auch für nicht Linux-Administratoren gut zu erledigen, da sie durch den Hersteller von Proxmox etwas vereinfacht wurde.

Generell können nicht alle Storage-Formen auf allen Speicher-Arten abgespeichert werden. Was genau auf welchen Storage-Arten abgespeichert werden kann, entnehmen Sie der folgenden Übersicht:

StorageDisk-ImageISO-ImageContainer TemplateVZ-BackupsContainer
Verzeichnisxxxxx
LVMXX
LVM-ThinXX
NFSxxxxx
iSCSI
GlusterFSXXXX
RBD (PVE)XX
RBD (external)XX
ZFS iSCSI
ZFSXX

 

Templates-Verzeichnis einrichten

In unserem Test-Cluster fügen wir nachfolgend ein Template-Verzeichnis für ISO-Images auf NFS-Basis hinzu. Das NFS-Verzeichnis kann dabei auf einem auf einem Proxmox-Host, einem anderen Linux-Server oder auch auf einer NAS liegen.

Sie benötigen:

  • Die IP-Adresse bzw. den Hostnamen des NFS-Servers
  • Den Namen der NFS-Freigabe

Templates-Verzeichnis Schritt für Schritt einrichten 1

Um das zentrale Verzeichnis für die Templates einzurichten, klicken Sie oben auf Datacenter (1) und anschließend im rechten Menü auf Storage (2) und danach auf hinzufügen (3) und wählen „NFS“ aus.

Templates-Verzeichnis Schritt für Schritt einrichten 2

In der darauffolgenden Maske tragen Sie unter (1, ID) einen möglichst sprechenden Namen für ihr Verzeichnis ein.

In (2) kommt die IP-Adresse (alternativ. Der Hostname) und unter (3) der Pfad des NFS-Exports. Bei Inhalt (4) wählen Sie „Container Template“. Achten Sie darauf, daß keine weiteren Inhalte ausgewählt sind. Sofern Sie die Templates nur bestimmten Servern zur Verfügung stellen wollen, können Sie das unter (5) einstellen. Klicken Sie zum Erstellen auf „Hinzufügen.“

Templates-Verzeichnis Schritt für Schritt einrichten 3

Um den Inhalt des Speicher-Orts anzuschauen, klicken Sie links in der Struktur-Leiste auf einen der Proxmox-Hosts und dort auf ihr neu angelegtes Verzeichnis (hier: ISO-Images (1)). Anschließend auf Inhalt (2). Über den Button Hochladen (3) können Sie jedes ISO-Image (bspw. eine DVD oder CD mit einem Windows oder Linux-Betriebssystem) hochladen. Die Images können Sie später den virtuellen Maschinen als DVD-Laufwerksinhalt bereitstellen.

ToDo Laden Sie nun ein ISO-Image in den Speicherbereich für Templates hoch. Zum Testen können Sie etwa ein Image von CentOS oder anderen Linux-Distributionen nutzen. Diese sind kostenfrei. Selbstverständlich geht auch jedes Image einer Windows-Installations-CD/DVD.

Speicher für Disk-Images einrichten

Auf die gleiche Weise wie für die Templates richten Sie nun einen Speicherort für die Disk-Images der virtuellen Maschinen ein. Hier werden die virtuellen Festplatten der Gast-Betriebssysteme abgelegt.

Speicher für Disk-Images einrichten

Hinweis: Auf die Disk-Images (also die virtuellen Festplatten) greifen die Gäste permanent zu. Im Gegensatz zu den Templates, sollte der dieser Speicherort sowohl über schnelle Festplatten und eine sehr gute Netzwerk-Anbindung verfügen.

Wir fügen nun (als Beispiel) einen Speicherpool für Ceph als Ort für Disk-Images hinzu. Klicken Sie zunächst ganz oben links wieder auf Datacenter, anschließend auf Storage und danach auf „Hinzufügen“.

Vergeben Sie wieder einen sprechenden Namen für Ihren Speicherort (1) und wählen hier im Fall von Ceph (2) den passenden Pool aus. Über die Auswahl bei Inhalt (3) legen Sie fest, was hier gespeichert werden darf. In unserem Fall ist das „Disk-Image“.

Speicher für Datensicherungen einrichten

Speicher für Datensicherung einrichten

Der Speicherort für Datensicherungen muss nicht extrem schnell sein. Hier benötigen Sie in der Regel jedoch ein hohes Volumen, je nachdem wie viele Snapshots und Datensicherungen sie von den virtuellen Gästen erstellen möchten.

Die Vorgehensweise ist identisch mit der Einrichtung des Template- bzw. Disk-Image-Speicher. Sie können unter „Verzeichnis“, NFS und GlusterFS wählen. Achten Sie lediglich darauf, daß Sie als Speicherinhalt „VZDump Backup file“ auswählen.

Einrichten eines zweiten Netzwerk-Interfaces für die Hosts

Damit die virtuellen Maschinen später auch ins Internet kommunizieren können, benötigt jeder Proxmox-Host eine entsprechende Netzwerk-Schnittstelle.

Während der Installation wurde automatisch das logische Interface „vmbr0“ angelegt (vmbr steht für virtual maschine bridge). Das Interface vmbr0 zeigt in aller Regel in ein geschütztes, internes Netzwerk. Sofern Sie für VMs direkten Kontakt zum Internet herstellen möchten, müssen Sie zuerst jedem Proxmox-Host ein entsprechendes Interface hinzufügen, über das später die VMs ins Internet können.

Um gleich das logische Interface „vmbr1“ zu erstellen, müssen Sie zunächst den Namen des physischen Netzwerk-Interfaces auf ihrem Proxmox-Server ermitteln. Dazu klicken Sie wieder zuerst auf den Host (1), anschließend auf Shell (2) und geben dort folgendes ein:

Einrichten eines zweiten Netzwerk-Interfaces 1

Proxmox# ip link show

In der nachfolgenden Auflistung beginnen die physischen Schnittstellen bei Debian-Linux mit „en“. In unserem Beispiel heißen die beiden NICs „ens1f0“ und „ens1f1“.

Weiter unten in der Auflistung können Sie erkennen, daß das logische Interface vmbr0 bereits angelegt ist.

Dazu klicken Sie zuerst auf den Host (1), anschließend auf (2) Netzwerk und danach auf „Erstellen“. Wählen Sie anschließend „Linux Bridge“.

Einrichten eines zweiten Netzwerk-Interfaces 2

Einrichten eines zweiten Netzwerk-Interfaces 3

In der folgende Maske benennen Sie das Interface (hier: vmbr1) (1) und vergeben bei (2) eine IP-Adresse sowie die dazu passende Subnetzmaske (2). Den Gateway (3) lassen Sie frei. Unter (4) tragen Sie das physische Netzwerk-Interface ein, das Sie gerade in der Shell identifiziert haben.

Wiederholen Sie die Schritte zur Erstellung des Interfaces „vmbr1“ auf allen Proxmox-Hosts, die direkt ins Internet (oder ein anderes Netz) Zugriff haben sollen.

Hinweis: Nach dem Erstellen des Netzwerk-Interfaces „vmbr1“ müssen sie den Proxmox-Host noch rebooten, damit Proxmox die (bis jetzt) inaktive Netzwerk-Konfiguration zu aktiven Konfiguration macht.

 

Linux-Profis können folgendermaßen vorgehen:

Pve# cd /etc/network
Pve# cp interfaces intefaces.save
Pve# cp interfaces.new interfaces
Pve# ifup vmbr1

Proxmox Admin Einführung

Die überwiegende Mehrzahl aller administrativen Aufgaben kann über die Web-Oberfläche erledigt werden. Hier sind die wichtigsten davon:

Virtuelle Maschinen erstellen 1

Virtuelle Maschine(n) erstellen

Um eine neue virtuelle Maschine zu erstellen, klicken Sie oben rechts auf „Create VM“ oder links im Struktur-Baum auf den Host und dann im Kontext-Menü auf „Create VM“. Auf Deutsch heißt der Befehl „Erstelle VM“. Es öffnet sich ein Assistent, der Sie durch die Einrichtung führt.

Unter Knoten wählen Sie den Proxmox-Host, auf dem die VM gestartet werden soll. Die VM ID (2)ist eine von Proxmox vergebene eindeutige ID für den Gast. Unter (3) geben Sie der neuen virtuellen Maschinen einen Namen. Klicken Sie anschließend unten rechts auf „vorwärts“ bzw. „next“

Virtuelle Maschinen erstellen 2

VM erstellen 3

Im Reiter „OS“ legen Sie fest, ob die VM ein DVD-Laufwerks-Inhalt bekommt und wählen diesen unter (1) aus. Bei (2) legen Sie fest, welcher VM-Typ als Gast laufen wird. Zur Auswahl stehen „Linux“, Windows und Solaris.

Sofern Sie ein Windows-Betriebssystem installieren möchten, so wählen Sie im Dropdown „Version“ die passende Version aus.

 

Laufwerk definieren

Laufwerk definieren

Im nächsten Schritt legen Sie den Speicherort und die Größe der ersten Festplatte für die neue VM fest:

Mit (2) definieren sie welcher Treiber bzw. welches Bussystem für den Gast emuliert werden soll. Unter (3) wählen Sie den Storage-Bereich aus. Bei (4) definieren Sie die Anfangsgröße der Festplatte in GB.

Hinweis: Festplatten in Proxmox können Sie später noch vergrößern – nicht jedoch verkleinern.

CPU festlegen

CPU festlegen

Im Reiter CPU legen Sie die Anzahl der Sockets und Cores für die VM fest. Die Anzahl der nutzbaren Kerne ist hinterher das Produkt aus Sockets x Cores. (Mathematisch: Sockets mal Cores)

RAM / Hauptspeicher festlegen

RAM festlegen

Im Reiter „Speicher“ legen Sie den Hauptspeicher der VM fest. Sie können dabei eine fixe Speichergröße (1) in MB festlegen (Im Bild sind es 4 GB). Alternativ legen Sie mit einem Klick auf (2) einen dynamischen Bereich fest.

Wie die Zuweisung im Detail in KVM bzw. Proxmox erfolgt ist hier sehr gut beschrieben: https://pve.proxmox.com/wiki/Dynamic_Memory_Management

Netzwerk-Interfaces zuweisen

Netzwerk-Interfaces zuweisen

Im letzten Schritt legen Sie fest, über welches Interface die VM nach außen hin verbunden wird.

Wählen Sie bei (1) den Bridged Mode. Hier können Sie die vorher definierten logischen Interfaces vmbr0 oder vmbr1 auswählen.

Ebenso ist es möglich NAT (Network Adress Translation) auszuwählen oder gar keine Netzwerkkarte zur Verfügung zu stellen.

Bei Modell (2) wählen Sie die NIC-Modellart, die Proxmox emulieren soll. Unter (3) können Sie außerdem eine MAC-Adresse vergeben, sofern Sie das z.B. für einen PXE-Boot oder dhcp benötigen.

Einstellungen bestätigen

Einstellungen bestätigen und VM erstellen

Im letzten Schritt sehen Sie eine Übersichts-Maske, in der Sie nun noch einmal alle Einstellungen kontrollieren können, bevor die virtuelle Maschine wirklich erstellt wird.

Sofern Sie noch Änderungen vornehmen möchten, so klicken Sie auf den entsprechenden Reiter und passen Ihre Einstellungen an.

Sobald Sie auf „Abschließen“ klicken, wird die neue VM erstellt. Das kann je nach Hardware und Größe einen Moment dauern.

Weitere Hardware hinzufügen.

Sie können jeder virtuellen Maschine später noch weitere Ressourcen hinzufügen. Etwa weitere Festplatten oder ein weiteres Netzwerk-Interface.

Virtuelle Maschine starten

Um die neu erstellte VM zu starten, klicken Sie zuerst (1) auf die neue VM. Anschließend können Sie die virtuelle Maschine entweder im Kontext-Menü der VM (2) starten oder oben rechts (3).

Virtuelle Maschine starten

Auf die virtuelle Konsole des Gastes wechseln

Um in die Konsole der frisch erstellen Maschine zu wechseln, klicken Sie auf „Konsole“ im Menü der VM.

Im Bildschirmbereich (3) neben dem Menü (2) können Sie nun mit Tastatur und Maus die virtuelle Maschine so steuern, als würden Sie vor einer physischen Hardware stehen.

Auf die virtuelle Konsole des Gastes wechseln

VM bedienen

VM anhalten / herunter fahren / stoppen

Eine virtuelle Maschine sollten Sie nach Möglichkeit über das installierte Betriebssystem herunterfahren. Sofern das nicht möglich ist, können Sie die VM auch „hart“ ausschalten.

Außerdem haben Sie die Möglichkeit die VM im laufenden Betrieb anzuhalten.

VM löschen

Sie können eine virtuelle Maschine nur löschen, wenn Sie ausgeschaltet bzw. herunter gefahren ist. Wählen Sie dazu links die VM aus und klicken anschließend oben rechts (2) auf „Mehr“ und dann auf löschen. (3)

Virtuelle Maschine löschen

Das Löschen bestätigen

Bevor Sie in Proxmox eine VM löschen können, müssen Sie das Löschen durch die manuelle Eingabe der 3-stelligen Maschinen-ID bestätigen. Erst danach wird die VM gelöscht.

Wichtig: Mit der VM werden auch automatisch alle verbundenen Festplatten physisch entfernt.

Verwaltung von Proxmox

Pools anlegen und verwenden

Pools anlegen und verwenden

Pools dienen in Proxmox dazu, virtuelle Maschinen zu gruppieren. In der linken „Struktur“-Spalte können neben der Ansicht für Hosts und Storage noch Pools angezeigt werden.

Um eine VM einem Pool zuzuweisen haben Sie zwei Möglichkeiten:

Bei der Anlage des Gastes in Proxmox können Sie im Reiter „General“ (Allgemein) den Pool direkt auswählen. Wenn Sie den Pool erst später erstellt haben oder die VM in einen Pool verschieben möchten, gehen Sie so vor:

Wählen Sie in der linken Spalte den Pool (1) , aus und klicken dann (2) auf Mitglieder. Klicken Sie auf (3) Hinzufügen und wählen Sie „Virtuelle Maschine“.

Sofern Sie später einzelnen Virtuellen Maschinen spezielle Storage-Bereiche zur Verfügung stellen wollen, so können Sie einzelnen Pools auch dedizierte Storage-Bereiche zur Verfügung stellen.

Hinweis: Eine VM kann keinem oder nur einem Pool zugewiesen werden. Eine Mehrfach-Mitgliedschaft einer VM zu Pools geht nicht.

Migration eines Gast-Systems von einem Host zum anderen.

Mit Proxmox können Sie laufende Gast-Systeme (virtuelle Maschinen) von einem Proxmox-Host zu einem anderen verschieben.

Die Voraussetzungen dafür sind:

  • Der Gast hat nur Cluster-weite Resourcen (Festplatte muss von beiden Proxmox-Hosts aus erreichbar sein).
  • Keine lokalen CD-Templates
  • Die Proxmox-Hosts haben gleich lautende Netzwerk-Interfaces (bspw. vmbr0 oder vmbr1)

Sofern diese Voraussetzungen gegeben sind, ist die Migration im laufenden Betrieb mit einem Klick möglich:

Migration eines Gast-Systems 1

Klicken Sie links (1) auf die VM, die Sie zu einem anderen Host migrieren möchten. Im Kontext-Menü (2) klicken Sie auf „Migration“. Alternativ können Sie oben rechts (3) die Migration starten.

Migration eines Gast-Systems 2

Wählen Sie im folgenden Menü den Ziel-Host und bestätigen Sie den Start der Migration.

Im Anschluss daran öffnet sich ein Log-Fenster, in dem Sie direkt den Verlauf der Migration beobachten können.

Bei einer Migration wird zunächst auf dem Ziel-Host ein identischer KVM Prozess angelegt. Diesem werden alle wesentlichen Werte der VM (CPU, RAM, HDD) übergeben. Anschließend wird der Inhalt des Hauptspeichers transferiert.

Migration eines Gast-Systems 3

Im konkreten Beispiel hat das Verschieben einer VM weniger als 10 Sekunden gedauert.

Massen-Migration

Massen-Migration

Über den Menü-Punkt „Bulk Migrate“ können mit einem Klick alle virtuellen Maschinen eines Proxmox-Hosts auf einen anderen verschoben werden. Das ist vor allem dann praktisch, wenn ein Proxmox-Hosts nach Updates neu gestartet werden soll.

Je nach Menge der virtuellen Maschinen und der Größe der VMs kann dieser Vorgang einige Minuten bis hin zu einer halben Stunde dauern.

Wichtig: Es wird bei der Massenmigration immer nur eine VM auf einmal migriert. Das Verschieben der VMs passiert also nacheinander.

Auf die Shell eines Proxmox-Hosts aufschalten

Neben den üblichen Wegen sich per ssh auf einen Proxmox-Host aufzuschalten, können Sie sich über die Web-GUI auf jeden Host direkt in die Shell aufschalten.

Container auf Basis von Templates erstellen

Proxmox ist von Hause aus in der Lage Container statt virtueller Maschinen zu betreiben. Für die Container-Technologie gibt es eine Vielzahl von fertigen Templates, mit deren Hilfe in wenigen Klicks eine fertige Anwendung installiert werden kann. Die vorhandenen Templates in Proxmox basieren auf Turnkey Linux. https://www.turnkeylinux.org/

Beispiele hierfür sind neben den klassischen Linux-Betriebssystemen Anwendungen wie WordPress, Apache, Magento und viele weitere.

Um einen Container zu erstellen, müssen sie zunächst das Template aus dem Internet herunter laden. Die Dateien für Container werden zusammen mit den ISO-Images gespeichert. Sie benötigen also keinen zusätzlichen Speicherort für Container-Templates.

Container-Template herunterladen

Container-Template herunter laden

Template auswählen

Klicken Sie in der linken Spalte auf das Speicherverzeichnis für ISO-Images (1), anschließend auf Content (2) und danach auf Templates.

Wählen Sie aus der Liste das gewünschte Template aus und klicken Sie auf „Download“.

Der Download benötigt je nach Größe und Internetanbindung einige Augenblicke bis er zur Verfügung steht.

Container installieren

Die Erstellung eines Containers ist ähnlich wie die Erstellung einer virtuellen Maschine. Klicken Sie oben rechts auf „Create CT“. Es öffnet sich wie bei den VMs ein Dialog, den Sie nun schrittweise durcharbeiten.

Container installieren 1

Unter (1) wählen Sie den Host, auf dem der Container gleich gestartet wird. Geben Sie ihrem neuen Container (3) einen Namen und weisen ihn ggf. einem Pool zu (4).

Container installieren 2

Im Gegensatz zu einer VM benötigt der Container ein Passwort von Ihnen, das Sie (5) zweimal identisch eingeben. Im nächsten Schritt wählen Sie das zu installierende Container-Template aus.

 

Container installieren 3

Die Einstellungen zu „Root Disk“, CPU und Memory sind fast identisch wie bei der Erstellung einer virtuellen Maschine.

Container installieren 4

Im Reiter Netzwerk müssen Sie die vollständige IP-Adresse in der Form „x.x.x.x/y“ eingeben – wobei x.x.x.x für die IP und y für die Netzwerk-Maske steht.

 

Container installieren 5

Im Reiter DNS geben Sie den Namen ihrer Domain an (z.B. test.local) und mindestens einen DNS-Server. Bestätigen Sie danach die Einstellungen. Im Anschluss wir die VM erstellt.

Starten Sie nun den Container mit einem Klick auf „Start“.

Danach wird das Filesystem des Containers erstellt und das Container-Image darauf kopiert.

Der eigentliche Container-Inhalt wird nun vom Turnkey-Template aus erstellt. Dieser Vorgang ist von Anwendung zu Anwendung unterschiedlich. Der Installations- und Konfigurationsaufwand wird nur beim ersten Boot durchgeführt. Nach der Installation bzw. Konfiguration kann der Container wie eine virtuelle Maschine benutzt werden.

Am Ende der Turnkey-Installation werden Sie in der Regel gefragt ob Sie Security-Updates der Software durchführen möchten. Sofern Sie eine bestehende Internet-Verbindung haben, sollten Sie dies tun, um die frisch installierte Software direkt zu aktualisieren.

Vorteil: Die manuelle Installation größerer Webanwendungen wie Magento dauert von Hand schon gerne einmal 1-2 Stunden. Mit Turnkey können Sie die Installation von Magento in 5-10 Minuten (je nach Hardware) fertig stellen.

Container löschen

Damit Sie einen Container löschen können, fahren Sie ihn zunächst herunter. Anschließend löschen Sie ihn über Mehr(More) -> Remove und geben zur Sicherheit noch die VM-ID ein.

Anbindung von Proxmox an LDAP / Active Directory

Proxmox kann über ein LDAP-Server oder ein bestehendes Active Directory die Authentifizierung vornehmen. Das bedeutet, daß in einer AD angelegte Benutzer mit Ihrem Passwort verifiziert werden.

Eine Automatische Prüfung (wie etwa bei der pfsense Firewall) auf eine Gruppenmitgliedschaft gibt es bei Proxmox nicht. Die Benutzernamen müssen also einmal lokal im Proxmox Cluster angelegt werden und einer Administrations-Gruppe zugewiesen werden.

Anbindung von Proxmox an LDAP

Wie Sie eine AD mit Proxmox verbinden, beschreiben wir nachfolgend:

Klicken Sie auf Datacenter -> Permissions -> Authentifizierung -> Add:

Tragen Sie bei (1) den Kurznamen Ihrer AD ein. Bei Domain (2) fügen Sie den „langen“ Namen Ihre Domain ein. Bei Server (3) tragen Sie die IP-Adresse des ersten Domain-Controllers des Active Directory ein. Bei Fallback-Server kommt die IP des zweiten Domain-Controllers rein.

Name vergeben

Als nächstes erstellen Sie eine Gruppe und geben ihr einen sprechenden Namen:

Klicken Sie auf Datacenter -> Permissions -> Groups -> Add

Rechte zuweisen

Nun weisen wir der neu erstellten Gruppe Rechte zu.

Klicken Sie auf Datacenter (1) -> Permissions (2) ->  Add (4); wählen Sie anschließend Group Permission (4)

 

Administrative Rechte zuweisen

Im letzten Schritt weisen wir der Gruppe der „AD-Administratoren“ administrative Rechte zu. Dazu geben Sie bei (1) den Pfad „/“ ein. Damit erhält die Gruppe „AD-Administratoren“ Zugriff auf das gesamte Cluster.

Durch die Auswahl der Rolle „Administrator“ erhält anschließend die Gruppe AD-Administratoren administrative Reche im gesamten Cluster von Proxmox.

Benutzername anlegen

Damit sich nun ein echter Anwender, der in der Active Directory Domain bereits existiert, in Proxmox anmelden kann, muss der Benutzername noch in Proxmox angelegt werden.

Dazu klicken Sie auf Datacenter -> Permissions -> User -> Add

Geben Sie dem Benutzer den exakt gleichen Namen wie im AD.

Als Realm wählen Sie die das AD-Realm aus (2) und unter (3) die vorher angelegte Gruppe (3).

Bei der nächsten Anmeldung wählen Sie dann als Realm nicht mehr „Linux PAM standard authentication“ sondern ihr Active Directory aus.

Betrieb von Promox

Cluster-Übersicht / Cluster Status

Die Übersicht und Auslastung des Clusters sieht man als IT-Administrator auf einen Blick, wie die Auslastung und Belastung des Clusters ist.

..-> Datacenter -> Summary

Cluster Status

Unter (1) sehen Sie auf einen Blick, (grüner Haken) ob alles in Ordnung ist. Sofern einer der Hosts (engl. Nodes) offline sein sollte, so sehen Sie das unter (2) rechts oben. In der Zeile Guests sehen Sie wie viele virtuelle Maschinen angelegt und aktiv sind. Das gleiche auf der rechten Seite (4) für Container.

Um unteren Bereich „Resources“ sehen Sie über alle Hosts hinweg, wieviel CPU, RAM und Speicher-Kapazität sie insgesamt zur Verfügung haben und wieviel davon benutzt werden.

Wenn Sie etwas weiter runter scrollen, sehen Sie außerdem in der Zeile „Nodes“ die Auslastung aller einzelnen Cluster-Mitglieder.

Auslastungen der einzelnen Cluster Mitglieder

Neben der CPU- und RAM-Auslastung wird Ihnen hier auf einen Blick die Betriebszeit (Uptime) eines jeden Proxmox-Hosts angegeben.

Monitoring von Proxmox-Servern

Proxmox-Hosts lassen sich als Linux-Hosts mit Debian wie jeder andere Host mit Linux (etwa Centos) per icinga2 überwachen. Die folgenden Prozesse sind auf einem frisch installierten Cluster-Mitglied aktiv und sollten überwacht werden:

root@b65k-pve03:/dev/pve# ps axu | grep -i pve
root      1779  0.0  0.4 317788 74260 ?        Ss   Jan02  13:44 pve-firewall
root      1790  0.2  0.4 308956 78840 ?        Ss   Jan02  54:13 pvestatd
root      1811  0.0  0.6 527352 110292 ?       Ss   Jan02   0:14 pvedaemon
www-data  1863  0.0  0.6 535024 112060 ?       Ss   Jan02   0:14 pveproxy
root     22263  0.0  0.4 325644 81796 ?        Ss   Jan13   0:55 pve-ha-lrm
root     22326  0.0  0.5 326096 82524 ?        Ss   Jan13   0:27 pve-ha-crm
root     22886  0.0  0.6 537652 104360 ?       S    Jan13   0:04 pvedaemon worker
root     22887  0.0  0.6 537652 104392 ?       S    Jan13   0:04 pvedaemon worker
root     22888  0.0  0.6 537452 104104 ?       S    Jan13   0:04 pvedaemon worker
www-data 22898  0.0  0.6 545416 107000 ?       S    Jan13   0:04 pveproxy worker
www-data 22899  0.0  0.6 545188 106292 ?       S    Jan13   0:04 pveproxy worker
www-data 22900  0.0  0.6 545172 106288 ?       S    Jan13   0:04 pveproxy worker
root     27863  0.0  0.0  89900   160 ?        Ssl  06:25   0:01 /usr/sbin/pvefw-logger

 

Die Linux-Prozesse einer lauenden virtuellen Maschine beginnen mit “ /usr/bin/kvm”. Den aktuellen Bestand an kvm-Prozessen ermittelt man mit „qm list“:

root@b65k-pve02:/dev/pve# qm list
VMID NAME                 STATUS     MEM(MB)    BOOTDISK(GB) PID
100 Test01               running    4096              32.00 11772
101 Test03               running    2048              32.00 11874

Sofern einzelne KVM-Prozesse statisch an einen Host gebunden sind, kann man diese natürlich wieder mit icinga2 überwachen.

Datensicherung von Proxmox

Datensicherung der virtuellen Maschinen

Damit Sie eine regelmäßige Datensicherung der virtuellen Maschinen im laufenden Betrieb erstellen können, müssen Sie auf Snapshots zurückgreifen. Bei der Erstellung eines Snapshots schreibt Proxmox die aktuellen Daten der VM in eine zusätzliche Datei weiter. Dadurch wird die bestehende Disk-Datei „statisch“ und kann gesichert werden.

Als Sicherungsverzeichnis kommt das weiter oben eingerichtete zentrale Backup-Verzeichnis in Frage. Mit dem Befehl “vzdump” kann auf jedem Host ein Dump der auf diesem Host laufenden VMs erstellt werden.

Pve# vzdump –all –dumpdir /mnt/backup –mode snapshot

Wichtig dabei: Damit alle virtuellen Maschinen des Proxmox-Clusters gesichert werden, muss der oben genannte Job auf allen (!) Proxmox-Hosts regelmässig laufen.

Am besten fügen Sie die obige Befehlszeile in die crontab jedes Proxmox-Hosts ein und starten die Datensicherung automatisch nachts um 2.00 Uhr.

0 2 * * * /usr/bin/vzdump –all –dumpdir /mnt/pve/proxmox-backup –mode snapshot

Datensicherung der Proxmox-Konfiguration

Die eigentliche Konfiguration des Proxmox-Clusters sowie die Cluster-Konfiguration von corosync liegt unter /etc/pve . Die Summe der Dateien ist nur wenige KiloByte groß.

Updates von Proxmox-Servern

Proxmox-Server werden (als Debian-Linux) über den Paketmanager “apt” aktualisiert.

Wichtig: Bei Updates von Proxmox sollten Sie immer alle (!) Hosts eines Clusters auf einen einheitlichen Software.-Stand bringen.

Vorgehen bei Updates:

apt-get update # damit wird die Paket-Liste bzw. das Repository aktualisiert

apt-get upgrade # führt den eigentlichen Updates von Paketen durch.

Hinweis: Das Update von apt können Sie zentral mit ansible machen.

 

Anschließend rebooten Sie den betroffenen PVE-Hosts nachdem Sie vorher die virtuellen Maschinen auf einen anderen PVE-Host verschoben haben. Zur Sicherheit schauen Sie bitte vorher auf dem PVE-Host nach, ob alle VMs verschoben wurden.

Bsp.: Mit ‚qm list‘ erhalten Sie die Liste aller vorhandenen virtuellen Gäste auf einem Proxmox Host:

root@agppve01:~# qm list
VMID NAME                 STATUS     MEM(MB)    BOOTDISK(GB) PID
107 Biteno-piwik01       running    4096              65.00 9165
108 Biteno-piwik02       running    4096              65.00 35251
109 Win2008R201          stopped    2048              32.00 0
110 Win2008R202          stopped    2048              42.00 0
112 bareos.itsc.local    running    4096             130.00 35893
113 ob02.biteno.com      running    4096              64.00 21796

 

Wichtig: Starten Sie immer nur einen Proxmox-Host auf einmal neu. Nach dem Reboot kontrollieren Sie, die Linux-Version und ob das Cluster wieder vollzählig ist.

Nach dem Reboot:

Kontrollieren Sie die Linux-Kernel-Version mit „uname –a“

root@agppve01:~# uname -a

Linux agppve01 4.13.13-1-pve #1 SMP PVE 4.13.13-31 (Mon, 11 Dec 2017 10:00:13 +0100) x86_64 GNU/Linux

Gelb markiert ist die Kernel-Version von Linux.

 

Kontrollieren Sie den Status des Clusters mit dem Befehl „pvecm status“.

Die nachfolgende Übersicht zeigt das Cluster im Zustand, daß 4 Knoten im Cluster angemeldet sind und ihren Dienst tun.

root@agppve09:~# pvecm status
Quorum information
——————
Date:             Wed Jan 17 10:05:57 2018
Quorum provider:  corosync_votequorum
Nodes:            4
Node ID:          0x00000003
Ring ID:          4/416
Quorate:          Yes
Votequorum information
———————-
Expected votes:   4
Highest expected: 4
Total votes:      4
Quorum:           3
Flags:            Quorate
(…)

In der Zeile „Nodes“ erkennen Sie, wieviele Hosts gerade online sind. Die Zeile „Quorum“ zeigt, die Mindest-Anzahl der Hosts, die online sein müssen.

Im nachfolgenden Beispiel erkennen Sie, daß nur 3 Hosts online sind. Die Anzahl bei „Total Votes“ ist 3 (statt vorher 4). Das entspricht der Mindest-Menge an „Stimmen“ im Cluster, die nicht unterschritten werden sollte.

root@agppve09:~# pvecm status
Quorum information
——————
Date:             Wed Jan 17 10:09:23 2018
Quorum provider:  corosync_votequorum
Nodes:            3
Node ID:          0x00000003
Ring ID:          5/420
Quorate:          Yes
Votequorum information
———————-
Expected votes:   4
Highest expected: 4
Total votes:      3
Quorum:           3
Flags:            Quorate
Membership information
———————-
Nodeid      Votes Name
0x00000005          1 10.20.30.62
0x00000003          1 10.20.30.69 (local)
0x00000001          1 10.20.30.224

Migration von virtuellen Maschinen zu Proxmox

Nachfolgend beschreibe ich die funktionierenden Wege, einen virtuellen Gast von einem anderen Hypervisor zu Proxmox zu migrieren. Das kann Hyper-V, VMware oder ein anderes KVM-basiertes System wie Openstack oder Cloudstack sein.

Die Grundlage einer (erfolgreichen) Migration ist in der Regel ein lesbares Image der virtuellen Festplatte. Die Migrationswege beschreiben daher in der Regel wie ein Disk-Image von einer Plattform und der dort bevorzugten Speicherform zu Proxmox kopiert und konvertiert werden kann.

Proxmox verwendet zum Speichern von Disk-Images entweder das Format „qcow2“ oder ein so genannte „Raw“-Device.

Migration von VMWare zu Proxmox

  • Virtuelle Maschine auf VMWare runter fahren und beenden
  • Identifizieren Sie die Disk-Dateien auf dem VMWare-Server sowie den Pfad dazu
  • Kopieren Sie die Dateien auf den Proxmox-Host

Vom Proxmox-Host aus:

Pve# cd /<ihr-pfad-in-dem-sie-platz-haben/

Pve# scp root@<VMWare-IP>://vmfs/volumes/<PFAD/*flat* .

Legen Sie eine neue virtuelle Maschine auf dem Proxmox-Host an,  auf den Sie das Maschinen-Image kopiert haben. Achten Sie dabei darauf, daß Sie die Festplatte als „lokale“ Festplatte auf dem Proxmox-Host anlegen. Notieren Sie sich außerdem bitte die 3-stellige VM-ID.

Wichtig – Achten Sie auf folgende Punkte:

  • Die neue virtuelle Festplatte muss zur Bus-Architektur passen (bspw. „IDE“ )
  • Die neue virtuelle Festplatte muss mindestens so groß oder größer als die zu importierende Festplatte sein.
  • Erstellen Sie die Festplatte als lokale Festplatte

Kopieren Sie die Festplatte mit dem Linux-Befehl „dd“. Wechseln Sie in das Verzeichnis, in der das VMWare-Flatfile der Platte liegt.

Ersetzen Sie den Dateinamen des VMWare-Images (Endung: vmdk) durch den echten Dateinamen. Prüfen Sie außerdem bitte vorher ob unter /dev/pve/* auch ihre neu angelegten Proxmox-Images für ihre virtuelle Maschine liegen.

dd if=<alter-hostname>flat.vmdk of=/dev/pve/vm-<disk-id>disk-1

Migration von Hyper-V zu Proxmox

Fahren Sie die virtuelle Maschine unter Hyper-V herunter. Kopieren Sie anschließend das Disk-Image (*.vhd) von Hyper-V auf den Proxmox-Host.

Die notwendige Konvertierung (Umwandlung) des Hyper-V Diskimages machen sie wie folgt:

Pve# qemu-img convert win2008r2-1.vhd -O qcow2 win2008r2-1.qcow2

https://forum.proxmox.com/threads/migrate-hyper-v-machine-to-proxmox-kvm.13969/

Eine Übersicht der von Anwendern erfolgreich getesteten Migrationswege gibt es auf der Proxmox-Homepage.
https://pve.proxmox.com/wiki/Migration_of_servers_to_Proxmox_VE

Fazit zu Proxmox:

Für mittelständische Unternehmen und Rechenzentrumsbetreiber ist Proxmox eine gute Alternative zu den Platzhirschen OpenStack, VMWare oder Hyper-V. Mit der intuitiven Oberfläche nimmt Proxmox auch eingefleischten Windows-Admins die Angst vor Linux.

Für erfahrene Linux-Administratoren bietet Proxmox mit der Integration von Ceph und anderen Speichertechnologien alle Möglichkeiten moderene Konzepte wie „Software defined Storage“ im eigenen Unternehmen sicher und stabil einzusetzen.

Bareos Einführung – Online-Backup

, ,
Die Anmeldemaske von Bareos

Einleitung zu Bareos

Bareos ist neben Backup-PC und Bacula eines der populärsten Programme aus der OpenSource-Community um entfernte Server zu sichern. Wer die Software Bacula zur Sicherung auf Platte oder Tape (Bandlaufwerk) im Rahmen der Linux-Administration schon eingesetzt hat, wird sich in Bareos schnell zurecht finden.
Im nachfolgenden Tutorial zu Bareos gehen wir der Reihe nach die Schritte durch, die zur Installation und Konfiguration von Bareos notwendig sind. Außerdem fügen wir exemplarisch einen Windows-Client und einen Linux-Client hinzu.

Im zweiten Tutorial zu Bareos behandeln wir die notwendigen Anpassungen in der Konfiguration, wenn Sie Bareos mit sehr vielen Clients nutzen möchten.
Bareos ist ein so genannter Fork von Bacula, das bereits seit über 10 Jahren als Online-Backup bekannt ist. Seit 2012 entwickeln mehrere Software-Entwickler Bareos auf Basis von Bacula weiter. Hauptgrund war die schleppende Weiterentwicklung von Bacula

Das Konzept von Bareos

Bareos besteht wie Bacula aus 3 Diensten:

  • Der Storage Daemon (bareos-sd) – dieser Dienst verwaltet den Speicher, auf denen Backups gespeichert werden. Das können Festplatten oder Tape-Drives sein.
  • Der Filedaemon von bareos (bareos-fd) übernimmt auf jedem Client die Aufgabe, die Dateien des Clients zum zentralen Storage Daemon zu schicken.
  • Der Bareos-Director (bareos-dir) ist die zentrale Komponente, über die der Netzwerk-Administrator Backup-Clients anlegt, Backup-Jobs definiert oder Restores vornehmen kann.

Der Storage-Daemon sowie der Director werden typischerweise auf einem Linux-Server installiert. Der Bareos-Filedaemon muss auf jedem zu sichernden Client installiert werden. Es existieren dazu Programm-Pakete für Windows (ab Windows 2008 Server bzw. Windows 7) sowie für alle gängigen Linux-Distributionen (CentOS, Redhat, Ubuntu, Debian, SuSE Linux, …) sowie Univention (Version 4).

Vorteile von Bareos

Durch die Verteilung des Programms auf drei Dienste kann Bareos relativ gut skalieren. D.h. es ist möglich, den Director und den Storage-Daemon auf getrennten Servern laufen zu lassen.

Gegenüber Bacula hat Bareos noch den angenehmen Vorteil, daß es von Haus aus eine Weboberfläche mitbringt, über die Jobs gestartet oder Restores vorgenommen werden können.
Bareos unterscheidet sich sowohl von Backup-PC als auch bacula, daß hinter Bareos mittlerweile eine deutsche GmbH sitzt, die von einigen ambitionierten Software-Entwicklern geführt wird. Hier können Firmen im Zweifel auch kostenpflichtigen IT-Support für Bareos einkaufen.

Voraussetzungen für Bareos

Damit Bareos einwandfrei funktioniert, benötigen wir

  • Einen zentralen Server mit ausreichend Speicherplatz als Zuhause für den Bareos-Director
  • Mysql auf dem zentralen Bareos-Director
  • Netzwerk-Verbindungen zu allen zu sichernden Clients (internes LAN, Internet oder via VPN) auf den Ports 9102, 9103 und 9104

Im konkreten Fall platzieren wir den Bareos-Server zentral im internen LAN der Firma so daß er von dort problemlos mit allen internen Servern per TCP/IP kommunizieren kann.
Für die Kommunikation mit verteilten Clients im Internet richten wir (weiter unten) auf der pfsense ein 1:1 NAT ein und erlauben von extern den Zugriff auf Port 9102.

Empfehlung für das Hardware-Sizing bzw. Setup von Bareos

Im Test ist eine virtuelle Maschine mit 4 GB RAM und 4 Kernen ausreichend. Für das Betriebssystem (Centos 7) reichen in der Regel 50 -100 GB.
Wieviel Plattenplatz für die zu sichernden Rechner notwendig ist, hängt von deren Größe sowie der Vorhaltezeit für Backups ab. Dazu unten bzw. im zweiten Teil des Tutorials mehr.
Im konkreten Beispiel starten wir mit 10 TB Speicher, die über eine separate virtuelle Festplatte via LVM (wichtig!) zur Verfügung gestellt wird.

Besonderheiten von Bareos

Um Bareos auszuprobieren sollten Sie den Hostnamen des zentralen Bareos-Servers auf „bareos“ eingestellt lassen. Der Name „bareos“ für den Hostnamen ist an unzähligen Stellen in den Konfigurations-Dateien von Bareos versteckt. Hier lohnt sich die Umbenennung (meiner Meinung nach) erst, wenn man größere Installationen von Bareos mit verteilten Diensten einrichten möchte.

Damit die Clients mit dem zentralen Bareos-Server kommunizieren können muss sowohl für den Bareos-Director der Hostname des Clients als auch für den Client der Hostname von Bareos (bareos) per DNS auflösbar sein.

Dazu richten Sie am besten im DNS einen entsprechenden Eintrag ein. Wer Bareos nur mal eben auf zwei Geräten testen möchte, kann selbstverständlich den passenden Eintrag auch in der /etc/hosts auf Linux bzw. unter c:\windows\system32\drivers\etc\hosts anlegen.

Installation und Vorbereitung von Bareos

Wir nutzen zur Installation von Bareos eine Centos 7 Standard-Installation. Die Root-Partition bekommt 45 GB. Das Verzeichnis /var/lib/mysql erhält eine separate Partition mit 25 GB.
Zusätzlich erstellen wir eine große, zweite Festplatte mit 10 TB, die wir später mittels LVM unter /var/lib/bareos hängen. Unter /var/lib/bareos speichert Bareos in der Standard-Konfiguration die einzelnen Volumes ab, auf denen die gesicherten Daten gespeichert werden.

Hinweis: Für einen Test reicht sicherlich deutlich weniger Platz unter /var/lib/bareos.
Für die Installation sind die folgenden Schritte notwendig:

  1. Bareos-Repository für Centos 7 herunterladen
  2. Bareos, Mysqld(bzw. Mariadb) sowie das Bareos-Webui installieren
  3. Datenbank mit Hilfe von 3 fertigen Skripten erstellen
  4. Dienste (Bareos und httpd) starten
  5. Web-User anlegen

Die Schritte im Einzelnen:

Bareos-Repositiory herunterladen

Mit dem nachfolgenden Snippet/Skript laden Sie automatisch das richtige Repository für yum herunter:

#
DIST=CentOS_7
DATABASE=mysql
yum -y install wget
# add the Bareos repository
URL=http://download.bareos.org/bareos/release/latest/CentOS_7
wget -O /etc/yum.repos.d/bareos.repo $URL/bareos.repo
#

Bareos, Mysqld und Bareos-Webui installieren

Direkt danach können wir mit einem Befehl alle notwendigen Programme installieren

yum -y install bareos bareos-database-mysql bareos-webui mariadb-server

Mariadb/Mysqld anpassen / Datenbanken erstellen

systemctl enable mariadb
systemctl start mariadb
mysql_secure_installation
#(Fragen mit “y” beantworten und neues Passwort für mysql Benutzer root vergeben)

vi ~/.my.cnf
#insert:
[client]
host=localhost
user=root
password=<root mysql-Passwort>

Danach rufen wir die 3 SQL-Skripte auf, die alle notwendigen Datenbanken sowie Tabellen für Bareos erstellen:

/usr/lib/bareos/scripts/create_bareos_database
/usr/lib/bareos/scripts/make_bareos_tables
/usr/lib/bareos/scripts/grant_bareos_privileges

Ergebnis:

[root@bareos01 ~]# /usr/lib/bareos/scripts/create_bareos_database
Creating mysql database
Creating of bareos database succeeded.
[root@bareos01 ~]# /usr/lib/bareos/scripts/make_bareos_tables
Making mysql tables
Creation of Bareos MySQL tables succeeded.
[root@bareos01 ~]# /usr/lib/bareos/scripts/grant_bareos_privileges
Granting mysql tables
Privileges for user bareos granted ON database bareos.

Bareos Dienst und Apache starten

Mit den nachfolgenden Befehlen starten wir die vier Dienste. Die letzten 4 stellen sicher, daß die 4 Dienste auch nach einem Reboot wieder automatisch gestartet werden.

systemctl start bareos-dir
systemctl start bareos-sd
systemctl start bareos-fd
systemctl start httpd
systemctl enable bareos-dir
systemctl enable bareos-sd
systemctl enable bareos-fd
systemctl enable httpd

Web-Konfiguration

Die Konfiguration von Bareos für das Web-Interface liegt unter /etc/httpd/conf.d/bareos-webui.conf . Hier müssen Sie an sich nichts tun.
Wer zum Testen auf die Firewall bzw. iptables verzichtet, stellt den Firewall folgendermaßen aus:

systemctl disable firewalld
service firewalld stop

Zu guter Letzt legen wir noch einen Benutzer namens “admin” für die Web-Gui von Bareos an.

bconsole
configure add console name=admin password=test123 profile=webui-admin
quit

Danach können Sie sich unter http://<IP>/bareos-webui/ mit dem Usernamen „admin“ sowie dem Passwort „test123“ anmelden.
Abbildung: Anmeldemaske von Bareos

Die Anmeldemaske von Bareos

Die Anmeldemaske von Bareos

 

Vorbereitung für Backups

Damit Sie nun auch tatsächlich Backups und Restores durchführen können, müssen wir noch wenige Anpassungen am Bareos-Director vornehmen:

FileSets anlegen.

Damit Bareos weiß was es sichern soll, muss für Linux und Windows jeweils eine Definition für ein so genanntes FileSet angelegt werden. Dazu erstellen Sie unter „/etc/bareos/bareos-dir.d/fileset“ die Datei LinuxAll.conf. In ihr ist enthalten welche FileSysteme unter Linux gesichert werden sollen:

FileSet {
Name = „LinuxAll“
Description = „Backup all regular filesystems, determined by filesystem type.“
Include {
Options {
Signature = MD5 # calculate md5 checksum per file
One FS = No # change into other filessytems
FS Type = btrfs
FS Type = ext2 # filesystems of given types will be backed up
FS Type = ext3 # others will be ignored
FS Type = ext4
FS Type = reiserfs
FS Type = jfs
FS Type = xfs
FS Type = zfs
FS Type = vzfs
}
File = /
}
Exclude {
File = /var/lib/bareos
File = /var/lib/bareos/storage
File = /proc
File = /tmp
File = /var/tmp
File = /.journal
File = /.fsck
}
}

Das Gleiche machen wir analog für Windows. Hier erstellen Sie eine Datei mit dem Namen WindowsAllDrives.conf im selben Verzeichnis:

FileSet {
Name = „WindowsAllDrives“
Enable VSS = yes
Include {
Options {
Signature = MD5
Drive Type = fixed
IgnoreCase = yes
WildFile = „[A-Z]:/pagefile.sys“
WildDir = „[A-Z]:/RECYCLER“
WildDir = „[A-Z]:/$RECYCLE.BIN“
WildDir = „[A-Z]:/System Volume Information“
Exclude = yes
}
File = /
}
}

Die nachfolgenden Job-Definitionen verwenden gleich die eben angelegten FileSets.

JobDefinitionen anlegen

Wechseln Sie nun ins Verzeichnis „/etc/bareos/bareos-dir.d/jobdefs“ und legen dort die Standard-Job-Definition für Linux-Clients an. In dieser generellen Job-Definition wird zentral eingestellt, welches FileSet verwendet wird, wie oft und wohin gesichert wird.
Erstellen Sie dazu für alle Linux-Rechner die Datei DefaultLinux.conf

JobDefs {
Name = „DefaultLinux“
Type = Backup
Level = Incremental
FileSet = „LinuxAll“ # selftest fileset (#13)
Schedule = „WeeklyCycle“
Storage = File
Messages = Standard
Pool = Incremental
Priority = 10
Write Bootstrap = „/var/lib/bareos/%c.bsr“
Full Backup Pool = Full # write Full Backups into „Full“ Pool (#05)
Differential Backup Pool = Differential # write Diff Backups into „Differential“ Pool (#08)
Incremental Backup Pool = Incremental # write Incr Backups into „Incremental“ Pool (#11)
}

Das Gleiche machen wir für Windows-Clients. Hier legen wir im gleichen Verzeichnis die Datei DefaultWindows.conf an:

JobDefs {
Name = „DefaultWindows“
Type = Backup
Level = Incremental
FileSet = „WindowsAllDrives“
Schedule = „WeeklyCycle“
Storage = File
Messages = Standard
Pool = Incremental
Priority = 10
Write Bootstrap = „/var/lib/bareos/%c.bsr“
Full Backup Pool = Full # write Full Backups into „Full“ Pool (#05)
Differential Backup Pool = Differential # write Diff Backups into „Differential“ Pool (#08)
Incremental Backup Pool = Incremental # write Incr Backups into „Incremental“ Pool (#11)
}

Die Definitionen zu Pools, Volumes und Storage lassen Sie für den Moment so wie sie sind.

Zeitpläne für Backups / Schedules

Zur Sicherheit prüfen Sie noch, ob der Zeitplan für die Backups auch an Ort und Stelle ist.
Dazu wechseln Sie ins Verzeichnis „/etc/bareos/bareos-dir.d/schedule“ .
Dort sollen Sie die Datei WeeklyCycle.conf vorfinden. Diese hat den Inhalt:

Schedule {
Name = „WeeklyCycle“
Run = Full 1st sat at 21:00 # (#04)
Run = Differential 2nd-5th sat at 21:00 # (#07)
Run = Incremental mon-fri at 21:00 # (#10)
}

Sie haben nun alle grundsätzlichen Vorbereitungen abgeschlossen, um gleich mit wenigen Handgriffen den ersten Client in ihr neues Bareos-System aufzunehmen.

Einen Windows Client einrichten

Zur Installation eines Windows-Client (ab Windows 2008 Server oder Windows 7) laden Sie sich auf dem zu sichernden Server die für das Betriebssystem passende Windows-Datei herunter.
Extern: http://download.bareos.org/bareos/release/16.2/windows/

Die Installation starten Sie wie gewohnt mit einem Doppelklick auf die Exe-Datei des Bareos-Installers.

Der Windows-Installer für den Bares-Client unter Windows

Der Windows-Installer für den Bares-Client unter Windows

Standardmäßig ist bei der Windows-Installation lediglich der File-Daemon-Dienst angehakt. Sofern Sie den PC/Server lediglich sichern möchten, ist das auch vollkommen ausreichend.
Die beiden unteren Haken benötigen Sie nur, wenn Sie auf einer Windows-Maschine den Bareos-Director bzw. den Bareos-Storage-Daemon installieren möchten.
Klicken Sie anschließend auf „Next“.

Die richtigen Einstellungen für Bareos unter Windows

Die richtigen Einstellungen für Bareos unter Windows

In der nachfolgenden Maske müssen Sie mindestens bei (1) und (4) den Hostnamen ändern.
Der Reihe nach:
Bei (1) tragen Sie den vollständigen DNS-Hostnamen (fqdn) des Rechners ein auf dem Sie gerade Bareos installieren. Über den einzutragenden DNS-Namen muss der Bareos-Director den Client übers Netz erreichen können.
Die Zeile (2) „Director Name“ mit dem Eintrag „bareos-dir“ lassen Sie so wie sie ist. Ausnahme: Sie haben Ihren Director anders genannt. Dann passen Sie das hier an.
In der Zeile (3) finden Sie das von Bareos vorgeschlagene Passwort. Da es sich hier um ein willkürlich gewähltes Passwort handelt, können Sie das so lassen wie es ist. Das Passwort des Clients wird lediglich zur Kommunikation zwischen Client und Server verwendet. Sie selbst müssen es sich nicht merken.
Bei „Network Address“ (4) geben Sie wieder den vollständigen DNS-Hostnamen (fqdn) des Rechners ein auf dem Sie gerade Bareos installieren.
Klicken Sie nun auf „next“ und speichern Sie bitte unbedingt den Inhalt der letzten Maske ab:

Die fertige Konfig-Datei für den Windows Client von Bareos

Die fertige Konfig-Datei für den Windows Client von Bareos

Die 7 Zeilen Code der Konfiguration speichern Sie am besten zunächst auf dem Rechner unter c:\Install ab.

Bekanntmachen des Windows-Clients im Director

Wichtig: Damit der zentrale Bareos-Director den zu sichernden Client kennt, müssen Sie den Inhalt dieser Datei (inkl. Passwort-String) an der folgenden Stelle abspeichern:
Bareos# cd /etc/bareos/bareos-dir.d/client
Bareos# vi itsc40.itsc.local.conf # Inhalt einfügen, abspeichern
Hinweis: Die Datei muss die Endung *.conf haben. Zur besseren Übersicht empfehle ich die Datei wie den Hostnamen plus die Endung „.conf“ zu nennen. Im Beispiel also „itsc40.itsc.local.conf“.

Erstellen eines Backup-Jobs für den Windows-Client

Der Client ist nun zwar im Director bekannt, allerdings werden noch keine Backups durchgeführt. Eine Backup-JobDefinition für den Windows-Client erstellen Sie folgendermaßen:
Bareos# bconsole

*configure add job name=itsc40.itsc.local.job client=itsc40.itsc.local jobdefs=DefaultWindows
*quit

Mit dem obigen Befehl erstellen Sie für den Client mit Namen “itsc40.itsc.local” einen Job mit Namen “itsc40.itsc.local.job” und der JobDefinition, die unter “DefaultWindows” abgespeichert ist.

*configure add job name=itsc40.itsc.local.job client=itsc40.itsc.local jobdefs=DefaultWindows
Created resource config file „/etc/bareos/bareos-dir.d/job/itsc40.itsc.local.job.conf“:
Job {
Name = itsc40.itsc.local.job
Client = itsc40.itsc.local
JobDefs = DefaultWindows
}
quit

Rein technisch wird dabei von Bareos eine Text-Datei unter „/etc/bareos/bareos-dir.d/job/“ mit dem Namen itsc40.itsc.local.job.conf abgespeichert. In dieser Datei wird lediglich die Zuordnung von Job-Definition zu Client vorgenommen.

Starten des Backup-Jobs für den Windows-Client

Der Backup-Job wird nun zur nächsten Gelegenheit (siehe Konfiguration) starten. Sofern Sie den Backup-Job sofort laufen lassen möchten, so tun Sie das wie folgt:

Bareos# bconsole
*run job=itsc40.itsc.local.job
Using Catalog „MyCatalog“
Run Backup job
JobName: itsc40.itsc.local.job
Level: Incremental
Client: itsc40.itsc.local
Format: Native
FileSet: WindowsAllDrives
Pool: Incremental (From Job IncPool override)
Storage: File (From Job resource)
When: 2018-01-03 16:54:57
Priority: 10
OK to run? (yes/mod/no): y
Job queued. JobId=345

Wenn Sie den Status des Backup-Jobs prüfen möchten, so können Sie das entweder in der Web-Gui machen oder über die bareos-Konsole mit dem Kommando „messages“:

Bareos# bconsole
*messages
03-Jan 16:54 bareos-dir JobId 345: No prior Full backup Job record found.
03-Jan 16:54 bareos-dir JobId 345: No prior or suitable Full backup found in catalog. Doing FULL backup.
03-Jan 16:55 bareos-dir JobId 345: Start Backup JobId 345, Job=itsc40.itsc.local.job.2018-01-03_16.54.58_36
03-Jan 16:55 bareos-dir JobId 345: Using Device „FileStorage“ to write.
quit

Einen Linux-Client einrichten

Installation von Bareos auf Centos

Für Centos müssen Sie zuerst das passende Repository für Bareos herunterladen und nach /etc/yum.repos.de kopieren.

yum -y install wget
wget -O /etc/yum.repos.d/bareos-centos7.repo http://download.bareos.org/bareos/release/latest/CentOS_7/bareos.repo
yum -y install bareos-fd
systemctl enable bareos-fd

Hinweis: Für Centos 6 wählen Sie bitte „wget -O /etc/yum.repos.d/bareos-centos6.repo http://download.bareos.org/bareos/release/latest/CentOS_6/bareos.repo“

Die Installation auf Debian / Proxmox

Auf Debian ist bareos bereits in den Standard-Repositories enthalten. Daher können Sie direkt über apt-get den bareos-filedaemon installieren:

apt-get install bareos-filedaemon
systemctl enable bareos-filedaemon

Linux-Client auf dem Director einrichten

Damit nun der neue Linux-Rechner auch dem Bareos-Director bekannt gemacht wird, müssen wir folgendes auf dem zentralen Bareos-Director ausführen.

bareos# bconsole
*configure add client name=<CLIENT> address=<IP/FQDN> password=<SOME_PASSWORD>
*quit

Hinweis: Ich empfehle beim Client-Namen und bei der Adresse jeweils den FQDN des zu sichernden Servers zu verwenden.
Anmerkung: Die Anlage eines Client in der Web-Gui ist (bis jetzt) leider nicht möglich.

Linux-Client anlegen in der Konsole von Bareos

Linux-Client anlegen in der Konsole von Bareos

Beispiel:

*configure add client name=skisp02.veryhost.de address=skisp02.veryhost.de password=geheim123
Exported resource file „/etc/bareos/bareos-dir-export/client/skisp02.veryhost.de/bareos-fd.d/director/bareos-dir.conf“:
Director {
Name = bareos-dir
Password = „[md5]576aa4c2e8948b2a10d21617d3a84085“
}
Created resource config file „/etc/bareos/bareos-dir.d/client/skisp02.veryhost.de.conf“:
Client {
Name = skisp02.veryhost.de
Address = skisp02.veryhost.de
Password = geheim123
}

Bareos legt nun die Client-Datei, die Sie gleich auf den Linux-Client kopieren unter „/etc/bareos/bareos-dir-export/client/<clientname>/bareos-fd.d/director/ ab.
Die dort abgelegte Datei „bareos-dir.conf“ kopieren Sie auf den Linux-Client in das Verzeichnis
/etc/bareos/bareos-fd/director
Anschließend starten Sie den bareos-FileDaemon neu.

Client# service bareos-fd restart

Backup-Job für den Linux-Server anlegen

Damit anschließend auch wirklich täglich Backups erstellt werden, benötigen wir wie beim Windows-Client auch eine Job-Definition. Diese erstellen Sie ebenfalls über die Bareos-Konsole:

Bareos# bconsole
*configure add job name=<fqdn>.job client=<fqdn>jobdefs=DefaultLinux
quit

Wenn Sie nun nichts weiter tun, dann wird der Backup-Job entsprechend der Backup-Konfiguration während der folgenden Nachstunden starten. Wenn Sie den Backup-Job sofort starten lassen möchten, dann geben Sie folgendes ein:

Bareos# bconsole
*run job=<clientname>.job

Beantworten Sie die abschließend Frage mit “y“ und schon startet der Backup-Job.

Den Backup-Job für den Linux-Client starten

Den Backup-Job für den Linux-Client starten

Anmerkung:
Sofern einmal eine Job-Definition für einen Client angelegt ist und der Backup-Job läuft, können Sie alle weiteren Aktionen in der Web-Oberfläche von Bareos durchführen.

Fazit zu Bareos

Bareos ist mit einigen kleinen Hürden ein sehr brauchbares Tool zur Sicherung von verteilten Rechnern. Vor allem die Web-Oberfläche macht es den Netzwerk-Admins sehr leicht, die täglichen Jobs für Backup und Restore im Blick zu haben.
Welche Anpassungen Sie an Bareos für eine flächendeckende Nutzung mit vielen Clients vornehmen sollten, behandeln wir im zweiten Teil des Tutorials zur Bareos.

Weiterführende Infos zu Bareos

Weitere Informationen und Sites zu Bareos Online-Backup:

Da Bareos immer noch in viele Einstellung identisch mit Bacula ist, hilft an einigen Stelle auch die Doku von Bcula weiter: Hompage von Bacula
Bücher zu Bacula bzw. Bareos:

 

Ansible Tutorial – Einführung

, ,
Erneute Ausführung eines ansible Playbooks

Einleitung zu ansible

Ansible ist eine Software zur zentralen Verwaltung (Orchestrierung) und Administration von verteilten Servern. Die Community-Version von Ansible selbst ist als OpenSource Software im Rahmen der Linux-Administration lizenzfrei. Neben der Community-Edition von ansible gibt es vom Hersteller (Redhat) noch weitere lizenzpflichtige Editionen, die etwa ein Dashboard oder Workflows zur Verfügung stellen.

Ansible ist seit 2012 „auf dem Markt“ und aktuell in der Version 2.4 in den meisten Linux-Distributionen wie CentOS, Ubuntu oder Debian enthalten.

Warum ansible?

Ansible gehört neben Puppet und Chef zu den bekanntesten Software-Produkten, mit denen verteilte Systeme administriert werden können. Gegenüber puppet und chef hat ansible jedoch einige Vorteile:

  • Ansible benötigt keine zentrale Komponente. Ein Rechner, um per ssh auf die zu verwaltenden Server zugreifen kann, reicht aus.
  • Der Einarbeitungsaufwand ist bei ansible deutlich geringer als bei chef oder puppet
  • Es gibt für ansible eine Vielzahl von fertigen Skripten (so genannten Playbooks), die sie meistens kostenlos (etwa bei github) herunter laden können.

Voraussetzungen für ansible

Damit ansible einwandfrei funktioniert, benötigen wir

Eine Workstation / Server

Für die tägliche Arbeit mit ansible empfiehlt sich die Installation auf einem Rechner bzw. Server, auf dem Linux installiert ist. Das kann die Workstation des Linux-Administrators oder ein anderer Rechner sein, von dem aus die zu verwaltenden Server gut zu erreichen sind.

Netzwerk

Damit ansible von der Administrations-Installation aus auf die zu verwaltenden Server zugreifen kann, müssen diese über ein Netzwerk erreichbar sein. Dabei spielt es keine Rolle, ob die Geräte über das Internet, das LAN oder ein VPN erreicht werden können.

SSH-Keys

Die Kommunikation zwischen ansible und den entfernten Hosts läuft im Wesentlichen über ssh (secure shell). Damit ansible auf dem zentralen Host ohne Passwort auf die entfernten Server zugreifen kann, muss eine SSH-Verbindung mittels Zertifikat möglich sein.(Wie diese eingerichtet wird erklären wir weiter unten)

 

Installation und Vorbereitung von ansible

Neben der Software von ansible benötigen wir nur wenig weitere Zutaten:

Die Installation von ansible erfolgt in der Regel durch den Paket-Manager der eingesetzten Linux-Distribution. Ansible selbst basiert auf der Programmiersprache python. Die dafür notwendigen Pakete werden durch den Paketmanager (yum oder apt) mit installiert.

Installation von ansible auf Centos/RedHat

Centos# yum install ansible

Installation von ansible unter Ubunti/Debian

Debian# apt-get install ansible

SSH-Key erstellen

Damit später eine passwort-lose Anmeldung auf den entfernten Rechnern möglich ist, muss einmal zentral auf dem Verwaltungs-Server ein ssh-Schlüssel erzeugt werden:

Linux# ssh-keygen

Die anschließend gestellten Fragen nach dem Namen (id_rsa und id_rsa.pub) sowie einer Passphrase bestätigen Sie mit Return.

Nun sind um Verzeichnis /root/.ssh/ zwei Dateien vorhanden. Die ist der geheime Teil des Schlüssels (id_rsa) sowie der öffentliche Teil des RSA-Schlüssels: id_rsa.pub (pub = public).

SSH-Key auf die entfernten Rechner kopieren

Damit eine passwortlose Anmeldung auf den entfernten Rechnern möglich ist, muss nun der öffentliche Teil des Schlüssels auf den entfernten Server kopiert werden. Das geht am einfachsten mit ssh-copyid

Linux# cd /root/.ssh/

Linux# ssh-copy-id -id id_rsa.pub root@<entfernter Server>
#Ersetzen Sie <entfernter Server> durch die IP oder den DNS-Namen des entfernten Servers.

Sie werden nun noch einmal das Passwort des entfernten Servers angeben müssen. Danach sollte eine SSH-Anmeldung ohne Passwort möglich sein.

Testen Sie ob die Anmeldung ohne Passwort klappt:

Linux# ssh root@<entfernter Server>

Wenn dieser Schritt gekappt hat, dann können wir mit der eigentlichen Vorbereitung von ansible loslegen

Die Konfiguration von ansible

Nach der Installation von ansible auf dem zentralen Rechner hat der Paket-Manager ein Verzeichnis für ansible unter /etc/ansible angelegt. Im Verzeichnis /etc/ansible liegen zwei elementare Dateien:

Ansible.cfg

In der Datei ansible.cfg sind die grundsätzlichen Einstellungen für ansible abgelegt.

Wichtig in der Konfig-Datei ist, daß der Pfad zu Hosts-Datei nicht auskommentiert ist. Sofern die Zeile mit ‚#‘ beginnt, entfernen Sie das ‚#‘ Zeichen.

#inventory = /etc/ansible/hosts

Es empfiehlt sich, alle weiteren Einstellungen zunächst einmal so zu belassen, wie sie sind.

Hosts-datei

Ebenfalls unter /etc/ansible liegt die Datei „hosts“. (nicht zu verwechseln mit der Datei /etc/hosts).

In dieser Datei speichert ansible die Namen und Adresse der zu verwaltenden Server

Struktur der Hosts-Datei

Server und Rechner die Sie mit ansible verwalten möchten, müssen Sie an mindestens einmal in der Datei /etc/ansible/hosts eintragen.

Sofern Sie ihre zu verwaltenden Server alle gleich (im Sinne der Konfiguration) sind, können Sie diese der Reihe nach untereinander in der Hosts-Datei eintragen.

Gruppen in der Hosts-Datei

Sofern Sie Ihre Server nach bestimmten Kategorien gruppieren möchten, so tragen Sie in die Hosts-Datei den Namen ihre Gruppe in eckigen Klammern ein und führen direkt danach ihre Server nacheinander zeilenweise auf.

Bsp.:

Server01.domain.tld
Server02.domain.tld
Testserver01.intern.local
Testserver02.intern.local
[Produktion]
Server01.domain.tld
Server02.domain.tld
[Testserver]
Tessterver01.intern.local
Testserver02.intern.local
[Webserver]
Server01.domain.tld
Testserver01.intern.local
[Datenbankserver]
Server02.domain.tld
Testserver02.intern.local

Die Gruppen können Sie später dazu nutzen, die eigentlichen Skripte von ansible gezielt nur auf eine oder mehrere Gruppen anzuwenden.

Das macht u.a. dann Sinn, wenn etwa unterschiedliche Linux-Paketmanager zum Einsatz kommen oder Sie zwischen Produktions- und Entwicklungs-Servern unterscheiden wollen.

Der Ansible Befehl

Für ansible sind im täglichen Betrieb zwei Befehle wichtig

  • ansible zum interaktiven Aufruf
  • ansible-playbook zum ausführen komplexerer Skripte

 

Interaktive Nutzung von ansible

Der Befehl „ansible“ ist hilfreich, um direkt bestimmte einmalige und meist kurze Kommandos auf einem Remote-Host abzusetzen. Insofern ähnelt ansible hier dem klassischen ssh-Kommando.

Ein Beispiel:

ssh root@remotehost.tld „ls –la /root“

ist im Wesentlichen identisch mit:

ansible remotehost.tld -m shell -a „ls -la /root/”

Beide Befehle listen den Inhalt des Verzeichnisses /root auf.

Im Gegensatz zu ssh können Sie aber bei ansible diesen Befehl auf mehrere Hosts anwenden – vorausgesetzt die Server sind in der /etc/ansible/hosts aufgelistet.

Bsp.:

ansible centos –m shell –a „ls –la /root“

Die obere Zeile wird simultan auf allen Server ausgeführt, die in der Gruppe “[centos]” in der Datei /etc/ansible/hosts enthalten sind.

Alle Systemparameter eines Hosts abfragen

Um etwa alle bekannten System-Parameter eines Hosts (die ansible kenn) abzufragen und auszugeben, reicht der folgende Einzeiler:

Linux# ansible <hostname> -m setup
[root@ ansible]# ansible sample.domain.tld -m setup | head -n10
sample.domain.tld | SUCCESS => {
„ansible_facts“: {
„ansible_all_ipv4_addresses“: [
„123.231.218.129“
],
„ansible_all_ipv6_addresses“: [],
„ansible_apparmor“: {
„status“: „disabled“
},
„ansible_architecture“: „x86_64“,

Diese System-Informationen nennt ansible “facts” und sammelt sie bei jedem Aufruf von ansible. Auf diese ansible-facts kann später in Skripten zugegriffen werden. So ist es etwa möglich Unterscheidungen in Skripten bei unterschiedlichen Linux-Versionen oder Distributionen zu machen. Dazu gleich mehr.

Ansible Playbooks / Skripte

Ansible Skripte heißen „Playbooks“ und werden im YAML-Format erstellt und in der Regel mit der Endung .yaml abgespeichert. Neben den eigentlichen Playbooks können von ansible noch ganz normale Dateien kopiert werden. Außerdem steht mit Jinja2 eine Template-Engine zur Verfügung, mit der sie Datei-Vorlagen mit Variablen ersetzen und anschließend auf die Zielrechner kopieren können.

Hinweis: Das YAML-Format der Playbooks ist etwas tricky was die Einrückungen am Zeilenanfang anbelangt. Es empfiehlt sich daher einen Editor (z.B. Notepad++) zu verwenden, der das berücksichtigt, so daß Sie sich auf das Erstellen bzw. Anpassen des Playbooks konzentrieren können.

Mehr zur Notation von YAML in ansible finden sie in der ansible-Dokumentation.

Verzeichnis-Struktur für Ihre Skripte:

Damit Ihre Skripte später leichter zu managen sind, empfehle ich Ihnen folgende Struktur:

  • Legen Sie ein Verzeichnis für die ansible Playbooks an z.B. /root/ansible
  • Legen Sie ein weiteres Unterverzeichnis für Dateien und Templates an, die durch die Playbooks kopiert oder verändert werden sollen. /root/ansible/files

Ein einfaches ansible Playbook

Im ersten Skript bzw. Playbook verwenden wir wenige Zeilen ansible-Code um den Apache httpd-Dienst zu installieren. Kopieren Sie die nachfolgenden Zeilen in eine Datei mit dem Namen „playbook-install-httpd.yml“ ab:


– hosts: all
tasks:
– name: ensure apache is at the latest version
yum: pkg=httpd state=latest

Hinweis: Bitte beachten Sie die Anzahl der Leerzeichen bzw. Einrückungen am Anfang einer jeden Zeile.

Zur Erklärung:

In der ersten echten Zeile definieren Sie hinter „- hosts:“ zunächst auf welche Server/Rechner das Skript angewendet werden soll. In unserem Beispiel habe ich „all“ gewählt. Das ist die bei ansible bereits vordefinierte Gruppe aller Server, die in der Datei /etc/ansible/hosts enthalten sind.

Danach werden nach dem Schlüsselwort „tasks:“ die eigentlichen Zeilen mit Kommandos untereinander geschrieben.

Der Eintrag „- name:“ definiert eine Task mit einem Namen, der nach dem „:“ eingetragen ist. Hier können Sie ihren Aufgaben sinnvolle Begriffe geben, die in der späteren Ausführung der Tasks für Sie sichtbar sind.

In der letzten Zeile erfolgt dann das erste echte Kommando: Eine Installation durch den Paket-Manager „yum“. Über das ansible-Modul für yum „pkg=httpd“ (sprich: Package -> httpd) wird festgelegt, was installiert werden soll. Mit der Anweisung „state=latest“ definieren Sie, welche Version von apache Sie installieren lassen wollen.

Hinweis: Im obigen Beispiel haben wir im Skript angegeben, daß der Paketmanager yum sein soll. Daher würde dieses Skript auf Ubuntu oder Debian keinen Sinn ergeben, da hier der Paket-Manager apt heißt.

Daher wäre es für dieses Skript sinnvoll, es auf die Gruppen einzuschränken, die entweder CentOS oder Redhat installiert haben.

Ablauf des Skripts / Playbooks

Um das Playbook auf dem entfernten Host ablaufen zu lassen, geben Sie auf der Kommandozeile folgendes ein:

ansible-playbook playbook-install-httpd.yml –limit=<hostname>*

Erklärung: ansible-playbook ist der ansible-Befehl, der Playbooks im YAML-Format interpretieren und ausführen kann.

Sofern Sie die Ausführung eines Skripts auf wenige oder nur einen Host beschränken wollen, so nutzen Sie den Schalter „—limit=<hostname>*“ und geben etwa ihren Hostnamen (so wie er in der /etc/ansible/hosts eingetragen ist) ein.

Ausgabe eines Skripts bzw. Playbooks bei ansible

Ausgabe eines Skripts bzw. Playbooks bei ansible

Im Beispiel (siehe Bild) ist der Hostname mit 10.39.189.114 in der /etc/ansible/hosts eingetragen.

 

Ablauf eines Skripts

Bei allen ansible-Playbooks werden im ersten Schritt zunächst einmal die so genannten „Facts“ durch ansible gesammelt. Zu diesen Fakten gehören neben der Betriebssystem-Version unter anderem auch die Software-Stände oder die IP-Adresse des Hosts.

Anschließend werden die einzelnen Aufgaben (Tasks) der Reihe nach abgearbeitet. In der Zeile nach TASK (siehe Bild) erscheint dann lediglich die Beschreibung, die Sie in ihrem Skript nach dem Schlüsselwort „name:“ eingegeben haben.

Sofern lediglich Informatoinen von ansible erhoben werden oder wenn Aufgaben keine Veränderung nach sich ziehen, wir die Zeile GRÜN dargestellt. Sofern Änderungen vorgenommen werden, so erscheint die Ausgabezeile in GELB.
Fehler erscheinen in ROT.
Ganz zum Schluss werden im „Play Recap“ noch einmal für jeden Host.
Falls Sie ein Skript versehentlich zweimal durchlaufen lassen, so ergibt sich bei der Ausgabe folgendes Bild:

Erneute Ausführung eines ansible Playbooks

Erneute Ausführung eines ansible Playbooks

Ansible hat bei der Sammlung von Fakten festgestellt, daß die Software für den httpd-daemon (apache2) bereits in der aktuellsten Version installiert ist. Daher wird die Task mit „ok: [servername]“ quittiert und daher in Grün ausgegeben.

 

Ein Skript erweitern: Apache installieren und starten

Unser einfaches Beispiel hat nun zwar den Apache-Webserver installiert, aber noch nicht gestartet. Ein dauerhafter Start nach einem Reboot des betroffenen Servers fehlt ebenfalls.

Ebenso fehlen die für den apache sinnvollen Erweiterungen wie PHP, Python oder Perl. Mit der folgenden Erweiterung installieren wir nun die noch fehlenden Pakete, starten den apache und stellen sicher, daß nach einem Reboot der httpd-Dienst wieder startet.

– hosts: centos
tasks:
– name: ensure apache is at the latest version
yum: pkg=httpd state=latest
– name: ensure php is at the latest version
yum: pkg=php state=latest
– name: ensure perl is at the latest version
yum: pkg=perl state=latest
– name: ensure python is latest
yum: pkg=python state=latest
– name: ensure httpd is running (and enable it at boot)
service: name=httpd state=started enabled=yes
handlers:
– name: restart httpd
service: name=httpd state=restarted

Erklärung zum Skript:

In der Hosts-Anweisung haben wir nun nur die Gruppe [centos] in der Datei /etc/ansible/hosts angesprochen. Die nachfolgenden 4 Anweisungen installieren erst den Apache, dann php und danach perl und python.

Die Anweisung „service: name=httpd state=started enabled=yes” stellt sicher, daß der httpd-daemon sofort gestartet wird und außerdem in der Systemkonfiguration (systemctl bzw. chkconfig) dauerhaft auf „on“ gesetzt wird.

Der Eintrag nach „handlers:“ bewirkt folgendes: Sofern eines der vorangegangen Kommandos eine Änderung am System vorgenommen hat, wird der httpd-Dienst neu gestartet. Sofern keines der Kommandos eine Änderung bewirkt, wird der httpd-Dienst nicht neu gestartet.

Bedingungen in Skripten

Wie oben bereits beschrieben, kann es Sinn machen, Unterscheidungen in Skripten vorzunehmen um etwa die Linux-Distribution und damit den Paketmanager zu unterscheiden.

Der folgende Auszug aus einem komplexeren Skript unterscheidet bei Centos nach der Major-Release-Version (6 oder 7) und kopiert eine unterschiedliche Datei, je nachdem ob wir eine Centos-6 oder Centos-7 Installation haben:

tasks:
– name: copy bareos repo file for Centos 7.x
copy: src=files/bareos7.repo dest=/etc/yum.repos.d/
when:
– ansible_distribution == „CentOS“
– ansible_distribution_major_version == „7“
– name: copy bareos repo file for Centos 6.x
copy: src=files/bareos6.repo dest=/etc/yum.repos.d/
when:
– ansible_distribution == „CentOS“
– ansible_distribution_major_version == „6“

Das Schlüsselwort „when:“ nach der eigentlichen Task definiert, unter welchen Umständen die Aufgabe (Task) durchgeführt wird.

Der eigentliche ansible Befehl „copy:“ kopiert die Datei, die nach „src“ angegeben ist in das Verzeichnis, das nach „dest=“ folgt. Hier also: „files/bareos6.repo“ bzw. „files/bareos7.repo“ nach /etc/yum.repos.d .

Variablen und Templates in Skripten verwenden

Anstatt einfach eine statische Datei vom Kontroll-Rechner auf den entfernten Hosts zu kopieren, kann auch ein Template verwendet werden. Der Unterschied zum Kopieren ist der, daß Sie beim Template Host-spezifische Änderungen an der zu kopierenden Datei bzw. dem Template vornehmen können.

Templates haben bei ansible üblicherweise die Endung .j2 . Die eigentlichen Variablen werden in Templates oder Skripten mit doppelten geschweiften Klammern eingefügt.

Bsp.:

– name: modify index.html.j2 and copy to /var/www/html
template: src=files/index.html.j2 dest=/var/www/html/index.html

Inhalt von files/index.html.j2:

Sie sehen den Webserver auf {{ ansible_fqdn }} .
Auf dem Server ist {{ ansible_distribution }} in der Version
{{ ansible_distribution_major_version }} installiert .

Beim Kopieren des Templates werden nun pro Host der jeweilige Hostname sowie der Name und die Nummer der Linux-Distribution ausgegeben.

Die Variablen ansible_fqdn sowie ansible_distribution und ansible_distribution_major_version werden durch ansible beim Gather-Facts Durchlauf mit Inhalt gefüllt

Eigene Variablen in Playbook und Templates

Ansible erlaubt die Definition und Verwendung eigener Variablen. Variablen sind dabei immer „Schlüsselname->Wert“-Zuweisungen. Dabei kann nicht nur ein Wert definiert werden, sondern eine Variable kann eine Liste von Werten enthalten.

Variablen können vorab im Kopf eines Playbooks definiert werden oder zur Laufzeit auf dem Host erfragt und registriert werden:

Beispiel:

– hosts: webservers
vars:
http_port: 80

Hier wird die Variable „http_port“ mit dem Wert „80“ belegt.

Beispiel für die Registrierung von Variablen zur Laufzeit:

– hosts: web_servers tasks: – shell: /usr/bin/foo register: foo_result ignore_errors: True

Im zweiten Beispiel wird auf dem entfernten Host der Shell-Aufruf “/usr/bin/foo” ausgeführt. Das Ergebnis wird als Variable „foo_result“ gespeichert. Die Aufgabe der Zuweisung von Wert zu Variable übernimmt das Schlüsselwort „register“. Der eigentliche Inhalt der Variable kann später weiter verwendet werden.

Hinweis: Das Programm /usr/bin/foo gibt es nicht wirklich.

Skripte in Playbooks wieder verwenden

Über include und import-Anweisungen können Sie bestehende Skripte in ihren Playbooks einbinden und so mehrfach verwenden. Ein so eingebundenes Playbook-Fragment kann wiederum beliebig viele Tasks enthalten.

Ein Beispiel.:

– hosts: all
vars:
internal_networks: [10.10.10.0, 10.20.20.0]
tasks:
– include_tasks: ansible_bareos_external_network.yml
when: ansible_default_ipv4.network not in internal_networks
– include_tasks: ansible_bareos_internal_network.yml
when: ansible_default_ipv4.network in internal_networks

Über das Schlüsselwort “include_tasks:” definieren Sie das Skript, das eingefügt warden soll.

Im obigen Beispiel wurde außerdem eine eigene Variable namens „internal_networks“ definiert und mit den Werten „10.10.10.0“ sowie „10.20.20.0“ vorbelegt..

Je nachdem ob die (beim Fakten-Check) ansible-Variable ansible_default_ipv4.network identisch mit einem der Einträge bei „internet_networks“ ist, wird entweder das Skript ansible_bareos_internal_network.yml oder ansible_bareos_external_network.yml ausgeführt.

Hinweis: Ein yaml-Skript, das sie über include in ein Skript einfügen, darf nur reine Task-Anweisungen enthalten. Hosts-Anweisungen sind nicht erlaubt. Die nehmen Sie im Haupt-Skript vor.

Fazit zu ansible:

Mit ansible kann sich jeder Netzwerk-Administrator mit wenig Aufwand seine eigene Sammlung an Skripten zum Systemmanagement erstellen. Vor allem die große Auswahl an bestehenden Playbooks macht es auch Einsteigern sehr leicht, mit ansible erste Erfolge zu erzielen.

Für viele Linux-Admins sind die kleinen und großen ansible-Helferlein aus dem IT-Alltag gar nicht mehr wegzudenken. Wer einmal das Konzept und die Einfachheit von ansible verstanden hat, will meist keine 20 Server mehr von Hand anpassen ;-).

Welche Erfahrungen haben Sie mit ansible gemacht? Schreiben Sie’s uns in die Kommentare. Wir freuen uns drauf.

 

Weiterführende Infos

Weitere Informationen und Sites zu ansible:

Bücher zu ansible:

Einführung in TCP/IP – Netzwerkgrundlagen

,
ISO-OSI-7-Schichten-Modell

Einführung: Netzwerke mit TCP/IP

Wer heute als Linux-Administrator oder Windows-Profi Server oder ganze Netzwerke verwaltet, der benötigt gute bis sehr gute Netzwerk-Kenntnisse. Dabei spielt TCP/IP  als meistgenutztes Netzwerkprotokoll eine herausragende Rolle.

Im Rahmen unserer Reihe zum Thema Linux-Administration bzw. Windows-Administration geben wir Ihnen einen kurzen Überblick über die wichtigen Facetten von TCP/IP. Das nachfolgende Tutorial richtet sich in erster Linie an Einsteiger. Aber auch fortgeschrittene Netzwerk-Administratoren finden sicher noch das eine oder andere Detail, das Ihnen bei der täglichen IT-Administration hilft

Im ersten Abschnitt erläutern wir die Grundlagen des wichtigsten Netzwerk-Protokolls (TCP/IP). Danach lernen Sie die wichtigsten Hilfsmittel und Tools zum Troubleshooting im Netz kennen.

TCP/IP

Grundlagen:

Eine TCP/IP Adresse (TCP/IP = transport control protocol/ internet protocol) in der Version 4 (meist IPV4 genannt) ist eine Nummerierung mit 4 binären Adressblöcken von maximal 2^8 (=256) Adressen

Es können also 256*256*256*256 = 2^32 = 4.294.967.296 Adressen weltweit verwendet werden.

Da dies schon lange nicht mehr ausreicht, wurde schon vor langer Zeit der IPV6 Standard definiert, der aber immer noch nicht flächendeckend eingesetzt wird.

Format einer IP-Adresse: 10.51.136.5

Generell gilt: Die End-Adresse „0“ (null)  kann nicht verwendet werden, ebenso ist die Nr. 255 tabu. Sie wird als Broadcast-Adresse verwendet.

MAC Adresse

Herstellercodes von MAC-Adressen (Auswahl)
00-07-E9-xx-xx-xxIntel
00-60-2F-xx-xx-xxCisco
00-15-F2-xx-xx-xxAsus

Jedes Internet-fähige Gerät hat auf seiner Netzwerkschnittstelle eine ein-eindeutige MAC-Adresse. Sofern ein Gerät (PC, Server, Switch) mehr als ein physisches Interface hat, so besitzt jedes Netzwerk-Interface eine eigene MAC-Adresse.

Bei Microsoft heißt diese „physikalische Adresse“.

Fomat: 00-11-22-33-44-55.

Es können alle hexadezimalen Zeichen vorkommen (0..9, A..F).

Einzelne Hersteller haben feste Adress-Bereiche reserviert, die sie bei der Produktion vergeben. (siehe Tabelle)

Wichtig: Wenn Sie virtuelle Maschinen anlegen (egal ob VMWare, Hyper-V oder KVM) so achten Sie bitte darauf, daß Sie unterschiedliche MAC-Adressen für ihre VMs verwenden.

 

 

TCP/IP im OSI-Schichtenmodell

Das OSI-Schichtenmodell (engl. OSI Layer) beschreibt 7 Schichten, die für das Zustandekommen von Daten-Kommunikation notwendig sind.

Layer 1: physische Schicht (-> Kabel)
Layer 2: Sicherungs-Schicht; Ethernet
Layer 3: Vermittlung, IP-Protokoll
Layer 4: Transport, TCP

ISO-OSI-7-Schichten-Modell

ISO-OSI-7-Schichten-Modell

Für das Nachfolgende gehen wir davon aus, daß an das Netzwerk anzuschließende Geräte entweder über Kupferkabel (Cat 5 bis Cat7 Ethernet-Kabel, sftp) oder Glasfaser-Kabel über Switches untereinander verbunden sind.

Switches arbeiten auf Layer 2 und können je nach Funktionsumfang auch Aufgaben auf Layer 3 übernehmen.

Mehr Informationen dazu: https://de.wikipedia.org/wiki/OSI-Modell

Reservierte IP-Adress-Bereiche

127.0.0.x -> die Adresse 127.0.0.1 ist als Loopback auf jedem Gerät vorhanden und wird nicht weiter geleitet (geroutet)

Damit größere Firmen ihre internen Geräte durchgängig mit IP-Adressen versehen können, werden die folgenden IP-Adressbereiche nicht im Internet geroutet.

10.x.x.x
172.10.x.x
192.168.x.x

Diese Adressbereiche können von jedermann intern (d.h. hinter der eigenen Firewall) genutzt und nach persönlichen Präferenzen in Subnetze unterteilt werden.

Subnetze

Damit TCP/IP vernünftig funktioniert, wird es in so genannte Subnetze unterteilt. Dabei werden größere Adressbereiche in kleinere Adressbereiche unterteilt. Diese Segmentierung erfolgt mit Hilfe von Subnetzmasken.

Das (frei verwendbare) IP-Subnetz 10.x.x.x kann bspw. Mit der Subnetzmaske „255.255.255.0“ etwa werden daraus mehrere Subnetze mit jeweils 256 Adressen. Etwa das Subnetz 10.42.136.0.

Die Netzwerkmaske:

(S. Wikipedia) Die Netzmaske, Netzwerkmaske oder Subnetzmaske ist eine binäre Maske, die im Netzwerkprotokoll IPv4 bei der Beschreibung von IP-Netzen angibt, welche Bit-Position innerhalb der IP-Adresse für die Adressierung des Netz- bzw. Host-Anteils genutzt werden soll. Der Netzanteil erstreckt sich innerhalb der IP-Adresse lückenlos von links nach rechts; der Hostanteil von rechts nach links. Der für die Adressierung des Netzanteils innerhalb der IP-Adresse genutzte Bereich wird auch Präfix genannt. Anstelle einer Subnetzmaske kann dieser für IPv4 und IPv6 auch mit der Angabe einer Präfixlänge spezifiziert werden. (bspw. /24)

In Verbindung mit der IP-Adresse eines Gerätes legt die Netzmaske fest, welche IP-Adressen dieses Gerät im eigenen Netz ohne die Zuhilfenahme eines Routers erreichen kann und für welche Ziel-Netze das Gerät Pakete an einen Router zwecks weiterer Vermittlung in andere Netzen zustellen muss. Der Netzwerkteil muss bei allen Geräten des jeweiligen Netzes gleich sein und damit verwenden alle Kommunikationsteilnehmer dieses IP-Netzes in der Regel auch dieselbe Subnetzmaske (bzw. Präfixlänge). Der Geräteteil der IP-Adresse wird für jedes Gerät innerhalb des Netzes individuell vergeben.

 

 

Übliche Netzmasken bei TCP/IP

NetzmaskeAnzahl nutzbarer IPv4-AdressenMaske als Bit-Muster
/8255.0.0.0max. 16.777.2141111’1111.0000’0000.0000’0000.0000’0000
/12255.240.0.0max. 1.048.5741111’1111.1111’0000.0000’0000.0000’0000
/16255.255.0.0max. 65.5341111’1111.1111’1111.0000’0000.0000’0000
/20255.255.240.0max. 40941111’1111.1111’1111.1111’0000.0000’0000
/21255.255.248.0max. 20461111’1111.1111’1111.1111’1000.0000’0000
/22255.255.252.0max. 10221111’1111.1111’1111.1111’1100.0000’0000
/23255.255.254.0max. 5101111’1111.1111’1111.1111’1110.0000’0000
/24255.255.255.0max. 2541111’1111.1111’1111.1111’1111.0000’0000
/25255.255.255.128max. 1261111’1111.1111’1111.1111’1111.1000’0000
/26255.255.255.192max. 621111’1111.1111’1111.1111’1111.1100’0000
/27255.255.255.224max. 301111’1111.1111’1111.1111’1111.1110’0000
/28255.255.255.240max. 141111’1111.1111’1111.1111’1111.1111’0000
/29255.255.255.248max. 61111’1111.1111’1111.1111’1111.1111’1000
/30255.255.255.252max. 21111’1111.1111’1111.1111’1111.1111’1100
/31255.255.255.254Keine1111’1111.1111’1111.1111’1111.1111’1110
/32255.255.255.255Keine1111’1111.1111’1111.1111’1111.1111’1111

Darstellung der Netzmaske

Eine Netzmaske ist genau so lang wie eine IPv4-Adresse, also 32 Bit. Eine 1 in der Netzwerkmaske kennzeichnet die Verwendung des Bits an derselben Position in der IP-Adresse für die Adressierung von Netzen. Eine 0 an derselben Position in der IP-Adresse kennzeichnet Adressinformationen für den Geräteanteil.

Der Netzwerkteil einer IPv4-Adresse ergibt sich damit aus ihrer bitweisen logischen AND-Verknüpfung mit der Netzmaske. Nach der bitweisen Negation der Netzmaske wird der Geräteteil ebenso abgetrennt.

Beispiel

IPv4-Adresse11000000 10101000 00000001 10000001192.168.1.129
UNDNetzmaske11111111 11111111 11111111 00000000255.255.255.0
=Netzwerkteil11000000 10101000 00000001 00000000192.168.1.0

 

IPv4-Adresse11000000 10101000 00000001 10000001
UNDNOT Netzmaske00000000 00000000 00000000 11111111
=Geräteteil00000000 00000000 00000000 10000001

Quelle: https://de.wikipedia.org/wiki/Netzmaske

 

Geräte im TCP/IP Netz

Damit Geräte miteinander zu einem Netzwerk verbunden werden können, benötigt man Switche bzw. Hubs.

Damit Netzwerkverkehr in die richtige Richtung geleitet wird, benötigt man pro Subnetz einen Router. Sie haben in Netzwerken die Aufgabe zu wissen, über welchen Weg welche entfernten IP-Adressen zu erreichen sind. Wenn man so will, sind das erweiterte Telefonbücher des Internets auf IP-Adressen-Basis.

Firewalls sind Router, die zusätzlich zur Vermittlung auf Layer 4 die Aufgabe übernehmen, bestimmten Datenverkehr zu erlauben und unerwünschten Datenverkehr zu unterbinden.

Ein Vergleich zum Straßenverkehr: Ein Router ist eine Ansammlung von Hinweisschildern welche die Richtung weisen. Ein Firewall ist ein Polizist, der bestimmte Regeln durchsetzt.

Router

Ein Router ist ein Gerät, das Netzwerkverkehr weiter leitet und das weiß welche Datenpakete wohin müssen.

Damit TCP/IP funktioniert, muss es in jedem Subnetz einen Router geben. Der Router ist mit einem Netzwerkinterface in eben diesem Subnetz und hat mindestens ein weiteres Interface in einem weiteren Subnetz, in das er die Netzwerkpakete weiter leitet.

Der Router ist das einzige Gerät bzw. die einzige TCP/IP-Netzwerk-Adresse, die zwingend im eigenen Subnetz liegen muss. Alle anderen für TCP/IP notwendigen Dienste wie DNS, NTP können in einem entfernten Subnetz liegen.

Hinweis: Router haben in der Regel mehrere Netzwerk-Anschlüsse oder können pro NIC (Netzwerkkarte) mehrere IP-Adressen bedienen. Daher kann ein und derselbe Router durchaus mehrere Subnetze bedienen.

Hub

Ein Hub verbindet (genauso wie ein Switch) Geräte miteinander. Im Gegensatz zum Switch hat er aber praktisch keine eigene „Intelligenz“. Faktisch kommen heute kaum noch Hubs zum Einsatz.

Switches

Switches verbinden Server und PCs/Clients per RJ-45 Kabel über eine Kupferleitung miteinander. Die übliche Geschwindigkeit beträgt meist 1Gbit/Sekunde.  Sehr einfache und in der Regel billige Switches sind un-managed. Bei Ihnen sind einfach alle Ports miteinander verbunden. Jeder Port kann mit jedem „reden“ d.h. Daten austauschen.

Verwaltbare Switche sind in der Regel für den Rack-Einbau gedacht und bieten meist mehr Features. Je nachdem ob der Switch auf Layer 2 oder Layer 3 arbeitet, hat er meist auch die für die OSI-Schicht notwendigen Features mit an Bord.

 

VLANs (virtuelle LANs)

Das wichtigste Feature von verwaltbaren Switches ist meist die Möglichkeit, den Switch bzw. mehrere Switche in logische so genannte VLANs zu unterteilen. Ein VLAN (virtual LAN) kann man sich wie einen Switch im Switch vorstellen.

Kurz gesagt: Alle Ports, die einem VLAN zugeordnet sind, können Daten miteinander austauschen. Ports, die nicht ihrem eigenen VLAN zugeordnet sind, sind für Sie nicht erreichbar.

Anwendungszwecke von VLANs

Durch VLANs lassen sich logische Netze erstellen und über ein und dieselbe physische Infrastruktur verwalten.

  • Trennung von Daten-Netzen von Voice-Over-IP (VoIP)
  • Trennung von unterschiedlichen Netzen (internes LAN, Internet, DMZ) in Firmen bzw. Rechenzentren

 

Dienste im TCP/IP Netz

Damit TCP/IP richtig funktioniert, benötigt man mindestens die Auflösung von IP-Adressen zu Namen und umgekehrt. Diese Aufgabe übernimmt das DNS (Domain Name System).

Daneben gibt es noch eine Reihe weiterer sinnvoller Dienste wie DHCP (dynamic host configuration protocol) oder das Netzwerk-Protokoll, welches die korrekte aktuelle Zeit liefert (ntp)

DNS (Domain Name System)

DNS ist ein zentraler Dienst, der die Zuordnung  von  Host- bzw. Domain-Namen zu einer oder mehrerer IP-Adressen vornimmt.

DNS kann man sich wie eine Telefonauskunft vorstellen: Ich weiß mit wem ich sprechen möchte (=Name), kenne aber seine Telefon-Nummer (=IP-Adresse) nicht.

Weiterführende Lektüre: https://de.wikipedia.org/wiki/Domain_Name_System

Im Internet existieren einige, wenige so genannte Root-Server. Diese stellen die oberste Ebene des weltweiten Internets dar. In Ihnen ist in der Regel nur der Verweis auf bestimmte Domain-Teile (etwa die .de-Domains) oder einzelne untergeordnete DNS-Server vorhanden.

Die Funktion und Aufrechterhaltung dieser Root-Server ist für das Funktionieren des Datenverkehrs im gesamten Internet unglaublich wichtig. An einen Root-Server wendet sich praktisch jeder untergeordnete DNS-Server, der eine Anfrage nicht selbst beantworten kann.

DHCP

Über DHCP ist es möglich, Endgeräten dynamisch eine gültige IP-Adresse zuzuweisen. D.h. das Endgerät meldet sich beim Booten per Broadcast (… „hallo ist da jemand…“) mit seiner MAC-Adresse und erhält vom dhcp-Dienst eine gültige IP-Adresse für einen bestimmten Zeitraum (meist 1-3 Tage).

Die IP-Adresse enthält:

  • Die eigene IP-Adresse
  • Die Netzmaske
  • Den Gateway

Optional – aber extrem sinnvoll – wird noch ein DNS Server mit übergeben.

Ein DHCP Dienst sollte idealerweise im gleichen Subnetz vorhanden sein, wie die Clients die der dhcp-Dienst bedient.

 

ARP (Adress Resolution Protocol)

Das Address Resolution Protocol (ARP) ist ein Netzwerkprotokoll, das zu einer Netzwerkadresse der Internetschicht die physikalische Adresse (Hardwareadresse) der Netzzugangsschicht ermittelt und diese Zuordnung gegebenenfalls in den so genannten ARP-Tabellen der beteiligten Rechner hinterlegt. Es wird fast ausschließlich im Zusammenhang mit IPv4-Adressierung auf EthernetNetzen, also zur Ermittlung von MAC-Adressen zu gegebenen IP-Adressen verwendet, obwohl es nicht darauf beschränkt ist. Für IPv6 wird diese Funktionalität nicht von ARP, sondern durch das Neighbor Discovery Protocol (NDP) bereitgestellt.

Quelle: https://de.wikipedia.org/wiki/Address_Resolution_Protocol

NTP (Network Time Protocol)

Über das Time Protocol kann die exakte Uhrzeit über das TCP/IP Netzwerk angefragt werden. Die Server für Deutschland lauten:

server 0.de.pool.ntp.org

server 1.de.pool.ntp.org

server 2.de.pool.ntp.org

server 3.de.pool.ntp.org

 

WOL (Wake on LAN)

Wake on LAN (WOL) ist die Möglichkeit, ausgeschaltete Endgeräte per Broadcast an ihre MAC-Adresse „aufzuwecken“ und booten zu lassen.

Beispiel: Wake on LAN

Beispiel: Wake on LAN

Voraussetzung: Das Bios des Geräts unterstützt das und die Funktion ist im Bios eingeschaltet.

Zur Nutzung benötigen Sie dann noch eine Software, die die Endgeräte „aufweckt“.

 

Bsp.: WOL von Aquilatech

https://wol.aquilatech.com/

 

 

Ports in TCP

(Wikipedia) Ein Port ist der Teil einer NetzwerkAdresse, der die Zuordnung von TCP– und UDP-Verbindungen und -Datenpaketen zu Server– und Client-Programmen durch Betriebssysteme bewirkt. Zu jeder Verbindung dieser beiden Protokolle gehören zwei Ports, je einer auf Seiten des Clients und des Servers.

Zur Einordnung: Wenn die TCP/IP-Adresse das virtuelle Nummernschild eines jeden Servers ist, dann sind die Ports die Eingänge zum System. Ähnlich wie dieTüren oder die Heckklappe bzw. der Kofferraumdeckel eines Autos steuern Ports, wo und wie Anwender auf ein Computer-System von außen zugreifen können.

Gültige Portnummern sind 0 bis 65535.

System Ports (0 – 1023)

Die System Ports oder auch „well known ports“ sind für bestimmte Dienste reserviert wie DNS, Mail oder NTP. Jeder Dienst in TCP/IP hat faktisch eine ihm zugewiesene Port-Nummer. Die Zuweisung erfolgt dauerhaft durch die IETF. (Internet Engineering Task Force)

Ports, die sie kennen sollten:

7TCPUDPEchooffiziell
20TCPFTP – Datenübertragungoffiziell
21TCPFTP – Verbindungsaufbau und Steuerungoffiziell
22TCPUDPSecure Shell (SSH) wird für verschlüsselte Fernwartung und Dateiübertragung genutzt (scp, sftp) sowie für getunnelte Portweiterleitungoffiziell
23TCPTelnet – unverschlüsseltes Textprotokoll, z. B. für Fernwartung (ähnlich SSH, mit telnetd) oder manuelle Kommunikation über Textprotokolle wie HTTPoffiziell
25TCPSimple Mail Transfer Protocol (SMTP) wird für die E-Mail-Übermittlung zwischen E-Mail-Servern genutzt und findet sehr breite Unterstützung.offiziell
53TCPUDPDomain Name System (DNS), meist über UDPoffiziell
67UDPBootstrap Protocol (BOOTP) Server; auch genutzt von DHCPoffiziell
68UDPBootstrap Protocol (BOOTP) Client; auch genutzt von DHCPoffiziell
69UDPTrivial File Transfer Protocol (TFTP)offiziell
80TCPHypertext Transfer Protocol (HTTP)offiziell

 

PortTCPUDPBeschreibungStatus
109TCPPost Office Protocol v2 (POP2)offiziell
110TCPPost Office Protocol v3 (POP3)offiziell
118TCPUDPSQL-(Structured Query Language)-Diensteoffiziell
123UDPNetwork Time Protocol (NTP) zur (hoch)genauen Zeitsynchronisierung zwischen mehreren Computernoffiziell
137TCPUDPNetBIOS NetBIOS Name Serviceoffiziell
138TCPUDPNetBIOS NetBIOS Datagram Serviceoffiziell
139TCPUDPNetBIOS NetBIOS Session Serviceoffiziell
143TCPUDPInternet Message Access Protocol (IMAP) – Mail-Managementoffiziell
161UDPSimple Network Management Protocol (SNMP)offiziell
162TCPUDPSimple Network Management Protocol Trap (SNMPTRAP)[13]offiziell
179TCPBGP (Border Gateway Protocol)offiziell
220TCPUDPInternet Message Access Protocol (IMAP), version 3offiziell
264TCPUDPBGMP, Border Gateway Multicast Protocoloffiziell

 

Registered Ports

Ports 1024 bis 49151 (400hex bis BFFFhex) – sie werden z.B. für Datenbanken oder Client-Programme verwendet. Die Zuweisung erfolgt in der Regel durch die IETF.

Bsp.: mySQL: Port 3306

Dynamic Ports

Ports 49152 bis 65535 (C000hex bis FFFFhex). Diese Ports werden in der Regel durch das Betriebssystem dynamisch an die nutzende Software vergeben.

 

 

Netzwerk Trouble-Shooting

Um ein Netzwerk zu testen bzw. Fehler zu identifizieren, benötigt man eigentlich wenige Tools. Viel wichtiger noch als Tools ist das Vorhandensein einer Dokumentation bzw. eines Netzwerk-Planes.

Grundsätzliches zur Fehlersuche im Netzwerk

Bei kaum einer anderen IT-Disziplin ist ein strukturiertes Testen und Dokumentieren so wichtig wie in einer Netzwerk-Topologie.

Anders herum: willkürliches Rumprobieren oder gar „Raten“ führt in Netzwerken meistens ins Nichts oder zu grauen Haaren.

Mein Rat daher: Erstellen Sie einen schriftlichen Plan ihres Netzwerkes. Dazu eignet sich Visio sehr gut. Eine ordentlich beschriftete und vollständige handschriftliche Skizze ist aber ebenso eine ausreichende Dokumentation bei der Fehlersuche.

Für alles weitere: Schreiben Sie jeden einzelnen Test, jeden Schritt auf. Dokumentieren Sie jede Funktion und jede Fehlfunktion.

Bspw.:

  • Ping von A nach B geht.
  • Ping von B nach C geht nicht
  • Traceroute von A nach X ergibt folgende Ausgabe

Änderungen: Um Fehler im Netz zu finden und abzustellen  müssen sie Änderungen vornehmen. Das ist an sich logisch. Widerstehen Sie aber bitte unbedingt der Versuchung, mehr als eine Veränderung auf einmal vorzunehmen. Immer nur eine Veränderung (etwa in der Konfiguration eines Switches oder Routers) auf einmal. Danach testen sie wieder und dokumentieren sie die Test-Ergebnisse

Netzwerk-Troubleshooting ist ein bisschen wie ein Versuchsaufbau im Physikunterricht: Sie ordnen ihre Versuchs-Elemente (Switch, Kabel, Router). Sie stellen ihre Parameter ein und messen anschließend ob das gewünschte Ergebnis heraus kommt.

Wenn Sie den Versuch ändern, dann ändern Sie immer nur einen Parameter auf einmal und messen wieder (und dokumentieren das Ganze). Wenn Sie das nicht tun, ist hinterher ihr gesamter Mess-Versuch für die Katz, weil Sie das Gesamtverhalten nicht re-produzieren können.

 

 

Tools im Netzwerk

Ipconfig (Windows)

Mit ipconfig können sie die folgenden Fragen beantworten:

  • Welche IP-Adresse habe ich. ?
  • Wie lautet mein Gateway / DHCP Server?
  • Welche DNS Server nutze ich?

Befehle:

ipconfig /all – listet alle Interfaces und IP-Einstellungen

Ipconfig /release  – gibt dhcp Adresse frei

Ipconfig /renew  – holt eine neue IP-Adresse vom dhcp Dienst

ipconfig an einem Windows Rechner

ipconfig an einem Windows Rechner

 

Ifconfig / ip addr (Linux)

Unter Linux können Sie die genutzten IP Adressen mit ifconfig (alt) oder mit „ip addr“ identifizieren.

Beispiel für ipconfig:

Beispiel für "ifconfig" unter Linux

Beispiel für „ifconfig“ unter Linux

Beispiel für „ip addr“

Beispiel für "ip addr" unter Linux

Beispiel für „ip addr“ unter Linux

Ping

Ein Ping sendet ein einfaches Datenpaket von Host A nach Host B. Der Ping kann vom Host B erwidert werden. Im positiven Fall erkennen sie folgendes:

  • Der Host B antwortet
  • Wie lange das Netzwerk-Paket für die zurückgelegte Strecke benötigt hat. (Laufzeit)

Achtung: Damit ein Ping funktioniert, muss der Empfänger auf Port 7 antworten. Tut er das nicht, heißt das nicht, daß er nicht da ist. Vielmehr kann

  • Der Empfänger absichtlich nicht antworten
  • Etwa ein Firewall diese Form der Kommunikation unterbinden.

Bsp.:

Laufzeiten und Latenz messen mit "ping"

Laufzeiten und Latenz messen mit „ping“

Ping nach Hong-Kong (mit ca 300 ms eher lang)

 

Traceroute

Traceroute oder Tracepath ist die Ablaufverfolgung im Internet zwischen zwei Knoten. Dabei wird jeder einzelne Router aufgeführt, über den ein Datenpaket zwischen wandert.

Bsp:

traceroute to www.bild.de (92.123.92.75), 30 hops max, 60 byte packets

 (…)

10  a92-123-92-75.deploy.akamaitechnologies.com (92.123.92.75)  4.178 ms  4.301 ms  4.291 ms

Dabei werden nicht nur die Knoten-Namen bzw. deren IPs aufgeführt, sondern auch die Paketlaufzeit gemessen.

Beispiel unter Windows:

Traceroute unter Windows

Traceroute unter Windows

Wichtig: Traceroute zeigt nur den jeweiligen Weg auf. Ob ein bestimmter Netzwerk-Verkehr auf einem bestimmten Port auch wirklich funktioniert, beantwortet traceroute nicht.

Hinweis: Der Befehl heißt unter Windows „tracert“ und unter Linux „traceroute“

Traceroute Befehl unter Linux

Traceroute Befehl unter Linux

 

 

Nslookup

Nslookup beantwortet die Frage ob ein DNS-Name (bspw. www.bild.de) zu einer oder mehrerer IP-Adressen aufgelöst werden kann.

Bsp: nslookup www.bild.de

Beispiel für nslookup

Beispiel für nslookup

(1): der DNS Server der antwortet

(2) Nicht aurorisierende Antwort bedeutet: Der DNS_Dienst (1) hat selbst woanders nachgefragt

(3) Das Ergebnis: Die IP 92.122.30.140 ist die IP-Adresse von www.bild.de

Hinweis: Sie können mit dem Befehl nslookup auch andere DNS-Server als ihren gerade genutzten abfragen.

Syntax: nslookup <domain.tld> <anderer DNS>

Bsp.: nslookup bild.de 8.8.4.4

 

 

Dig (Linux)

Mit dig sind deutlich präzisere Abfragen als mit nslookup möglich. Allerdings nur unter Linux.

Syntax: dig <host/domain> Optionen

Bsp.: dig www.bild.de (s.o.)

Beispiel für "dig"

Beispiel für „dig“

Bsp 2.: dig bild.de MX

Damit wird erfragt, welche Hosts der Domain bild.de für den Mail-Versand verantwortlich sind.

MX = Mail Exchanger

MX Records erfragen mit "dig"

MX Records erfragen mit „dig“

  • Die Abfrage: dig bild.de MX
  • Die Antwort: mxa.asv.de. mit Prio 100 und mxb.asv.de mit Prio 200
  • Der antwortende DNS Server (hier 8.8.8.8)

Wenn Sie absichtlich einen anderen DNS-Server abfragen möchten:

Dig <query> @andererDNS

Bsp.: dig bild.de MX @8.8.4.4

Iperf – Performance im Netz

Um tatsächliche Bandbreiten und Performance im Netzwerk zu messen, eignet sich das Linux-Paket iperf.

Installation:

Centos: yum install iperf

Debian: apt install iperf

Auf System1 wird mit “iperf –s” ein Server-Dienst gestartet. Auf der Linux-Gegenstelle wird mit „iperf –c <system1>“ der Standard-Test ausgeführt. Dieser läuft im default 10 Sekunden und gibt Auskunft über die tatsächliche Bandbreite.

Standardmässig läuft der Test als tcp-Test. Optional kann auch mit UDP-Paketen getestet werden.

Iperf mit „iperf –s“ starten. Auf der Gegenstelle anschließend den tatsächlichen Test starten:

Bsp. (Labor): Es wurden 10 Sekunden lang Pakete übertragen. Insgesamt 7,45 GByte mit einer Geschwindigkeit von 6,4 Gbit/Sekunde.

Hinweis: Beide Geräte waren an einem 10GBit/s Switch angeschlossen.

Iperf - auch im heimischen LAN gut zu nutzen

Iperf – auch im heimischen LAN gut zu nutzen

Reales Performance-Beispiel im Internet:

Schritt1: Auf dem Server, der den iperf-Dienst startet, müssen zuerst alle blockierenden Dienste (fail2ban, iptables) deaktiviert werden:

/etc/init.d/monit stop;
/etc/init.d/fail2ban stop;
/etc/init.d/iptables stop;

Anschließend wird mit iperf –s der Dienst gestartet. Die Gegenstelle startet dann den Test:

Im konkreten Beispiel wurden in 10 Sekunden 16,6 MByte übertragen. Das entspricht denn einer Bandbreite von 13 Mbit/Ssekunde.

Mit "iperf" können Sie unter Linux die Geschwindigkeit im Netz messen

Mit „iperf“ können Sie unter Linux die Geschwindigkeit im Netz messen

 

Netzwerk-Scanner

Ein Netzwerkscanner identifiziert die gerade aktiven IP-Adressen in einem Netzwerk. Dies erfolgt in der Regel über einen Ping.

Achtung: Nur wenn der Host einen Ping auch erwidert – also auf dem Port auch Kommunikation zulässt – sehen Sie mit einem IP-Scanner ein Resultat.

Beispiele:

 

Portscanner

Mit einem Portscanner können Sie herausfinden, welche Ports bei einem Host überhaupt offen für eine Kommunikation sind.

Bsp.:

 

Wichtig: Sie können damit noch keinen Rückschluss daraus ziehen, wer ggf. die Kommunikation zum Host kontrolliert.

Das kann der Host selbst regeln oder eine Firewall dazwischen sein.

Die richtige Ceph Netzwerkstruktur

, ,

Warum das richtige Netzwerk bei Ceph so wichtig ist

Vor der Integration eines Ceph storage-clusters steht jeder Linux-Administrator irgendwann vor der Frage, welches Netzwerk (Ethernet, Infiniband, Omnipath) er verwenden möchte. Das hängt zunächst selbstverständlich vom zu erwartenden Workload und der Anzahl der Clients ab. Allerdings gibt es noch einen wichtigen weiteren Faktor den es zu beachten gibt. Ceph nutzt viele unabhängige Festplatten. RAID Arrays bieten sich nicht an, da die Performance mit  jeder zusätzlichen Festplatte wunderbar linear skaliert. Die vielen einzelnen Festplatten sowie der Aufbau des Ceph Clusters bringen es mit sich, dass alle Datenblöcke auf mehrere Knoten verteilt werden müssen. Je nach implementiertem Regelwerk sogar über Racks oder Rechenzentren hinweg. Das schafft Ausfallsicherheit. Jedoch bedeutet das, dass bei jedem Lese- oder Schreibzugriff eine Kommunikation mit allen Ceph-Nodes über das Netzwerk stattfinden muss, um alle notwendigen Datenblöcke zu erreichen.

Festplattenzugriff = Netzwerkzugriff bei Ceph

Da also jeder Zugriff auf eine der vorhandenen Festplatten auch ein Netzwerkzugriff ist, sollte man unbedingt auf ein 10 GE Netzwerk zurückgreifen um alle Ceph Knoten untereinander zu verbinden. 10 GE stellt hierbei das absolute Minimum dar. Möchten Sie Ceph richtig im produktiven Betrieb mit mehreren clients einsetzen, kommt ein 1 GE Netzwerk wirklich extrem schnell an seine Grenzen. Hier ist nicht nur der Datenverkehr zu den Clients und zwischen den Ceph Knoten bei der konkreten Datenabfrage zu betrachten. Ceph muss schließlich auch alle Replikationen auf den vorhandenen Servern und Festplatten des Clusters verteilen. Im besonderen wenn eine der Festplatten oder ein ganzer Server ausfällt, repliziert Ceph automatisch die Daten bis wieder die gewünschte Anzahl an Repliken vorliegt.

Netzwerkoptimierung

Dieses Verhalten kann durch getrennte Netzwerke optimiert werden. Ein Netzwerk übernimmt dann die Kommunikation zu den clients. Das zweite Netzwerk ist ausschließlich für die OSD Replikationen zuständig.

Die Konfiguration

Um zwei separate Netzwerke zu nutzen, müssen die Netzwerke innerhalb der ceph.conf eingetragen werden. Hierzu genügt es bereits die Netz ID mit entsprechendem Prefix anzugeben.

[global]

public network = 172.10.10.0/24

cluster network = 172.10.11.0/24

Sobald die Ceph Konfiguration auf allen Knoten verteilt wurde und die Services neu gestartet sind, werden die Netzwerke entsprechend verwendet. Damit wurde ein möglicher Flaschenhals in der Architektur  des Clusters optimiert bzw. verhindert.

Software Defined Storage mit CEPH

, , ,

Datenwachstum als Herausforderung der IT

Das stetige Wachstum der Datenmengen ist ein Problem, dem sich jede IT-Abteilung früher oder später stellen muss. Nutzen Sie ausschließlich klassische Speicherlösungen wie SAN oder NAS müssen die zur Verfügung stehenden Kapazitäten irgendwann mühsam erweitert werden. Eine solche Maßnahme hat des öfteren auch eine kurze downtime zur Folge, da nicht jede Erweiterung im laufenden Betrieb möglich ist.

Damit stellt sich bereits ein weiteres großes Problem ein. Kunden erwarten heutzutage, dass IT-Services zu 100 % an jedem Tag und zu jeder Stunde verfügbar sind. Downtimes werden immer weniger toleriert, besonders im Bereich von Rechenzentren sowie des Hostings. Eine mögliche Lösung um diese Zeiten zu minimieren oder gar völlig auszuschließen bietet beispielsweise Software Defined Storage oder kurz SDS.

Ceph geht neue Wege

Ceph Architektur

Abbildung 1
Ceph Architektur

Schwierigkeiten bei Software Defined Storage

CEPH ist aber keineswegs perfekt und bringt selbstverständlich auch Nachteile mit sich. Ein Merkmal mit dem man sich vor der Inbetriebnahme auseinandersetzen muss, sind die Latenzen die SDS im Vergleich zu Direct Attached Storage (DAS) mit sich bringt. Die erhöhte Komplexität des Software Stacks in Kombination mit den verwendeten Netzwerkverbindungen erhöhen die Latenz pro IO signifikant.

Es erweist sich als äußerst schwierig die Latenz unter den Wert von einigen Millisekunden für Schreibvorgänge zu senken. Woher diese Latenz kommt lässt sich verdeutlichen, wenn man sich die Arbeitsweise von CEPH bei Schreibvorgängen etwas genauer betrachtet (Abbildung 2).

Ein synchroner IO muss vom Client zur primären OSD gesendet werden. Die primäre OSD schickt anschließend die Anzahl konfigurierter Replikationen zu weiteren OSD’s und deren Journalen. Sobald die Repliken auf den Journalen aller OSD’s vorliegen, wird der Vorgang an die primäre OSD bestätigt. Hat die primäre OSD nun alle Bestätigungen erhalten, wird eine Bestätigung an den Client gesendet und dieser kann den nächsten IO senden. Das verdeutlicht schon weshalb es bereits zu Latenzen innerhalb des Software Stacks kommt.

SDS mit Ceph - Arhcitektur

Abbildung 2

Zusätzlich spielt auch das eingesetzte Netzwerk bei Ceph eine entscheidende Rolle. Es gilt hier zunächst unnötige Hops zu vermeiden, da jeder Hop etwa 200us Latenz mit sich bringt. Ein 10GE Netzwerk gilt hierbei als das absolute Minimum, welches Sie beim Einsatz von Ceph oder einem anderen verteilten Speichersystem verwenden sollten. Das verringert Latenzen und erhöht die Bandbreite. Eine zusätzliche Verbesserung bringt Ihnen selbstverständlich der Einsatz von RDMA, jedoch müssen hier die Kosten beachtet werden. All diese Faktoren spielen eine wichtige Rolle und müssen optimiert werden um Latenzen unter dem 2ms Level zu erhalten und dabei eine Balance zwischen Kosten und Nutzen zu finden, was natürlich nicht immer einfach ist.

 

Anforderungen an eine gute SDS Lösung

Damit Sie nach der Einführung einer SDS Lösung wie Ceph nicht enttäuscht sind, gibt es einige Punkte zu beachten. SSDs oder (Enterprise SSD oder NVME SSD) für die Journale, in denen die Schreibvorgänge gecached werden, sowie ein 10GE Netzwerk sind nach herrschender Meinung innerhalb der Ceph Community und unseren eigenen Erfahrungen ein Muss. Für die OSD’s sollten nach Möglichkeiten SAS3 HDD’s verwendet werden. Es ist auch denkbar bei Bedarf einen Teil der OSD’s rein aus SSDs zu erstellen und gesondert zur Verfügung zu stellen. Wichtig ist zudem keine RAID Arrays zu verwenden. Ceph profitiert stark von vielen unabhängigen Festplatten. Einem schwerwiegenden Datenverlust entgehen Sie zudem indem Sie mehrere Server mit möglichst vielen Festplatten (OSD’s) bereitstellen

Die CPU sollte möglichst viele Prozessor-Kerne haben, und der Arbeitsspeicher mit etwa 1-2 GB pro OSD berechnet werden um hier keinen Flaschenhals zu generieren. Der Einsatz von RDMA muss wohl überlegt sein und kommt auf den speziellen Workload an. Werden extrem niedrige Latenzen und hohe Bandbreite über 10 GE benötigt bietet es sich eventuell eher an auf ein spezielles Storage System wie GPFS, BeeGFS oder Lustre  in Kombination mit Infiniband/Omnipath zu setzen.

Fazit zu Ceph

Zusammenfassend lässt sich sagen, dass Software Defined Storage definitiv eine gute Möglichkeit darstellt, um stetig wachsende Datenbestände einfacher zu verwalten. Jedoch hat Software Defined Storage genau wie jede andere Lösung gewisse Einschränkungen denen man sich bewusst sein muss. Im modernen IT-Betrieb wird man aber nicht auf SDS verzichten können. Die mitgebrachten Vorteile wie Skalierbarkeit, einfache Erweiterung und eine sehr hohe Verfügbarkeit werden zunehmend wichtiger.

Weiterführende Links zum Thema: