Proxmox Cluster Test Setup mit 3 Nodes

Spielt man mit dem Gedanken sich einen Cluster aufzusetzen oder sein System mit einer zweiten Node zu erweitern,
sollte man das tunlichst nicht am produktiven System ausprobieren! Es sei denn man weiss genau was man macht.

Um mal mit einen Proxmox Cluster etwas rumzuspielen und auszuprobieren, werde ich mir 3 Nodes einfach auf einem
Proxmox Testserver virtualisieren. Dazu nutze ich einen Intel NUC D54250WYKH mit 16GB RAM und einer kleinen SSD.

31.01.2021 - Anleitung erweitert (Node aus Cluster entfernen, Cluster löschen)

Vorbereitungen

Auf dem Intel NUC Proxmox VE installieren.
Die Proxmox No-Subscription Repository in der /etc/apt/sources.list aktivieren.

deb http://ftp.debian.org/debian buster main contrib
deb http://ftp.debian.org/debian buster-updates main contrib

# PVE pve-no-subscription repository provided by proxmox.com, NOT recommended for production use
deb http://download.proxmox.com/debian/pve buster pve-no-subscription

# security updates
deb http://security.debian.org buster/updates main contrib

Die Proxmox Enterprise Subscription in der /etc/apt/sources.list.d/pve-enterprise.list deaktivieren.

#deb https://enterprise.proxmox.com/debian stretch pve-enterprise

System updaten.

$ apt-get update
$ apt-get dist-upgrade

Jetzt muss noch die Nested Virtualization aktiviert werden damit Proxmox selber auch in einer virtuellen Maschine laufen kann.
Für die Intel CPU wird die Datei /etc/modprobe.d/kvm-intel.conf mit folgendem Inhalt erstellt.

options kvm ignore_msrs=y
options kvm-intel nested=Y ept=Y

Den Proxmox Server neu starten und prüfen ob Nested Virtualization aktiviert ist.

root@pmx02:~# cat /sys/module/kvm_intel/parameters/nested
Y

Cluster Nodes installieren

Jeder Node mit 2 Cores, 4GB RAM (könnte auch auf 3GB verringert werden) und 20GB Harddisk.

  • pmx-node01 (192.168.50.221)
  • pmx-node02 (192.168.50.222)
  • pmx-node03 (192.168.50.223)

Den ersten Proxmox Node wieder installieren, die Repositories wie oben beschrieben anpassen und das System updaten.
Damit alle Nodes später untereinander über den Hostnamen erreichbar sind, müssen in die /etc/hosts diese Einträge.

192.168.50.221 pmx-node01.bachmann.lan pmx-node01
192.168.50.222 pmx-node02.bachmann.lan pmx-node02
192.168.50.223 pmx-node03.bachmann.lan pmx-node03

Der erste Node (pmx-node01) ist fertig eingerichtet und wird jetzt heruntergefahren.
Die VM wird jetzt zweimal geclont. (pmx-node02 und pmx-node03)

Den pmx-node02 starten. Hier sind jetzt noch ein paar Anpassungen vorzunehmen.

# hostname ändern
/etc/hostname

# IP Adresse ändern
/etc/network/interfaces

*** Node rebooten ***

# pmx-node01 Verzeichnisse löschen
rm -r /etc/pve/nodes/pmx-node01
rm -r /var/lib/rrdcached/db/pve2-node/pmx-node01
rm -r /var/lib/rrdcached/db/pve2-storage/pmx-node01

# SSH Host keys neu erstellen
rm /etc/pve/priv/known_hosts
rm /etc/ssh/ssh_host_*
dpkg-reconfigure openssh-server

# Die Zertifikate des Nodes neu erstellen
pvecm updatecerts

Den pmx-node02 jetzt herunterfahren.
Den pmx-node03 starten und auch, wie beim pmx-node02, die Anpassungen durchführen und herunterfahren.

Damit in den virtuellen Nodes auch virtuelle Maschinen laufen können, muss der CPU Typ der einzelnen Nodes auf host umgestellt werden.
Dadurch werden alle flags der Host CPU, einschließlich der Nested Virtualization, an die Node VMs durchgereicht.

Alle 3 Nodes sind fertig eingerichtet und von jeder VM wird jetzt noch ein Backup und Snapshot erstellt.

Cluster erstellen

Alle 3 Nodes starten und auf dem pmx-node01 den Cluster erstellen.

Auf dem pmx-node02 und pmx-node03 wird jetzt dem Cluster beigetreten. (Passwort ist das vom pmx-node01)

Der Proxmox Cluster mit den 3 Nodes ist eingerichtet.

Storage

Als zentralen Storage binde ich noch einen NFS Share von meiner Synology ein.

Node aus Cluster entfernen

Sicherstellen das keine lokalen Daten, Backups und virtuelle Maschinen mehr auf dem Node sind. Ggf. vorher migrieren.
Auf einem aktiven Node die korrekte ID und Name herausfinden. (pmx-node02 soll entfernt werden)

root@pmx-node01:~# pvecm nodes
Membership information
----------------------
    Nodeid      Votes Name
         1          1 pmx-node01 (local)
         2          1 pmx-node02
         3          1 pmx-node03

Den zu entfernenden Node herunterfahren. Erst jetzt kann und darf er aus dem Cluster entfernt werden.

root@pmx-node01:~# pvecm delnode pmx-node02
Killing node pmx-node02

Er erscheint aber immer noch im Webinterface. Jeder Node hat sein eigenes Verzeichnis unter /etc/pve/nodes/NODE-NAME.
Erst nachdem es gelöscht wurde (ggf. vorher sichern), verschwindet er auch aus dem Webinterface.

root@pmx-node01:~# rm -r /etc/pve/nodes/pmx-node02

Der Node wird dauerhaft entfernt, daher:

  • Niemals den entfernten Node nochmal starten!
  • Die IP Adresse des entfernten Nodes keinem neuen Node zuweisen.
  • Den Hostnamen des entfernten Nodes keinem neuen Node zuweisen.

Cluster löschen

Dazu hab ich auf https://gist.github.com/ianchen06/73acc392c72d6680099b7efac1351f56 ein script gefunden. Erledigt die nötigen Schritte in einem Rutsch.
Das Skript muss auf jedem Node im Cluster ausgeführt werden.

#!/bin/bash

### Services stoppen
echo -e "stopping Services:\npvestatd"
systemctl stop pvestatd.service
echo "pvedaemon"
systemctl stop pvedaemon.service
echo "pve-cluster.service"
systemctl stop pve-cluster.service
echo "pve-corosync"
systemctl stop corosync
echo "pve-cluster"
systemctl stop pve-cluster

### SQLite Datenbank bereinigen
echo "deleting data from db..."
#echo "select * from tree where name = 'corosync.conf';"| sqlite3 /var/lib/pve-cluster/config.db
echo "delete from tree where name = 'corosync.conf';"| sqlite3 /var/lib/pve-cluster/config.db
echo "select * from tree where name = 'corosync.conf';"| sqlite3 /var/lib/pve-cluster/config.db

### Verzeichnisse löschen
echo "remove directories..."
pmxcfs -l
rm -f /var/lib/pve-cluster/.pmxcfs.lockfile
rm -f /etc/pve/corosync.conf
rm -rf /etc/corosync/*
rm -f /var/lib/corosync/*

### backup VMs
echo "backup VM configuration..."
cp -r /etc/pve/nodes/`hostname`/lxc /tmp
cp -r /etc/pve/nodes/`hostname`/qemu-server /tmp

# delete all nodes and VMs
rm -r /etc/pve/nodes/*

# restore VMs
echo "restore VM configuration..."
mkdir /etc/pve/nodes/`hostname`
cp -r /tmp/lxc /etc/pve/nodes/`hostname`
cp -r /tmp/qemu-server /etc/pve/nodes/`hostname`

### Services wieder starten
echo "Staring services ..."
echo "pvestatd"
systemctl start pvestatd.service
echo "pvedaemon"
systemctl start pvedaemon.service
echo "pve-cluster.service"
systemctl start pve-cluster.service
echo "pve-corosync"
systemctl start corosync
echo "pve-cluster"
systemctl restart pve-cluster

Alle 3 Hosts laufen wieder für sich alleine, das Cluster ist aufgelöst.

Testen

Ich möchte nochmal ausdrücklich darauf hinweisen das nur in einer Testumgebung auszuprobieren!
Don't mess around in productive environments!

Schreibe einen Kommentar