Zum Inhalt

Installation

Hinweis

Zur Erinnerung: Der Wechsel zu root muss auf Debian-Maschinen mit dem folgenden Befehl erfolgen:

1
su -

Die Anweisungen auf dieser Seite sind für die Installation aller Knoten des PostgreSQL-Clusters zu befolgen.

Systemeinstellungen

Verbindung mit der Maschine

Auf den virtuellen Appliances gibt es standardmäßig zwei Konten: ein Benutzerkonto und ein Superuser-Konto.

  • Benutzerkonto
    • Anmeldung: systancia
    • Passwort: systnci
  • Superuser-Konto
    • Anmeldung: root
    • Passwort: systnci

Verbinden Sie sich im Konsolenmodus mit der Maschine.

Hinweis

Die Standard-Tastaturbelegung ist QWERTY.

Änderung der Tastaturbelegung

Sie können die Tastaturbelegung mit der folgenden Befehlszeile ändern:

1
dpkg-reconfigure keyboard-configuration

Es erscheint ein Menü, in dem Sie eine andere Tastaturbelegung auswählen können.

Verwenden Sie anschließend die folgende Befehlszeile, um die Einstellungen anzuwenden und zu speichern:

1
setupcon -k --save

Die Einstellungen werden unmittelbar nach der Ausführung dieses Befehls wirksam.

Konfiguration des Netzwerks

Es ist möglich, dass die virtuelle Appliance beim Start aus den folgenden Gründen keine Netzwerkkonfiguration erhält:

  • Der Name der Netzwerkschnittstelle ist nicht ens192: Die Appliance ist für DHCP konfiguriert nur auf der Schnittstelle ens192
  • Es ist kein DHCP-Server verfügbar

Um den Namen der Netzwerkschnittstelle, ihren Status und die zugewiesenen IP-Adressen zu prüfen, führen Sie den folgenden Befehl als root aus:

1
ip -br a | grep -ve "^lo"
Beispiel

Nach der Ausführung des Befehls wird die folgende Antwort angezeigt:

1
ens192      UP      10.100.0.51/24

Der Name der Netzwerkschnittstelle im Beispiel ist ens192, die Schnittstelle ist aktiv und hat die IP-Adresse 10.100.0.51/24.

Wenn der Name von ens192 abweicht oder der Befehl keine Netzwerkkonfiguration zurückgibt, müssen Sie das Netzwerk mit den folgenden Befehlen manuell konfigurieren:

1
2
ip address add IP_ADDRESS/SUBNET dev DEV_NAME
ip route add default via GATEWAY

Ersetzen Sie:

  • IP_ADDRESS durch die IP-Adresse der Maschine
  • SUBNET durch das Subnetz
  • DEV_NAME Name der zuvor ermittelten Netzwerkschnittstelle
  • GATEWAY durch das Netzwerk-Gateway
Beispiel

Um den PostgreSQL-Knoten mit den folgenden Informationen zu konfigurieren:

  • IP-Adresse: 10.100.0.51
  • Subnetz: /24 oder 255.255.255.0
  • Name der Netzwerkschnittstelle: eth0
  • Netzwerk-Gateway: 10.100.0.254

Die Befehle lauten wie folgt:

1
2
ip address add 10.100.0.51/24 dev eth0
ip route add default via 10.100.0.254

Hinweis

Diese Netzwerkkonfiguration ist temporär; jeder Neustart des Servers setzt daher die mit den Befehlen ip address und ip route vorgenommenen manuellen Einstellungen zurück.
Die dauerhafte Konfiguration wird vom Konfigurationswerkzeug des PostgreSQL-Clusters vorgenommen.

Dank dieser Netzwerkkonfiguration können Sie jedoch nun per SSH auf den PostgreSQL-Knoten zugreifen.

Änderung der Zeitzone

Die virtuelle Appliance ist standardmäßig auf die Zeitzone Europe/Paris eingestellt.

Um diese Zeitzone zu ändern, rufen Sie zunächst mit dem folgenden Befehl die Schreibweise der verfügbaren Zeitzonen ab:

1
timedatectl list-timezones

Verwenden Sie anschließend die folgende Befehlszeile:

1
timedatectl set-timezone your_time_zone
Beispiel

Um die Zeitzone auf London einzustellen, ist der folgende Befehl auszuführen:

1
timedatectl set-timezone Europe/London

Prüfen Sie die Zeitzone des Servers mit der folgenden Befehlszeile:

1
timedatectl

Konfiguration eines NTP-Zeitservers

Gefahr

Es wird dringend empfohlen, einen Zeitserver zu konfigurieren, um die Systemuhr aktuell zu halten: Jede Zeitabweichung zwischen den PostgreSQL-Knoten kann zu Instabilität führen und den Cluster sogar außer Betrieb setzen.

Die erforderlichen Schritte sind auf der Seite zur NTP-Konfiguration beschrieben (die Konfiguration entspricht der der Mediation-Controller-Server von CyberElements Bastion).

Erstellung einer PKI zur Erzeugung der Zertifikate der PostgreSQL-Knoten

Hinweis

Dieser Abschnitt ist optional, wenn Sie bereits über eine PKI verfügen, mit der Sie die in den Voraussetzungen angegebenen Zertifikate erzeugen konnten.
Dieser Abschnitt stellt die verschiedenen Schritte zur Erstellung einer PKI und der für den PostgreSQL-Cluster erforderlichen Zertifikate vor. Beachten Sie, dass nicht angegeben wird, wie sie zu erneuern sind, da die Erneuerung eines Zertifikats seine Neuerstellung bedeutet.

Diesen Schritt überspringen

Achtung!

Das beschriebene Verfahren wurde auf einer Debian-12-Maschine mit dem Paket openssl validiert. Jede Maschine mit einer aktuellen Version von OpenSSL (die validierte Version ist 3.0.17) kann das Verfahren jedoch durchführen. Außer unter Windows oder MacOS, wo die Systembefehle angepasst werden müssen.

Definition der Variablen und Anpassungen

Dieser Abschnitt stellt verschiedene Befehle und Konfigurationsdateien bereit, die Variablen verwenden, die geändert werden können.
Die nachstehende Tabelle fasst alle Werte zusammen und ermöglicht es, sie zu definieren, um sie direkt in den auf dieser Seite angezeigten Befehlen zu ändern.

Wert Variable Definition
PSQL_IP Virtuelle IP-Adresse des PostgreSQL-Clusters.
PSQL_NAME Kurzname (nicht der FQDN), der der virtuellen IP-Adresse des PostgreSQL-Clusters zugeordnet ist.
PSQL_1_IP IP-Adresse des Knotens Nr. 1 des PostgreSQL-Clusters.
PSQL_1_NAME Kurzname (nicht der FQDN) des Knotens Nr. 1 des PostgreSQL-Clusters.
PSQL_2_IP IP-Adresse des Knotens Nr. 2 des PostgreSQL-Clusters.
PSQL_2_NAME Kurzname (nicht der FQDN) des Knotens Nr. 2 des PostgreSQL-Clusters.
PSQL_3_IP IP-Adresse des Knotens Nr. 3 des PostgreSQL-Clusters.
PSQL_3_NAME Kurzname (nicht der FQDN) des Knotens Nr. 3 des PostgreSQL-Clusters.
CA_ROOT_NAME Name, der der Wurzelzertifizierungsstelle (CA) der PKI zugewiesen wird.

Vorbereitung

Die folgenden Aktionen werden in einem neuen Verzeichnis ausgeführt, um alle neuen Dateien in einem einzigen Verzeichnis zusammenzufassen. Es kann ein beliebiges Verzeichnis verwendet werden, sein Zugriff muss jedoch so weit wie möglich eingeschränkt sein. Melden Sie sich als root am PostgreSQL-Knoten Nr. 1 an und führen Sie die folgenden Befehle aus:

1
2
3
mkdir /root/psql-certificates/
chmod 600 /root/psql-certificates/
cd /root/psql-certificates/

Erstellung der Wurzelzertifizierungsstelle

Führen Sie den folgenden Befehl aus, um eine neue Wurzel-CA zu erstellen. Sie werden zur Eingabe eines Kennworts zum Schutz der CA aufgefordert:

1
openssl req -x509 -newkey rsa:4096 -days 3650 -sha512 -keyout CA_ROOT_NAME.key -out CA_ROOT_NAME.crt -subj "/CN=CA_ROOT_NAME" -extensions v3_ca -addext "subjectKeyIdentifier=hash" -addext "authorityKeyIdentifier=keyid:always,issuer:always" -addext "basicConstraints=critical,CA:true" -addext "keyUsage=critical,digitalSignature,cRLSign,keyCertSign"

Ersetzen Sie CA_ROOT_NAME durch den Namen der Wurzel-CA, wenn Sie ihn nicht hier angepasst haben.

Erstellung der Zertifikate

Die Befehle zur Erzeugung der Zertifikate der PostgreSQL-Knoten lauten wie folgt:

1
2
3
openssl genrsa -out PSQL_1_NAME.key 4096
openssl req -new -key PSQL_1_NAME.key -out PSQL_1_NAME.csr -subj "/CN=PSQL_1_NAME"
openssl x509 -req -in PSQL_1_NAME.csr -CA CA_ROOT_NAME.crt -CAkey CA_ROOT_NAME.key -CAcreateserial -out PSQL_1_NAME.crt -days 1825 -sha512 -extfile <(printf "subjectKeyIdentifier=hash\nauthorityKeyIdentifier=keyid,issuer\nbasicConstraints=critical,CA:FALSE\nkeyUsage=critical,digitalSignature\nextendedKeyUsage=serverAuth,clientAuth\nsubjectAltName=DNS:PSQL_NAME,DNS:PSQL_1_NAME,IP:PSQL_IP,IP:PSQL_1_IP")

Ersetzen Sie CA_ROOT_NAME, PSQL_IP, PSQL_NAME, PSQL_1_IP und PSQL_1_NAME, wenn Sie sie nicht hier angepasst haben.

1
2
3
openssl genrsa -out PSQL_2_NAME.key 4096
openssl req -new -key PSQL_2_NAME.key -out PSQL_2_NAME.csr -subj "/CN=PSQL_2_NAME"
openssl x509 -req -in PSQL_2_NAME.csr -CA CA_ROOT_NAME.crt -CAkey CA_ROOT_NAME.key -CAcreateserial -out PSQL_2_NAME.crt -days 1825 -sha512 -extfile <(printf "subjectKeyIdentifier=hash\nauthorityKeyIdentifier=keyid,issuer\nbasicConstraints=critical,CA:FALSE\nkeyUsage=critical,digitalSignature\nextendedKeyUsage=serverAuth,clientAuth\nsubjectAltName=DNS:PSQL_NAME,DNS:PSQL_2_NAME,IP:PSQL_IP,IP:PSQL_2_IP")

Ersetzen Sie CA_ROOT_NAME, PSQL_IP, PSQL_NAME, PSQL_2_IP und PSQL_2_NAME, wenn Sie sie nicht hier angepasst haben.

1
2
3
openssl genrsa -out PSQL_3_NAME.key 4096
openssl req -new -key PSQL_3_NAME.key -out PSQL_3_NAME.csr -subj "/CN=PSQL_3_NAME"
openssl x509 -req -in PSQL_3_NAME.csr -CA CA_ROOT_NAME.crt -CAkey CA_ROOT_NAME.key -CAcreateserial -out PSQL_3_NAME.crt -days 1825 -sha512 -extfile <(printf "subjectKeyIdentifier=hash\nauthorityKeyIdentifier=keyid,issuer\nbasicConstraints=critical,CA:FALSE\nkeyUsage=critical,digitalSignature\nextendedKeyUsage=serverAuth,clientAuth\nsubjectAltName=DNS:PSQL_NAME,DNS:PSQL_3_NAME,IP:PSQL_IP,IP:PSQL_3_IP")

Ersetzen Sie CA_ROOT_NAME, PSQL_IP, PSQL_NAME, PSQL_3_IP und PSQL_3_NAME, wenn Sie sie nicht hier angepasst haben.

Der erste Befehl erstellt einen neuen Schlüssel, der zweite erzeugt eine Datei mit der Zertifikatsignieranforderung CSR und der dritte erstellt das Zertifikat selbst.

Es bleibt nur noch, das Zertifikat in P12 zu konvertieren, wozu Sie ein Kennwort festlegen müssen:

1
openssl pkcs12 -chain -CAfile CA_ROOT_NAME.crt -export -inkey PSQL_1_NAME.key -in PSQL_1_NAME.crt -out PSQL_1_NAME.p12
1
openssl pkcs12 -chain -CAfile CA_ROOT_NAME.crt -export -inkey PSQL_2_NAME.key -in PSQL_2_NAME.crt -out PSQL_2_NAME.p12
1
openssl pkcs12 -chain -CAfile CA_ROOT_NAME.crt -export -inkey PSQL_3_NAME.key -in PSQL_3_NAME.crt -out PSQL_3_NAME.p12

Die für die Installation des PostgreSQL-Clusters erforderlichen Dateien finden sich hier (ersetzen Sie die Variablen CA_ROOT_NAME, PSQL_1_NAME, PSQL_2_NAME und PSQL_3_NAME durch die zuvor gewählten Werte):

  • /root/psql-certificates/CA_ROOT_NAME.crt: Zertifikat der Wurzel-CA
  • /root/psql-certificates/PSQL_1_NAME.p12: Zertifikat des PostgreSQL-Knotens Nr. 1
  • /root/psql-certificates/PSQL_2_NAME.p12: Zertifikat des PostgreSQL-Knotens Nr. 2
  • /root/psql-certificates/PSQL_3_NAME.p12: Zertifikat des PostgreSQL-Knotens Nr. 3

Installation eines PostgreSQL-Clusters

Hinweis

Die folgenden Schritte müssen auf allen drei PostgreSQL-Knoten ausgeführt werden.

Vorbereitung der Konfiguration des PostgreSQL-Clusters

Es muss eine SFTP- oder SCP-Verbindung aufgebaut werden, um an die Appliance zu senden:

  • Das Zertifikat der Zertifizierungsstelle, die die Zertifikate der PostgreSQL-Knoten signiert hat
  • Das Zertifikat des PostgreSQL-Knotens im Format P12

Beachten Sie, dass SFTP- oder SCP-Verbindungen nicht mit dem Konto root aufgebaut werden können. Außerdem können die Dateien einfach in /home/systancia/ abgelegt werden.

Diese Dateien müssen in ein neues Verzeichnis verschoben werden:

1
2
3
mkdir /etc/ssl/certs/cleanroom/
mv /home/systancia/PSQL_?_NAME.p12 /etc/ssl/certs/cleanroom/
mv /home/systancia/ROOT_CA_NAME.crt /etc/ssl/certs/cleanroom/

Ersetzen Sie:

  • PSQL_?_NAME durch den Namen des Zertifikats, das für den gerade installierten PostgreSQL-Knoten vorgesehen ist
  • ROOT_CA_NAME durch den Namen des Zertifikats der Wurzelzertifizierungsstelle
1
2
3
mkdir /etc/ssl/certs/cleanroom/
cp /root/psql-certificates/PSQL_1_NAME.p12 /etc/ssl/certs/cleanroom/
cp /root/psql-certificates/CA_ROOT_NAME.crt /etc/ssl/certs/cleanroom/

Die obigen Befehle müssen gemäß den Anpassungsparametern angepasst worden sein.

1
2
3
mkdir /etc/ssl/certs/cleanroom/
mv /home/systancia/PSQL_2_NAME.p12 /etc/ssl/certs/cleanroom/
mv /home/systancia/CA_ROOT_NAME.crt /etc/ssl/certs/cleanroom/

Die obigen Befehle müssen gemäß den Anpassungsparametern angepasst worden sein.

1
2
3
mkdir /etc/ssl/certs/cleanroom/
mv /home/systancia/PSQL_3_NAME.p12 /etc/ssl/certs/cleanroom/
mv /home/systancia/CA_ROOT_NAME.crt /etc/ssl/certs/cleanroom/

Die obigen Befehle müssen gemäß den Anpassungsparametern angepasst worden sein.

Konfiguration des PostgreSQL-Knotens

Um die Initialisierung der Konfiguration des Knotens zu starten, müssen die folgenden Befehle ausgeführt werden:

1
2
cd /etc/ssl/certs/cleanroom/
ConfigureSystanciaVault.py

Der zweite Befehl startet ein Werkzeug, das die folgenden Informationen verlangt:

  1. Die neuen Kennwörter der lokalen Benutzer root und systancia
  2. Den Namen des PostgreSQL-Knotens (nicht den FQDN)
  3. Die IP-Adresse des PostgreSQL-Knotens, den Namen seiner Netzwerkschnittstelle, das zu verwendende Standard-Gateway des Netzwerks sowie die DNS-Server und das DNS-Suffix
  4. Die Version von PostgreSQL; wir empfehlen die Version 15
  5. Den Zugriffsport auf den PostgreSQL-Cluster; wir empfehlen den Port 5432
  6. Das Kennwort des PostgreSQL-Kontos, das für die Replikation und für pg_rewind verwendet wird
  7. Den Namen und die IP-Adresse eines zweiten PostgreSQL-Knotens
  8. Den Namen und die IP-Adresse des letzten PostgreSQL-Knotens
  9. Die virtuelle IP-Adresse des PostgreSQL-Clusters
  10. Die IP-Adressen (durch Kommas getrennt) der Edge Gateways von CyberElements Bastion oder aller anderen Maschinen, die sich mit dem Cluster verbinden müssen
  11. Den Namen und das Kennwort des PostgreSQL-Benutzerkontos
  12. Die IP-Adressen oder Netzwerke (durch Kommas getrennt), die zur Verbindung per SSH mit den PostgreSQL-Knoten berechtigt sind
  13. Die Zertifikatsinformationen des PostgreSQL-Knotens (Zertifikat des Knotens im P12-Format + Zertifikat der Wurzel-CA)

Nach der Eingabe dieser Informationen wird vor der Bestätigung eine Zusammenfassung aller Ihrer Angaben angezeigt.
Nach der Bestätigung der angegebenen Informationen erscheint eine Meldung zu den Änderungen an der Datei /etc/ssh/sshd_config. Wählen Sie die Standardoption keep the local version currently installed.

Um die Konfiguration anzuwenden, ist ein Neustart erforderlich:

1
reboot
Tipp zur Beschleunigung der Installation der PostgreSQL-Knoten Nr. 2 und Nr. 3

Nach der Installation des PostgreSQL-Knotens Nr. 1 können Sie die für seine Installation verwendeten Konfigurationsparameter in der Datei /etc/cleanroom-vault.ini abrufen.

Beispiel der Datei /etc/cleanroom-vault.ini

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
[local]
name = PSQL-1
ip = 172.16.10.51

[cluster]
server1 = PSQL-2,172.16.10.52
server2 = PSQL-3,172.16.10.53

[ssl]
ca = MY-ROOT-CA.crt
client_cert = /etc/cleanroomvault.crt
client_key = /etc/cleanroomvault.key
peer_cert = /etc/cleanroomvault.crt
peer_key = /etc/cleanroomvault.key

[postgresql]
port = 5432
cluster = cleanroomvault5
version = 15

[patroni]
api_port = 8008
replication_password = R3pl1cationP@SSw0rd
rewind_password = Rew1ndP@SSw0rd

[vip]
interface = ens192
ip = 172.16.10.50

[cleanroom]
gw_ips = 172.16.10.10, 172.16.10.11
db_user = DbUser
db_password = DbP@SSw0rd

[networking]
interface = ens192
ip = 172.16.10.51/24
gateway = 172.16.10.254
dns = 172.16.10.100
dnssuffix = domain.local

[ssh]
allow = 10.0.20.0/24

Es genügt, die hervorgehobenen Zeilen mit den Werten des gerade installierten PostgreSQL-Knotens zu ändern, ausgehend von der Datei, die Sie vom PostgreSQL-Knoten Nr. 1 abgerufen haben.

Gefahr

Wenn Sie die Beispieldatei wiederverwenden, müssen Sie alle folgenden hervorgehobenen Werte entsprechend Ihrer Umgebung ändern:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
[local]
name = PSQL-1
ip = 172.16.10.51

[cluster]
server1 = PSQL-2,172.16.10.52
server2 = PSQL-3,172.16.10.53

[ssl]
ca = MY-ROOT-CA.crt
client_cert = /etc/cleanroomvault.crt
client_key = /etc/cleanroomvault.key
peer_cert = /etc/cleanroomvault.crt
peer_key = /etc/cleanroomvault.key

[postgresql]
port = 5432
cluster = cleanroomvault5
version = 15

[patroni]
api_port = 8008
replication_password = R3pl1cationP@SSw0rd
rewind_password = Rew1ndP@SSw0rd

[vip]
interface = ens192
ip = 172.16.10.50

[cleanroom]
gw_ips = 172.16.10.10, 172.16.10.11
db_user = DbUser
db_password = DbP@SSw0rd

[networking]
interface = ens192
ip = 172.16.10.51/24
gateway = 172.16.10.254
dns = 172.16.10.100
dnssuffix = domain.local

[ssh]
allow = 10.0.20.0/24

Zusätzliche Konfigurationen für patronictl

Damit die Befehle zur Verwaltung des PostgreSQL-Clusters mit patronictl verwendet werden können, müssen auf dem PostgreSQL-Knoten noch einige Befehle als root ausgeführt werden:

1
2
3
4
sed -i "s/2380/2380, 8008/g" /etc/nftables.conf
systemctl reload nftables
cp /etc/patroni/ca.crt /usr/local/share/ca-certificates/PSQL-CA.crt
update-ca-certificates

Zusätzliche Konfigurationen für etcd

Um die automatische Kompaktierung und Defragmentierung der etcd-Datenbank zu aktivieren, führen Sie die folgenden Befehle als root auf dem PostgreSQL-Knoten aus:

1
2
3
4
5
6
7
apt update
apt install etcd-client
echo -e 'ETCD_AUTO_COMPACTION_MODE="periodic"\nETCD_AUTO_COMPACTION_RETENTION="1"' >> /etc/default/etcd
systemctl restart etcd
echo -e '#!/bin/bash\n\nsource /etc/default/etcd\netcdctl --endpoints=${ETCD_ADVERTISE_CLIENT_URLS}  --cert=${ETCD_CERT_FILE} --key=${ETCD_KEY_FILE} "$@"' > /usr/bin/clr_etcdctl
chmod a+x /usr/bin/clr_etcdctl
echo '0 3 * * * root clr_etcdctl defrag' > /etc/cron.d/systancia-db

Erstellung der für die Installation von CyberElements Bastion erforderlichen Datenbank default

Bei der Installation von CyberElements Bastion müssen Sie zunächst eine Datenbank mit dem Namen default erstellen.
Füllen Sie dazu die folgende Tabelle aus, um den Befehl anzupassen, den Sie von einem beliebigen Knoten des PostgreSQL-Clusters aus ausführen müssen:

Wert Variable Definition
PSQL_VIP Virtuelle IP-Adresse des PostgreSQL-Clusters.
DB_USER Der Benutzername der Datenbank, der bei der Konfiguration des PostgreSQL-Knotens angegeben wurde

Befehl, der von einem beliebigen Knoten des PostgreSQL-Clusters aus auszuführen ist:

1
createdb -h PSQL_VIP -U DB_USER default