Ga naar inhoud

Installatie

Opmerking

Ter herinnering: het overschakelen naar root moet op Debian-machines met de volgende opdracht gebeuren:

1
su -

De instructies op deze pagina moeten worden gevolgd voor de installatie van alle nodes van het PostgreSQL-cluster.

Systeeminstellingen

Verbinding met de machine

Op de virtuele appliances bestaan er standaard twee accounts: een gebruikersaccount en een superuseraccount.

  • Gebruikersaccount
    • Login: systancia
    • Wachtwoord: systnci
  • Superuseraccount
    • Login: root
    • Wachtwoord: systnci

Maak in consolemodus verbinding met de machine.

Opmerking

De standaardtoetsenbordindeling is QWERTY.

De toetsenbordindeling wijzigen

U kunt de toetsenbordindeling wijzigen met de volgende opdrachtregel:

1
dpkg-reconfigure keyboard-configuration

Er verschijnt een menu waarin u een andere toetsenbordindeling kunt kiezen.

Gebruik vervolgens de volgende opdrachtregel om de instellingen toe te passen en op te slaan:

1
setupcon -k --save

De instellingen worden onmiddellijk na het uitvoeren van deze opdracht van kracht.

Configuratie van het netwerk

Het is mogelijk dat de virtuele appliance bij het opstarten geen netwerkconfiguratie ontvangt, om de volgende redenen:

  • De naam van de netwerkinterface is niet ens192: de appliance is voor DHCP geconfigureerd alleen op de interface ens192
  • Er is geen DHCP-server beschikbaar

Voer de volgende opdracht uit als root om de naam van de netwerkinterface, de status ervan en de toegewezen IP-adressen te controleren:

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

Na het uitvoeren van de opdracht wordt het volgende antwoord weergegeven:

1
ens192      UP      10.100.0.51/24

De naam van de netwerkinterface in het voorbeeld is ens192, de interface is actief en heeft het IP-adres 10.100.0.51/24.

Als de naam afwijkt van ens192 of als de opdracht geen enkele netwerkinstelling teruggeeft, moet u het netwerk handmatig configureren met de volgende opdrachten:

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

Vervang:

  • IP_ADDRESS door het IP-adres van de machine
  • SUBNET door het subnet
  • DEV_NAME naam van de eerder opgevraagde netwerkinterface
  • GATEWAY door de gateway van het netwerk
Voorbeeld

Om de PostgreSQL-node met de volgende informatie te configureren:

  • IP-adres: 10.100.0.51
  • Subnet: /24 of 255.255.255.0
  • Naam van de netwerkinterface: eth0
  • Gateway van het netwerk: 10.100.0.254

De opdrachten zijn de volgende:

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

Opmerking

Deze netwerkconfiguratie is tijdelijk; elke herstart van de server zet daarom de handmatige instellingen terug die met de opdrachten ip address en ip route zijn uitgevoerd.
De permanente configuratie wordt uitgevoerd door het configuratiehulpprogramma van het PostgreSQL-cluster.

Dankzij deze netwerkconfiguratie hebt u nu echter via SSH toegang tot de PostgreSQL-node.

De tijdzone wijzigen

De virtuele appliance is standaard ingesteld op de tijdzone Europe/Paris.

Haal, om deze tijdzone te wijzigen, eerst met de volgende opdracht de schrijfwijze van de beschikbare tijdzones op:

1
timedatectl list-timezones

Gebruik vervolgens de volgende opdrachtregel:

1
timedatectl set-timezone your_time_zone
Voorbeeld

Om de tijdzone op Londen in te stellen, moet de volgende opdracht worden uitgevoerd:

1
timedatectl set-timezone Europe/London

Controleer de tijdzone van de server met de volgende opdrachtregel:

1
timedatectl

Een NTP-tijdserver configureren

Gevaar

Het wordt sterk aanbevolen een tijdserver te configureren om de systeemklok actueel te houden: elk tijdsverschil tussen de PostgreSQL-nodes kan instabiliteit veroorzaken en het cluster zelfs buiten werking stellen.

De benodigde stappen worden beschreven op de pagina over de NTP-configuratie (de configuratie is gelijkwaardig aan die van de Mediation Controller-servers van CyberElements Bastion).

Een PKI aanmaken om de certificaten van de PostgreSQL-nodes te genereren

Informatie

Deze sectie is optioneel als u al een PKI hebt waarmee u de certificaten die in de voorwaarden zijn vermeld hebt kunnen genereren.
Deze sectie presenteert de verschillende stappen voor het aanmaken van een PKI en van de certificaten die nodig zijn voor het PostgreSQL-cluster. Merk op dat niet wordt aangegeven hoe u ze vernieuwt, aangezien het vernieuwen van een certificaat betekent dat het opnieuw wordt aangemaakt.

Deze stap overslaan

Waarschuwing!

De beschreven procedure is gevalideerd op een Debian 12-machine met het pakket openssl. Elke machine met een recente versie van OpenSSL (de gevalideerde versie is 3.0.17) kan de procedure echter uitvoeren. Behalve onder Windows of MacOS, waar de systeemopdrachten moeten worden aangepast.

Definitie van de variabelen en aanpassingen

Deze sectie biedt verschillende opdrachten en configuratiebestanden die variabelen gebruiken die kunnen worden gewijzigd.
De onderstaande tabel vat alle waarden samen en maakt het mogelijk ze te definiëren, zodat u ze direct kunt wijzigen in de opdrachten die op deze pagina worden weergegeven.

Waarde Variabele Definitie
PSQL_IP Virtueel IP-adres van het PostgreSQL-cluster.
PSQL_NAME Korte naam (niet de FQDN) die is gekoppeld aan het virtuele IP-adres van het PostgreSQL-cluster.
PSQL_1_IP IP-adres van node nr. 1 van het PostgreSQL-cluster.
PSQL_1_NAME Korte naam (niet de FQDN) van node nr. 1 van het PostgreSQL-cluster.
PSQL_2_IP IP-adres van node nr. 2 van het PostgreSQL-cluster.
PSQL_2_NAME Korte naam (niet de FQDN) van node nr. 2 van het PostgreSQL-cluster.
PSQL_3_IP IP-adres van node nr. 3 van het PostgreSQL-cluster.
PSQL_3_NAME Korte naam (niet de FQDN) van node nr. 3 van het PostgreSQL-cluster.
CA_ROOT_NAME Naam die wordt toegekend aan de root-certificeringsinstantie (CA) van de PKI.

Voorbereiding

De volgende acties worden uitgevoerd in een nieuwe map, om alle nieuwe bestanden in één map samen te brengen. Elke map kan worden gebruikt, maar de toegang ertoe moet zo veel mogelijk worden beperkt. Meld u als root aan op PostgreSQL-node nr. 1 en voer de volgende opdrachten uit:

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

De root-certificeringsinstantie aanmaken

Voer de volgende opdracht uit om een nieuwe root-CA aan te maken. U wordt gevraagd om een wachtwoord om de CA te beschermen:

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"

Vervang CA_ROOT_NAME door de naam van de root-CA als u deze niet hier hebt aangepast.

De certificaten aanmaken

De opdrachten die nodig zijn om de certificaten van de PostgreSQL-nodes te genereren, zijn de volgende:

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")

Vervang CA_ROOT_NAME, PSQL_IP, PSQL_NAME, PSQL_1_IP en PSQL_1_NAME als u deze niet hier hebt aangepast.

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")

Vervang CA_ROOT_NAME, PSQL_IP, PSQL_NAME, PSQL_2_IP en PSQL_2_NAME als u deze niet hier hebt aangepast.

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")

Vervang CA_ROOT_NAME, PSQL_IP, PSQL_NAME, PSQL_3_IP en PSQL_3_NAME als u deze niet hier hebt aangepast.

De eerste opdracht maakt een nieuwe sleutel aan, de tweede genereert een bestand met de certificaataanvraag CSR en de derde maakt het certificaat zelf aan.

Nu hoeft het certificaat alleen nog naar P12 te worden geconverteerd, waarvoor u een wachtwoord moet instellen:

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

De bestanden die nodig zijn om het PostgreSQL-cluster te installeren, vindt u hier (vervang de variabelen CA_ROOT_NAME, PSQL_1_NAME, PSQL_2_NAME en PSQL_3_NAME door de waarden die u eerder hebt gekozen):

  • /root/psql-certificates/CA_ROOT_NAME.crt: certificaat van de root-CA
  • /root/psql-certificates/PSQL_1_NAME.p12: certificaat van PostgreSQL-node nr. 1
  • /root/psql-certificates/PSQL_2_NAME.p12: certificaat van PostgreSQL-node nr. 2
  • /root/psql-certificates/PSQL_3_NAME.p12: certificaat van PostgreSQL-node nr. 3

Installatie van een PostgreSQL-cluster

Informatie

De volgende stappen moeten op alle drie de PostgreSQL-nodes worden uitgevoerd.

Voorbereiding van de configuratie van het PostgreSQL-cluster

Er moet een SFTP- of SCP-verbinding worden opgezet om het volgende naar de appliance te sturen:

  • Het certificaat van de certificeringsinstantie die de certificaten van de PostgreSQL-nodes heeft ondertekend
  • Het certificaat van de PostgreSQL-node in het formaat P12

Let op: SFTP- of SCP-verbindingen kunnen niet met het account root worden opgezet. Verder kunnen de bestanden eenvoudig in /home/systancia/ worden geplaatst.

Deze bestanden moeten naar een nieuwe map worden verplaatst:

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/

Vervang:

  • PSQL_?_NAME door de naam van het certificaat dat bestemd is voor de PostgreSQL-node die wordt geïnstalleerd
  • ROOT_CA_NAME door de naam van het certificaat van de root-certificeringsinstantie
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/

De bovenstaande opdrachten moeten zijn aangepast volgens de aanpassingsinstellingen.

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/

De bovenstaande opdrachten moeten zijn aangepast volgens de aanpassingsinstellingen.

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/

De bovenstaande opdrachten moeten zijn aangepast volgens de aanpassingsinstellingen.

Configuratie van de PostgreSQL-node

Om te beginnen met het initialiseren van de configuratie van de node moeten de volgende opdrachten worden uitgevoerd:

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

De tweede opdracht start een hulpprogramma dat de volgende informatie vraagt:

  1. De nieuwe wachtwoorden van de lokale gebruikers root en systancia
  2. De naam van de PostgreSQL-node (niet de FQDN)
  3. Het IP-adres van de PostgreSQL-node, de naam van de netwerkinterface, de standaardgateway van het netwerk die moet worden gebruikt, en ook de DNS-servers en het DNS-suffix
  4. De versie van PostgreSQL; wij raden versie 15 aan
  5. De poort voor toegang tot het PostgreSQL-cluster; wij raden poort 5432 aan
  6. Het wachtwoord van het PostgreSQL-account dat wordt gebruikt voor de replicatie en voor pg_rewind
  7. De naam en het IP-adres van een tweede PostgreSQL-node
  8. De naam en het IP-adres van de laatste PostgreSQL-node
  9. Het virtuele IP-adres van het PostgreSQL-cluster
  10. De IP-adressen (gescheiden door komma's) van de Edge Gateways van CyberElements Bastion of van alle andere machines die verbinding met het cluster moeten maken
  11. De naam en het wachtwoord van het PostgreSQL-gebruikersaccount
  12. De IP-adressen of netwerken (gescheiden door komma's) die via SSH verbinding met de PostgreSQL-nodes mogen maken
  13. De certificaatinformatie van de PostgreSQL-node (certificaat van de node in P12-formaat + certificaat van de root-CA)

Na het invoeren van deze informatie wordt vóór de validatie een overzicht van al uw gegevens weergegeven.
Nadat u de opgegeven informatie hebt bevestigd, verschijnt er een melding over de wijzigingen aan het bestand /etc/ssh/sshd_config. Selecteer de standaardoptie keep the local version currently installed.

Om de configuratie toe te passen, is een herstart nodig:

1
reboot
Tip om de installatie van de PostgreSQL-nodes nr. 2 en nr. 3 te versnellen

Na de installatie van PostgreSQL-node nr. 1 kunt u de configuratie-instellingen die voor de installatie zijn gebruikt, terugvinden in het bestand /etc/cleanroom-vault.ini.

Voorbeeld van het bestand /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

Het is voldoende de gemarkeerde regels te wijzigen met de waarden van de PostgreSQL-node die wordt geïnstalleerd, op basis van het bestand dat u van PostgreSQL-node nr. 1 hebt opgehaald.

Gevaar

Als u het voorbeeldbestand hergebruikt, moet u alle volgende gemarkeerde waarden aanpassen aan uw omgeving:

 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

Aanvullende configuraties voor patronictl

Om de opdrachten voor het beheer van het PostgreSQL-cluster met patronictl te kunnen gebruiken, moeten op de PostgreSQL-node nog enkele opdrachten als root worden uitgevoerd:

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

Aanvullende configuraties voor etcd

Voer de volgende opdrachten uit als root op de PostgreSQL-node om automatische compactie en defragmentatie van de database van etcd in te schakelen:

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

De database default aanmaken die nodig is voor de installatie van CyberElements Bastion

Bij de installatie van CyberElements Bastion moet u eerst een database met de naam default aanmaken.
Vul daarvoor de onderstaande tabel in om de opdracht aan te passen die u vanaf een willekeurige node van het PostgreSQL-cluster moet uitvoeren:

Waarde Variabele Definitie
PSQL_VIP Virtueel IP-adres van het PostgreSQL-cluster.
DB_USER De gebruikersnaam van de database die is opgegeven tijdens de configuratie van de PostgreSQL-node

Opdracht die vanaf een willekeurige node van het PostgreSQL-cluster moet worden uitgevoerd:

1
createdb -h PSQL_VIP -U DB_USER default