Zum Inhalt

Einrichtung

Anmerkung

Als Erinnerung muss der Wechsel auf root auf Debian-Maschinen mit folgendem Befehl erfolgen:

1
su -

Die Anweisungen auf dieser Seite sollten für die Installation aller Knoten im PostgreSQL-Cluster befolgt werden.

Systemeinstellungen

Anschluss an die Maschine

Standardmäßig gibt es zwei Konten auf virtuellen Geräten: ein Benutzerkonto und ein Superbenutzerkonto.

  • Benutzerkonto
    • Einloggen: systancia
    • Passwort: systnci
  • Superbenutzerkonto
    • Einloggen: root
    • Passwort: systnci

Verbinden Sie sich mit der Maschine im Konsolenmodus.

Anmerkung

Das Standard-Tastaturlayout ist QWERTY.

Änderung des Tastaturlayouts

Konfiguration des Netzes

Die virtuelle Vorrichtung erhält möglicherweise keine Netzwerkkonfiguration, wenn sie gestartet wird, aus folgenden Gründen:

  • Der Name der Netzwerkoberfläche ist nicht ens192: Das Gerät ist nur für die Schnittstelle ens192 mit DHCP konfiguriert
  • Kein DHCP-Server verfügbar

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

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

Nach Ausführung des Befehls wird folgende Antwort angezeigt:

1
ens192      UP      10.100.0.51/24

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

Wenn der Name anders ist als ens192 oder der Befehl keine Netzwerkeinstellungen zurückgibt, müssen Sie eine Netzwerkkonfiguration manuell mit den folgenden Befehlen einrichten:

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

Ersetzen:

  • IP_ADDRESS durch die IP-Adresse der Maschine
  • SUBNET durch das Teilnetz
  • DEV_NAME Name der zuvor abgerufenen Netzwerkoberfläche
  • GATEWAY durch das Netzwerk-Gateway
Example

Um den PostgreSQL-Knoten mit folgenden Informationen zu konfigurieren:

  • IP-Adresse: 10.100.0.51
  • Unternetz: /24 oder 255.255.255.0
  • Name der Netzwerk-Schnittstelle: 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

Note

Diese Netzwerkkonfiguration ist vorübergehend, daher wird bei einem Neustart des Servers die manuellen Einstellungen, die mit den Befehlen ip address und ip route vorgenommen wurden, zurückgesetzt.
Die permanente Konfiguration wird durch das PostgreSQL-Cluster-Konfigurationsprogramm durchgeführt.

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

Änderung der Zeitzone

Konfiguration eines NTP-Zeitservers

Danger

Es wird dringend empfohlen, einen Zeitserver so zu konfigurieren, dass die Systemuhr auf dem neuesten Stand ist: Jeder Zeitunterschied zwischen PostgreSQL-Knoten kann zu Instabilität führen oder sogar dazu führen, dass der Cluster nicht mehr funktioniert.

Die erforderlichen Schritte sind auf der NTP-Konfigurationsseite beschrieben (die Konfiguration entspricht der von cyberelements Cleanroom Mediation Controller Servern).

Erstellen einer PKI zur Generierung von PostgreSQL-Knotenzertifikaten

Info

Dieser Abschnitt ist optional, wenn Sie bereits über eine PKI verfügen, aus der Sie die Zertifikate generieren konnten, die in den Voraussetzungen angegeben sind.
Dieser Abschnitt enthält die verschiedenen Schritte zur Erstellung eines PKI und die für den PostgreSQL-Cluster erforderlichen Zertifikate.

Dieser Schritt überspringen

Warning

Das beschriebene Verfahren wurde auf einem Debian 12-Computer mit dem openssl-Paket validiert. Jeder Computer mit einer neueren Version von OpenSSL (die validierte Version ist 3.0.17) kann jedoch das Verfahren durchführen.

Definition von Variablen und Anpassungen

Dieser Abschnitt enthält verschiedene Befehle und Konfigurationsdateien, die Variablen verwenden, die geändert werden können.
Die folgende Tabelle fasst alle Werte zusammen und ermöglicht es Ihnen, sie so zu definieren, dass Sie sie direkt in den auf dieser Seite angezeigten Befehlen ändern können.

Wert Variable Definition
PSQL_IP Virtuelle IP-Adresse des PostgreSQL-Clusters.
PSQL_NAME Kurzer Name (nicht der FQDN), der mit der virtuellen IP-Adresse des PostgreSQL-Clusters verknüpft ist.
PSQL_1_IP IP-Adresse des Knoten #1 des PostgreSQL-Clusters.
PSQL_1_NAME Kurzer Name (nicht die FQDN) des Knoten #1 des PostgreSQL-Clusters.
PSQL_2_IP IP-Adresse des Knoten #2 des PostgreSQL-Clusters.
PSQL_2_NAME Kurzer Name (nicht die FQDN) des Knoten #2 des PostgreSQL-Clusters.
PSQL_3_IP IP-Adresse des Knoten #3 des PostgreSQL-Clusters.
PSQL_3_NAME Kurzer Name (nicht die FQDN) des Knoten #3 des PostgreSQL-Clusters.
CA_ROOT_NAME Name, der Zertifizierungsstelle (Zertifizierungsstelle) des PKI zugewiesen ist.

Planung und Vorbereitung

Die folgenden Aktionen werden in einem neuen Verzeichnis ausgeführt, um alle neuen Dateien in einem einzigen Verzeichnis zu sammeln. Jedes Verzeichnis kann verwendet werden, aber sein Zugriff muss so weit wie möglich eingeschränkt werden. * Melden Sie sich bei PostgreSQL-Knoten n°1* als root 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 Zertifizierungsstelle für die Wurzel

Führen Sie den folgenden Befehl aus, um eine neue Stamm-CA zu erstellen. Sie werden aufgefordert, ein Passwort für den CA zu verwenden:

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 nicht hier angepasst haben.

Erstellung von Zertifikaten

Die Befehle, die zur Generierung von Zertifikaten für PostgreSQL-Knoten erforderlich sind, 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 CA_ROOT_NAME, PSQL_IP, PSQL_NAME, PSQL_1_IP und PSQL_1_NAME wenn Sie noch nicht Ich habe es hier angepasst ..

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 CA_ROOT_NAME, PSQL_IP, PSQL_NAME, PSQL_2_IP und PSQL_2_NAME wenn Sie noch nicht Ich habe es hier angepasst ..

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 CA_ROOT_NAME, PSQL_IP, PSQL_NAME, PSQL_3_IP und PSQL_3_NAME wenn Sie noch nicht Ich habe es hier angepasst ..

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

Das Zertifikat muss noch in P12 umgewandelt werden, was Sie dazu veranlasst, ein Passwort einzulegen:

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 Sie hier (ersetzen Sie bitte die Variablen CA_ROOT_NAME, PSQL_1_NAME, PSQL_2_NAME und PSQL_3_NAME durch die zuvor ausgewählten Elemente):

  • /root/psql-certificates/CA_ROOT_NAME.crt: Zertifikat der Stamm-Zertifizierungsstelle
  • /root/psql-certificates/PSQL_1_NAME.p12: Zertifikat für PostgreSQL-Knoten Nr. 1
  • /root/psql-certificates/PSQL_2_NAME.p12: Zertifikat für PostgreSQL-Knoten Nr. 2
  • /root/psql-certificates/PSQL_3_NAME.p12: Zertifikat für PostgreSQL-Knoten Nr. 3

Ein PostgreSQL-Cluster installieren

Info

Die folgenden Anweisungen müssen auf den 3 PostgreSQL-Knoten ausgeführt werden.

Vorbereitung auf die Konfiguration des PostgreSQL-Clusters

Es ist notwendig, eine SFTP- oder SCP-Verbindung herzustellen, um an das Gerät zu senden:

  • Das Zertifikat der Zertifizierungsbehörde, die Zertifikate für die PostgreSQL-Knoten unterzeichnet hat
  • Das PostgreSQL-Knotenzertifikat im Format P12

Die SFTP- oder SCP-Verbindung kann nicht mit dem root Die Daten können auch einfach in das /home/systancia/.

Es ist notwendig, diese Dateien in ein neues Verzeichnis zu verschieben:

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:

  • PSQL_?_NAME durch den Namen des für den installierten PostgreSQL-Knoten vorgesehenen Zertifikats
  • ROOT_CA_NAME durch den Namen der Zertifizierungsstelle für die Wurzelzertifizierung
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 oben genannten Befehle müssen entsprechend den Anpassungs-Einstellungen 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 oben genannten Befehle müssen entsprechend den Anpassungs-Einstellungen 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 oben genannten Befehle müssen entsprechend den Anpassungs-Einstellungen angepasst worden sein.

Konfiguration des PostgreSQL-Knoten

Um mit der Initialisierung der Knotenkonfiguration zu beginnen, müssen die folgenden Befehle ausgeführt werden:

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

Der zweite Befehl startet ein Dienstprogramm, das folgende Informationen benötigt:

  1. Neue Passwörter für lokale Benutzer root und systancia
  2. Name des PostgreSQL-Knoten (nicht der FQDN)
  3. Die IP-Adresse des PostgreSQL-Knoten, der Name seiner Netzwerk-Schnittstelle, das zu verwendende Standardnetzwerk-Gateway sowie die DNS-Server und das DNS-Suffix
  4. Die Version von PostgreSQL; wir empfehlen die Verwendung der Version 15
  5. Der Zugangsanschluss zum PostgreSQL-Cluster; wir empfehlen den Port 5432
  6. Passwort für das PostgreSQL-Konto, das für die Replikation und für pg_rewind verwendet wird
  7. Name und IP-Adresse eines zweiten PostgreSQL-Knoten
  8. Name und IP-Adresse des letzten PostgreSQL-Knoten
  9. Virtuelle IP-Adresse des PostgreSQL-Clusters
  10. Die IP-Adressen (mit Kommas getrennt) der CyberElemente CleanroomEdge-Gateways oder anderer Maschinen, die eine Verbindung zum Cluster herstellen müssen.
  11. Name und Passwort des PostgreSQL-Benutzerkontos
  12. Die IP-Adressen oder Netzwerke (mit Kommas getrennt), die über SSH mit PostgreSQL-Knoten verbinden dürfen
  13. Zertifikatsinformationen für den PostgreSQL-Knoten (Knotenzertifikat im P12-Format + Root-CA-Zertifikat)

Nach Eingabe dieser Informationen wird Ihnen vor der Validierung eine Zusammenfassung aller Eingaben zur Verfügung gestellt.
Nach der Validierung der angegebenen Informationen erscheint eine Meldung über die Anwendung von Änderungen an der /etc/ssh/sshd_config-Datei. Bitte antworten Sie mit der Standardwahl keep the local version currently installed.

Um die Konfiguration anwenden zu können, ist ein Neustart erforderlich:

1
reboot
Tipp zur Beschleunigung der Installation der PostgreSQL-Knoten n°2 und n°3

Nach der Installation des PostgreSQL-Knoten n°1 können die zur Konfiguration verwendeten Parameter über die Datei /etc/cleanroom-vault.ini aus diesem Knoten abgerufen werden.

Beispiel der /etc/cleanroom-vault.ini Datei

 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

Ändern Sie einfach die hervorgehobenen Zeilen mit den Werten des installierten PostgreSQL-Knoten, basierend auf der Datei, die Sie von PostgreSQL-Knoten n°1 abgerufen haben.

Danger

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

Um die PostgreSQL-Cluster-Management-Befehle mit patronictl verwenden zu können, gibt es noch einige Befehle, die als root auf dem PostgreSQL-Knoten ausgeführt werden müssen:

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