Gå til indholdet

Installation

Bemærk

Til påmindelse: skift til root på Debian-maskiner skal ske med følgende kommando:

1
su -

Anvisningerne på denne side skal følges ved installationen af alle noder i PostgreSQL-clusteret.

Systemindstillinger

Forbindelse til maskinen

Som standard findes der to konti på de virtuelle appliances: en brugerkonto og en superbrugerkonto.

  • Brugerkonto
    • Login: systancia
    • Adgangskode: systnci
  • Superbrugerkonto
    • Login: root
    • Adgangskode: systnci

Forbind til maskinen i konsoltilstand.

Bemærk

Standardtastaturlayoutet er QWERTY.

Ændring af tastaturlayoutet

Du kan ændre tastaturlayoutet med følgende kommandolinje:

1
dpkg-reconfigure keyboard-configuration

Der vises en menu, hvor du kan vælge et andet tastaturlayout.

Brug derefter følgende kommandolinje til at anvende og gemme indstillingerne:

1
setupcon -k --save

Indstillingerne træder i kraft umiddelbart efter, at denne kommando er udført.

Konfiguration af netværket

Den virtuelle appliance modtager muligvis ikke en netværkskonfiguration ved opstart af følgende årsager:

  • Navnet på netværksgrænsefladen er ikke ens192: appliancen er konfigureret til DHCP kun på grænsefladen ens192
  • Der er ingen DHCP-server tilgængelig

Kør følgende kommando som root for at kontrollere navnet på netværksgrænsefladen, dens status og de tildelte IP-adresser:

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

Efter udførelsen af kommandoen vises følgende svar:

1
ens192      UP      10.100.0.51/24

Navnet på netværksgrænsefladen i eksemplet er ens192, grænsefladen er aktiv og har IP-adressen 10.100.0.51/24.

Hvis navnet er forskelligt fra ens192, eller hvis kommandoen ikke returnerer nogen netværksindstillinger, skal du konfigurere netværket manuelt med følgende kommandoer:

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

Erstat:

  • IP_ADDRESS med maskinens IP-adresse
  • SUBNET med undernettet
  • DEV_NAME navnet på den netværksgrænseflade, der blev fundet tidligere
  • GATEWAY med netværkets gateway
Eksempel

For at konfigurere PostgreSQL-noden med følgende oplysninger:

  • IP-adresse: 10.100.0.51
  • Undernet: /24 eller 255.255.255.0
  • Navn på netværksgrænsefladen: eth0
  • Netværkets gateway: 10.100.0.254

Kommandoerne er som følger:

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

Bemærk

Denne netværkskonfiguration er midlertidig, og enhver genstart af serveren nulstiller derfor de manuelle indstillinger, der er foretaget med kommandoerne ip address og ip route.
Den permanente konfiguration udføres af konfigurationsværktøjet til PostgreSQL-clusteret.

Takket være denne netværkskonfiguration kan du dog nu få adgang til PostgreSQL-noden via SSH.

Ændring af tidszonen

Som standard er den virtuelle appliance indstillet til tidszonen Europe/Paris.

For at ændre denne tidszone skal du først med følgende kommando hente skrivemåden for de tilgængelige tidszoner:

1
timedatectl list-timezones

Brug derefter følgende kommandolinje:

1
timedatectl set-timezone your_time_zone
Eksempel

For at indstille tidszonen til London skal følgende kommando udføres:

1
timedatectl set-timezone Europe/London

Kontrollér serverens tidszone med følgende kommandolinje:

1
timedatectl

Konfiguration af en NTP-tidsserver

Fare

Det anbefales stærkt at konfigurere en tidsserver for at holde systemuret opdateret: enhver tidsforskel mellem PostgreSQL-noderne kan medføre ustabilitet eller endda få clusteret til at holde op med at fungere.

De nødvendige trin er beskrevet på siden om NTP-konfiguration (konfigurationen svarer til den for Mediation Controller-serverne i CyberElements Bastion).

Oprettelse af en PKI til at generere certifikater til PostgreSQL-noderne

Information

Dette afsnit er valgfrit, hvis du allerede har en PKI, hvorfra du har kunnet generere de certifikater, der er angivet i forudsætningerne.
Dette afsnit præsenterer de forskellige trin til oprettelse af en PKI og de certifikater, der kræves til PostgreSQL-clusteret. Bemærk, at det ikke angives, hvordan de fornyes, da fornyelse af et certifikat indebærer, at det oprettes igen.

Spring dette trin over

Vigtigt!

Den beskrevne procedure er valideret på en Debian 12-maskine med pakken openssl. Enhver maskine med en nyere version af OpenSSL (den validerede version er 3.0.17) kan dog gennemføre proceduren. Undtagen under Windows eller MacOS, hvor systemkommandoerne skal tilpasses.

Definition af variabler og tilpasninger

Dette afsnit indeholder forskellige kommandoer og konfigurationsfiler, der bruger variabler, som kan ændres.
Tabellen nedenfor opsummerer alle værdierne og giver dig mulighed for at definere dem, så du kan ændre dem direkte i de kommandoer, der vises på denne side.

Værdi Variabel Definition
PSQL_IP Virtuel IP-adresse for PostgreSQL-clusteret.
PSQL_NAME Kort navn (ikke FQDN'et), der er knyttet til PostgreSQL-clusterets virtuelle IP-adresse.
PSQL_1_IP IP-adresse for node nr. 1 i PostgreSQL-clusteret.
PSQL_1_NAME Kort navn (ikke FQDN'et) for node nr. 1 i PostgreSQL-clusteret.
PSQL_2_IP IP-adresse for node nr. 2 i PostgreSQL-clusteret.
PSQL_2_NAME Kort navn (ikke FQDN'et) for node nr. 2 i PostgreSQL-clusteret.
PSQL_3_IP IP-adresse for node nr. 3 i PostgreSQL-clusteret.
PSQL_3_NAME Kort navn (ikke FQDN'et) for node nr. 3 i PostgreSQL-clusteret.
CA_ROOT_NAME Navn, der tildeles PKI'ens rodcertificeringsmyndighed (CA).

Forberedelse

Følgende handlinger udføres i en ny mappe for at samle alle de nye filer i én mappe. Der kan bruges en vilkårlig mappe, men adgangen til den skal begrænses så meget som muligt. *Log på PostgreSQL-node nr. 1 som root og kør følgende kommandoer:

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

Oprettelse af rodcertificeringsmyndigheden

Kør følgende kommando for at oprette en ny rod-CA. Du bliver bedt om en adgangskode til at beskytte CA'en:

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"

Erstat CA_ROOT_NAME med navnet på rod-CA'en, hvis du ikke har tilpasset det her.

Oprettelse af certifikater

De kommandoer, der kræves for at generere certifikater til PostgreSQL-noderne, er som følger:

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

Erstat CA_ROOT_NAME, PSQL_IP, PSQL_NAME, PSQL_1_IP og PSQL_1_NAME, hvis du ikke har tilpasset dem her.

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

Erstat CA_ROOT_NAME, PSQL_IP, PSQL_NAME, PSQL_2_IP og PSQL_2_NAME, hvis du ikke har tilpasset dem her.

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

Erstat CA_ROOT_NAME, PSQL_IP, PSQL_NAME, PSQL_3_IP og PSQL_3_NAME, hvis du ikke har tilpasset dem her.

Den første kommando opretter en ny nøgle, den anden genererer en CSR-fil med certifikatanmodningen, og den tredje opretter selve certifikatet.

Certifikatet skal nu blot konverteres til P12, hvilket kræver, at du angiver en adgangskode:

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 filer, der kræves for at installere PostgreSQL-clusteret, findes her (erstat variablerne CA_ROOT_NAME, PSQL_1_NAME, PSQL_2_NAME og PSQL_3_NAME med de værdier, du valgte tidligere):

  • /root/psql-certificates/CA_ROOT_NAME.crt: certifikat for rod-CA'en
  • /root/psql-certificates/PSQL_1_NAME.p12: certifikat til PostgreSQL-node nr. 1
  • /root/psql-certificates/PSQL_2_NAME.p12: certifikat til PostgreSQL-node nr. 2
  • /root/psql-certificates/PSQL_3_NAME.p12: certifikat til PostgreSQL-node nr. 3

Installation af et PostgreSQL-cluster

Information

Følgende trin skal udføres på alle tre PostgreSQL-noder.

Forberedelse af konfigurationen af PostgreSQL-clusteret

Det er nødvendigt at oprette en SFTP- eller SCP-forbindelse for at sende følgende til appliancen:

  • Certifikatet fra den certificeringsmyndighed, der har signeret certifikaterne til PostgreSQL-noderne
  • PostgreSQL-nodens certifikat i formatet P12

Bemærk, at SFTP- eller SCP-forbindelser ikke kan initialiseres med kontoen root. Desuden kan filerne blot placeres i /home/systancia/.

Disse filer skal flyttes til en ny mappe:

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/

Erstat:

  • PSQL_?_NAME med navnet på det certifikat, der er beregnet til den PostgreSQL-node, som installeres
  • ROOT_CA_NAME med navnet på rodcertificeringsmyndighedens certifikat
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/

Kommandoerne ovenfor skal være tilpasset i henhold til tilpasningsindstillingerne.

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/

Kommandoerne ovenfor skal være tilpasset i henhold til tilpasningsindstillingerne.

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/

Kommandoerne ovenfor skal være tilpasset i henhold til tilpasningsindstillingerne.

Konfiguration af PostgreSQL-noden

For at starte initialiseringen af nodens konfiguration skal følgende kommandoer udføres:

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

Den anden kommando starter et værktøj, der kræver følgende oplysninger:

  1. Nye adgangskoder til de lokale brugere root og systancia
  2. Navnet på PostgreSQL-noden (ikke FQDN'et)
  3. PostgreSQL-nodens IP-adresse, navnet på dens netværksgrænseflade, den standardgateway på netværket, der skal bruges, samt DNS-serverne og DNS-suffikset
  4. Versionen af PostgreSQL; vi anbefaler at bruge version 15
  5. Adgangsporten til PostgreSQL-clusteret; vi anbefaler at bruge porten 5432
  6. Adgangskode til den PostgreSQL-konto, der bruges til replikering og til pg_rewind
  7. Navn og IP-adresse på en anden PostgreSQL-node
  8. Navn og IP-adresse på den sidste PostgreSQL-node
  9. Virtuel IP-adresse for PostgreSQL-clusteret
  10. IP-adresserne (adskilt af kommaer) på Edge Gateways i CyberElements Bastion eller på alle andre maskiner, der skal forbinde til clusteret
  11. Navn og adgangskode på PostgreSQL-brugerkontoen
  12. De IP-adresser eller netværk (adskilt af kommaer), der har tilladelse til at forbinde via SSH til PostgreSQL-noderne
  13. Certifikatoplysninger for PostgreSQL-noden (nodens certifikat i P12-format + rod-CA'ens certifikat)

Når disse oplysninger er indtastet, vises en oversigt over alle dine angivelser før bekræftelsen.
Efter bekræftelsen af de angivne oplysninger vises en meddelelse om ændringerne i filen /etc/ssh/sshd_config. Vælg standardindstillingen keep the local version currently installed.

For at anvende konfigurationen kræves en genstart:

1
reboot
Tip til at fremskynde installationen af PostgreSQL-node nr. 2 og nr. 3

Efter installationen af PostgreSQL-node nr. 1 kan du hente de konfigurationsindstillinger, der blev brugt til at opsætte den, i filen /etc/cleanroom-vault.ini.

Eksempel på filen /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

Det er nok at ændre de fremhævede linjer med værdierne for den PostgreSQL-node, der installeres, ud fra den fil, du hentede fra PostgreSQL-node nr. 1.

Fare

Hvis du genbruger eksempelfilen, skal du ændre alle følgende fremhævede værdier i henhold til dit miljø:

 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

Yderligere konfigurationer til patronictl

For at kommandoerne til styring af PostgreSQL-clusteret med patronictl kan bruges, skal der køres nogle få kommandoer mere som root på PostgreSQL-noden:

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

Yderligere konfigurationer for etcd

For at slå automatisk komprimering og defragmentering af databasen for etcd til skal du køre følgende kommandoer som root på PostgreSQL-noden:

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

Oprettelse af databasen default, der kræves til installationen af CyberElements Bastion

Ved installationen af CyberElements Bastion skal du først oprette en database med navnet default.
Udfyld dertil følgende tabel for at tilpasse den kommando, du skal køre fra en vilkårlig enkelt node i PostgreSQL-clusteret:

Værdi Variabel Definition
PSQL_VIP Virtuel IP-adresse for PostgreSQL-clusteret.
DB_USER Databasens brugernavn, der blev angivet under konfigurationen af PostgreSQL-noden

Kommando, der skal udføres fra en vilkårlig af noderne i PostgreSQL-clusteret:

1
createdb -h PSQL_VIP -U DB_USER default