FHEM - Hardware > Server - Linux

Projekt 2018: Virtualisierungscluster mit Proxmox und Netzwerk redesign

(1/20) > >>

CoolTux:
Anfang des Jahres kam das Bedürfnis auf, mehr Möglichkeiten zum testen zu haben. Nicht nur privat für FHEM sondern auch beruflich. Daraus entstand die Idee einer Virtualisierungsumgebung. Schnell habe ich bei der Suche gefallen an Proxmox gefunden. Erste Testinstallationen boten vielversprechendes.
Und somit war der Plan geboren meine derzeitige Umgebung samt Netzarchitektur komplett um zu bauen.


Noch mehr Infos zu Proxmox, CEPH und Co (Container?) bekommt Ihr in meinem privaten TuxNet-Wiki



Das Konzept
Ist Stand:

* 1 pi-proxy01 - Banana Pi Router (Servernetz, Usernetze, Smarthomenetz, DMZ)
* 1 pi-fhem01 - Raspberry Pi 2 B+ FHEM Master (Server Netz)
* 1 pi-fhem02 Raspberry Pi 2 B+ FHEM Slave (Server Netz)
* 1 fritzbox - Fritzbox (DMZ)
* 1 Homematic Lan Gateway (Smarthome Netz
* 1 Philips Hue Gateway (Smarthomenetz)
* diverse Haushaltsgeräte im Wlan unterteilt in 7 VLan Sektionen (Fernsehr, Kaffeemaschine, GHome, Tablets, Notebooks) (Usernetze, Smarthomenetz, Multimedianetz)
Soll Stand:

* Proxmox Virtualisierungs Cluster
* Ceph Storage Cluster
Virtualisierung wo es nur geht und Sinn macht. Derzeit angedacht ist

* prod-proxy01 - Router / ipfire Distribution Firewall, Proxy mit Filter / HA Konfiguration
* prod-fhem02 - FHEM Slave / debian9 Distribution
* prod-suma01 - SLES12 SP 3 mit Suse Manager AddOn
* prod-am01 - Access Manager Appliance / HA Konfiguration
* prod-web01 - Webserver
* prod-psql01 - Postgresql Datenbankserver / HA Konfiguration
* test-??? - diverse Testsysteme für FHEM und mehr

Netzwerk design
Das Netzwerk soll insgesamt flacher werden. Damit gehe ich dann auch den Problemen des Multicast routing über Subnetze hinaus aus dem Weg.

* Usernetzwerk - hier kommt alles rein was nicht explizit Serverfunktionalitäten hat. GHome, Mediageräte, Haushaltsgeräte, Tablets, Notebooks und und und
* Servernetzwerk - Hier kommen alle Server mit entsprechenden Diensten rein
* Proxmox Cluster Netzwerk - ist ein Sondernetzwerk nur für die Proxmoxcluster Funktionalität
* Ceph Stotage Clusternetzwerk - Für das angedachte Ceph Storage Cluster
* DMZ Netzwerk - für VPN, extern erreichbare Webdienste


Aufbau der Laborumgebung für den Proxmox Cluster
Da ich nicht ohne weiteres meine derzeitige Konfiguration einreißen kann, muß zu aller erst ein Laboraufbau her.
Dieser Aufbau wird später 1 zu 1 in die Produktive Umgebung übertragen.

* 5x kleine Tischrechner mit vcore i7 8x2.1GHz, 16GB Ram, 250GB SSD
* 1x 8fach managed Switch mit VLAN und Jumboframe Unterstützung

CoolTux:
Proxmox Virtualisierungs Cluster - Installation und Konfiguration

Proxmox Virtualisierungs Cluster - Installation
Ich habe mir über die Proxmox Seite den aktuellen Proxmox VE 5.2 ISO Installer runter geladen und diesen dann mittels

--- Code: ---dd if=proxmox-ve_5.2-1.iso of=/dev/sdb bs=1M

--- Ende Code ---
auf einen USB Stick als USB Image geladen.

Damit wurden dann alle 5 Rechner mit Proxmox installiert. Bei der Festplattenbelegung sollte man ein wenig Gehirnschmalz investieren, da ich ja noch eine maximal möglich Partition für das Ceph benötige. Daher habe ich folgende Möglichkeit gewählt.
In der Festplatten und Partitionsübersicht habe ich zu erst einmal die Größe der zu verwenden Festplatte verkleinert. Hier wird immer die gesamte Kapazität an gezeigt. Diese habe ich folgender Maßen beschränkt:
Für die Node 1 und die Node5 habe ich wegen der ISO Images Ablage
48 GB gesamte Festplattenkapazität gewählt, diese wurde dann unterteilt
swapsize 8GB
maxroot 40GB
minfree 2GB
maxvz 0GB da wir ja Ceph machen wollen

Für die anderen Knoten des Clusters habe ich
18 GB gesamte Festplattenkapazität gewählt, diese wurde dann unterteilt
swapsize 8GB
maxroot 10GB
minfree 1GB
maxvz 0GB da wir ja Ceph machen wollen

Damit habe ich, so hoffe ich, das maximalste an Plattenkapazität für das Ceph rausgeschlagen.
Der Rest der Installation ist selbsterklärend.

Zum Abschluss empfiehlt es sich immer ein Update jeder Node durch zu führen

--- Code: ---apt-get update
apt-get dist-upgrade

--- Ende Code ---



Proxmox Virtualisierungs Cluster - Konfiguration
Leider habe ich in meinen Rechnern immer nur eine Netzwerkkarte. Damit ich dennoch den Datenverkehr etwas trennen kann, habe ich mich entschieden unterschiedliche VLANs zu erstellen.
Ich benötige dem zu Folge 2 VLANs für Proxmoxcluster und Cephcluster. Diese erstelle ich von Hand in der /etc/network/interfaces
Beispielkonfiguration:

--- Code: ---auto lo
iface lo inet loopback
 
iface eno1 inet manual
 
auto vmbr0
iface vmbr0 inet static
        address 192.168.179.6
        netmask 255.255.255.0
        gateway 192.168.179.1
        bridge_ports eno1
        bridge_stp off
        bridge_fd 0
 
 
 
# corosync cluster network
auto eno1.31
iface eno1.31 inet static
        address 192.168.31.5
        netmask 255.255.255.0
 
 
 
# ceph storage cluster network
auto eno1.32
iface eno1.32 inet static
        address 192.168.32.5
        netmask 255.255.255.0

--- Ende Code ---

Nach einem beherzten ifup eno1.31 und ifup eno1.32 stehen mir die Interfaces zur Verfügung und spätestens nach dem zweiten Server kann ich schon mal einen ping zum ersten Server über die IP-Adressen testen.
Wenn das Netzwerk soweit eingerichtet ist, geht es um die Namensauflösung. Damit alle Nodes gleich sind und ich mit unterschiedlichen Namen für die entsprechenden Netze arbeiten kann, habe ich auf jeder Node die /etc/hosts von Hand angepasst.
/etc/hosts

--- Code: ---127.0.0.1 localhost.localdomain localhost
192.168.179.5 n1-pve-cluster.tuxnet.local n1-pve-cluster pvelocalhost
192.168.179.6 n2-pve-cluster.tuxnet.local n2-pve-cluster
192.168.179.7 n3-pve-cluster.tuxnet.local n3-pve-cluster
192.168.179.8 n4-pve-cluster.tuxnet.local n4-pve-cluster
192.168.179.9 n5-pve-cluster.tuxnet.local n5-pve-cluster
 
 
 
# corosync cluster network
192.168.32.5 n1-corosync-cluster.tuxnet.local n1-corosync-cluster
192.168.32.6 n2-corosync-cluster.tuxnet.local n2-corosync-cluster
192.168.32.7 n3-corosync-cluster.tuxnet.local n3-corosync-cluster
192.168.32.8 n4-corosync-cluster.tuxnet.local n4-corosync-cluster
192.168.32.9 n5-corosync-cluster.tuxnet.local n5-corosync-cluster
 
 
 
# ceph storage cluster network
192.168.33.5 n1-ceph-cluster.tuxnet.local n1-ceph-cluster
192.168.33.6 n2-ceph-cluster.tuxnet.local n2-ceph-cluster
192.168.33.7 n3-ceph-cluster.tuxnet.local n3-ceph-cluster
192.168.33.8 n4-ceph-cluster.tuxnet.local n4-ceph-cluster
192.168.33.9 n5-ceph-cluster.tuxnet.local n5-ceph-cluster

--- Ende Code ---
Corosync ist dabei der Cluster für Proxmox.

Zum Abschluss meiner Vorbereitungen empfiehlt es sich einen Zeitsynchronisierungsdienst zu installieren. Debian bietet hier das ntp Packet an

--- Code: ---apt-get install ntp

--- Ende Code ---
Die Konfiguration des ntp Dienstes kann man nach belieben anpassen.

Die Vorbereitungen sind nun abgeschlossen und ich kann mit dem erstellen des Proxmox Clusters beginnen.

Dazu gehen wir auf eine Node, ich nehme immer die erste und erstelle dort den Proxmox Cluster, welcher aber an das entsprechende VLAN gebunden sein soll.

--- Code: ---pvecm create <clustername> -bindnet0_addr <ip-node> -ring0_addr <hostname-coro-cluster>

--- Ende Code ---
Der Clustername darf nicht länger wie 15 Zeichen sein und natürlich keine Sonderzeichen beinhalten. <ip-node> ist die IP Adressen der aktuellen Node auf der ich mich befinde. <hostname-coro-cluster> ist der hostname der Node so wie ich ihn in der /etc/hosts eingetragen habe.
Beispiel:

--- Code: ---pvecm create PVE01-CLUSTER -bindnet0_addr 192.168.32.5 -ring0_addr n1-corosync-cluster

--- Ende Code ---

Im Anschluss starte ich die Clusterdienste einmal durch

--- Code: ---root@n1-pve-cluster:~# systemctl restart corosync.service
root@n1-pve-cluster:~# systemctl restart pve-cluster.service
root@n1-pve-cluster:~# systemctl restart pvedaemon.service
root@n1-pve-cluster:~# systemctl restart pveproxy.service

--- Ende Code ---

Den Status meines Clusters kann ich mir mit

--- Code: ---pvecm status

--- Ende Code ---
ausgeben lassen.

Zum Abschluss muß ich nur noch alle anderen Nodes in den vorhandenen Cluster einbinden

--- Code: ---pvecm add 192.168.32.5 -ring0_addr n2-corosync-cluster

--- Ende Code ---
192.168.32.5 ist die IP eines Clustermembers, da ich erst einen habe beim erstmaligen hinzufügen gebe ich also meinen Master dafür an. -ring0_addr ist der hostname der Node welche ich hinzufügen möchte.

Fertig, das war es auch schon. Nun kann ich mich das erste mal im Web Gui anmelden und mir mein Cluster in aller Schöhnheit anschauen  ;D

CoolTux:
Ceph Storage Cluster - Installation und Konfiguration

Warum?
Da ich schon 5 Rechner wegen des Virtualisierungsclusters zu stehen habe, wollte ich nicht noch eine weitere Box als Storage hinstellen. So langsam mache ich mir dann auch Gedanken um die Stabilität meiner Zwischendecke.
Auf der Suche nach einer Proxmox kompatiblen Lösung (damit ich die VMs mit HA Fähigkeit anlegen kann) stieß ich auf das verteilte Netzwerkstorage System Ceph. Zu meinem Glück unterstützt Proxmox das sogar von Hause aus.


Ceph Storage Cluster - Installation
Für private Anwender ohne Lizens ist derzeit die Version luminous installierbar. Ich installiere somit also auf jeder Node das aktuelle ceph

--- Code: ---pveceph install --version luminous

--- Ende Code ---

Den noch freien Speicherplatz der SSDs auf allen Nodes weise ich einer Partition zu. Als Partitionstype nehme ceph-osd.

--- Code: ---cfdisk /dev/sda

--- Ende Code ---

Danach muss ich jede Node nacheinander neu starten.


Ceph Storage Cluster - Konfiguration

Ceph Partitionenunterstützung nur mit Trick 17
Die folgende Anleitung muß auf jeder Node meines zukünftigen ceph Clusters durchgeführt werden.
Das Ceph von Proxmox unterstützt leider keine Partitionen, hier kann man über das Web Gui lediglich komplette Festplatten angeben. Da ich aber keine weitere Platte anschließen kann und ich nun eine Partition sda4 habe möchte ich diese auch gerne verwenden. Dafür die Vorbereitung mit cfdisk. Weiterhin muß ich nun ein wenig in den Perlcode des Projektes eindringen und kleine Änderungen vornehmen.
Ich editieren die Datei /usr/share/perl5/PVE/API2/Ceph.pm
Ich suche nach der Zeile

--- Code: ---$devname =~ s|/dev/||;

--- Ende Code ---
und kommentiere die und folgende Zeilen aus bis zur Zeile

--- Code: ---my $devpath = $diskinfo->{devpath};

--- Ende Code ---
Diese Zeile Ändere ich um in

--- Code: ---my $devpath = $devname;

--- Ende Code ---

Etwas weiter unten in der selben Datei finde ich noch die Zeile

--- Code: ---my $cmd = ['ceph-disk', 'prepare', '--zap-disk',
...

--- Ende Code ---
Die Ändere ich folgender Maßen

--- Code: ---my $cmd = ['ceph-disk', 'prepare',
...

--- Ende Code ---

Fertig. Ich starte den pvedaemon Dienst neu

--- Code: ---systemctl restart pvedaemon

--- Ende Code ---

Meine Vorbereitungen zum verwenden einer Partition für ceph sind damit abgeschlossen und ich kann mein ceph nun fertig konfigurieren.


Ich initiiere auf einer der Nodes des ceph Cluster für mein Ceph Storage Cluster Netzwerk mit

--- Code: ---pveceph init --network 192.168.32.0/24

--- Ende Code ---

Und erstelle dann auf jeder Node einen Ceph Monitor

--- Code: ---pveceph createmon

--- Ende Code ---

Im Anschluss erstelle ich auf jeder Node einen OSD welcher die Partition /dev/sda4 bekommt und ohne bluestore Support (Also Filestore only) daherkommt. Filestore beötige ich da bei Partitionen bluestore nur maximal 10GB nimmt.

--- Code: ---pveceph createosd /dev/sda4 –bluestore 0

--- Ende Code ---
Damit die ODS's nun auch sichtbar werden und verwendet werden können, muss ich sie noch aktivieren

--- Code: ---cephdisk activate /dev/sda4

--- Ende Code ---


FERTIG!
Das war es auch schon. Nun sehe ich im Web Gui unter jeder Node im Ceph Bereich alle OSD's der Nodes und kann dann unter pool Pool anlegen.

CoolTux:
Was habe ich bis jetzt geschafft? Ich habe mir eine Cluster Virtualisierungslösung samt Storage Cluster aufgebaut. Im Web Gui sieht das ganze dann aus wie unten auf dem Screenshot.
Ich habe also insgesamt zur Verfügung

* 40 CPUs
* 77 GB Hautspeicher
* 1.35 TByte Speicherkapazität
Auf Basis dieser Virtualisierungsumgebung kann ich nun beginnen meine ersten Server auf zu setzen und zu konfigurieren.
Platz sollte für circa 15 Maschinen sein. Ich benötige für 2 Maschinen alleine schon jeweils 2x2 CPUs und 8GB Ram. Dazu jeweils 150GB Storage. Andere Maschinen fallen dafür kleiner aus. FHEM brauch ja nicht soooo viel  ;)

CoolTux:
Eine Firewall muß her - pfsense natürlich im HA Clustermode

Nach dem ich nun erfolgreich meine Virtualisierungslösung am  laufen habe und auch schon zum spielen das ein oder andere System installiert habe, wird es Zeit sich Gedanken um den produktiven Betrieb zu machen.
Aktuell habe ich eine Fritzbox als Verbindung zum Internet. Netzwerktechnisch kann man sagen sie steht in einer DMZ. Dies soll auch so bleiben und so wie jetzt soll danach sofort eine Firewall kommen.
Da ich nun alles virtualisiere habe ich gerade bei der Firewall eine freie Auswahl. Ich habe mich nach einigen Tests zwischen IPFire und pfsense für pfsense in der Community Edition entschieden.
Aktuell gibt es die Version 2.4.3. Die 2.4er Entwicklung befindet sich im Auslauf und wird in absehbarer Zeit von der 2.5er Version abgelöst. Hier gibt es eine große Änderung, wer diese Version einsetzen möchte dessen CPU muß zwingend AES-NI können. Sonst läuft gar nichts.


pfsense - die Installation
pfsense ist in der Community Edition Lizenskostenfrei einsetzbar. Hierfür einfach das entsprechende ISO File runterladen und auf einem Proxmoxstorage zur Verfügung stellen.
Ich habe vor 2 pfsense Server zu installieren, welche dann später im HA Betrieb laufen sollen. Ich lege mir also schon mal 2 virtuelle Maschinen an. p-fw01 und p-fw02. Für die Hardware reichen vorerst kleine Brötchen. Also nehme ich als CPU 1 Socket 2 Cores und ganz wichtig für AES-NI wähle ich als CPU Haswell-noTSX (das ist meine tatsächliche CPU im Proxmox Host). Hauptspeicher 2GB und 15GB an Storage. Für einen reibungslosen HA Betrieb mit Virtuellen IP Adressen empfiehlt Netgate in seinem HA Dokument für KVM+QEMU als Netzwerkkarte die e1000 zu nehmen. Da ich vor habe mein Netzwerk insgesamt etwas flacher zu gestallten lege ich vorerst 5 Netzwerkkarten an.

* DMZ Zone, also die Verbindung zur Fritzbox und somit zum Internet
* Management Netz - VLAN
* Server Netz - VLAN
* User Netz
* Smart Home und Multimedia Netz
Nach dem erstellen der virtuellen Maschinen wird das pfsense ISO in eine eingehängt und gestartet. Die Installation geht schnell von der Hand wenn man sich vorher etwas in den Install Guide eingelesen hat.
Man sollte sich definitiv vorher intensiv Gedanken machen wie genau sein Netz aufgebaut und abgesichert sein soll. Die erste Netzwerkkarte ist das WAN Netz, also die Verbindung in die DMZ (Fritzbox). Die zweite Netzwerkkarte richte ich als LAN ein (interne Verbindung) und zwar als erstes das Management Netzwerk.
Nach der erfolgreichen Installation und dem zuweisen der ersten beiden Netze erfolgt die weiterführende Konfiguration mit Hilfe eines Wizards. Danach kann man sich über die Weboberfläche anmelden.


pfsense - eigene PKI mit RootCA und IntermediateCA
Alle meine Dienste sollen ihre interne Kommunikation verschlüsselt durchführen. Damit dies sauber gewährleistet ist, empfiehlt es sich seine eigene PKI auf zu bauen und somit eine Vertrauenskette über alle erstellten Zertifikate zu haben.
Dazu wird als erstes ein RootCA (Zertifikat) über die Weboberfläche von pfsense erstellt. Danach erstellen wir ein Intermediate RootCA und zeichnen dieses mit Hilfe unseres RootCA gegen. Damit haben wir nun 2 Zertifikate. In Zukunft werden wir alle folgenden Zertifikate mit dem Intermediate RootCA gegenzeichen. Sollte unser Intermediate RootCA einmal kompromittiert sein, können wir alle damit ausgestellten Zertifikate zurück ziehen und das Intermediate RootCA löschen. Wir haben aber dann immer noch unsere RootCA auf der wir neu aufbauen können.
Da rootCa exportieren wir uns und fügen es in all unseren Browsern oder Handys an vertrauliche Zertifizierungsstelle ein. Damit bekommen wir nun immer ein schönes grünes Schloß in unseren Browsern.
Zum administrieren von pfSense wird ein Webinterface verwendet. Dafür legen wir nun als erstes ein Server Zertifikat an.

... Under Construction

Navigation

[0] Themen-Index

[#] Nächste Seite

Zur normalen Ansicht wechseln