Gå til innhold

Installasjon

Merk

Til påminnelse: bytte til root på Debian-maskiner må gjøres med følgende kommando:

1
su -

Instruksjonene på denne siden skal følges for installasjonen av alle nodene i PostgreSQL-clusteret.

Systeminnstillinger

Tilkobling til maskinen

Som standard finnes det to kontoer på virtuelle appliances: en brukerkonto og en superbrukerkonto.

  • Brukerkonto
    • Pålogging : systancia
    • Passord: systnci
  • Superbrukerkonto
    • Pålogging : root
    • Passord: systnci

Koble deg til maskinen i konsollmodus.

Merk

Standard tastaturoppsett er QWERTY.

Endring av tastaturoppsettet

Du kan endre tastaturoppsettet med følgende kommandolinje:

1
dpkg-reconfigure keyboard-configuration

Det vises en meny der du kan velge et annet tastaturoppsett.

Bruk deretter følgende kommandolinje for å bruke og lagre innstillingene:

1
setupcon -k --save

Innstillingene får virkning umiddelbart etter at denne kommandoen er kjørt.

Konfigurasjon av nettverket

Det er mulig at den virtuelle appliancen ikke får noen nettverkskonfigurasjon ved oppstart, av følgende grunner:

  • Navnet på nettverksgrensesnittet er ikke ens192: appliancen er konfigurert for DHCP bare på grensesnittet ens192
  • Ingen DHCP-server er tilgjengelig

For å kontrollere navnet på nettverksgrensesnittet, statusen og de tilordnede IP-adressene kjører du følgende kommando som root:

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

Etter at kommandoen er utført, vises følgende svar:

1
ens192      UP      10.100.0.51/24

Navnet på nettverksgrensesnittet i eksempelet er ens192, grensesnittet er aktivt og har IP-adressen 10.100.0.51/24.

Hvis navnet er forskjellig fra ens192, eller hvis kommandoen ikke returnerer noen nettverksinnstillinger, må du konfigurere nettverket manuelt med følgende kommandoer:

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

Erstatt:

  • IP_ADDRESS med maskinens IP-adresse
  • SUBNET med subnettet
  • DEV_NAME navnet på nettverksgrensesnittet du hentet tidligere
  • GATEWAY med nettverkets gateway
Eksempel

For å konfigurere PostgreSQL-noden med følgende informasjon:

  • IP-adresse: 10.100.0.51
  • Subnett: /24 eller 255.255.255.0
  • Navn på nettverksgrensesnitt: eth0
  • Nettverkets gateway: 10.100.0.254

Kommandoene 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

Merk

Denne nettverkskonfigurasjonen er midlertidig, og enhver omstart av serveren vil derfor nullstille de manuelle innstillingene som er gjort med kommandoene ip address og ip route.
Den permanente konfigurasjonen utføres av konfigurasjonsverktøyet for PostgreSQL-clusteret.

Takket være denne nettverkskonfigurasjonen kan du imidlertid nå få tilgang til PostgreSQL-noden via SSH.

Endring av tidssonen

Som standard er den virtuelle appliancen satt til tidssonen Europe/Paris.

For å endre denne tidssonen henter du først skrivemåten for de tilgjengelige tidssonene med følgende kommando:

1
timedatectl list-timezones

Bruk deretter følgende kommandolinje:

1
timedatectl set-timezone your_time_zone
Eksempel

For å sette tidssonen til London må følgende kommando kjøres:

1
timedatectl set-timezone Europe/London

Kontroller tidssonen til serveren med følgende kommandolinje:

1
timedatectl

Konfigurasjon av en NTP-tidsserver

Fare

Det anbefales sterkt å konfigurere en tidsserver for å holde systemklokken oppdatert: enhver tidsforskjell mellom PostgreSQL-nodene kan føre til ustabilitet eller til at clusteret slutter å fungere.

De nødvendige trinnene er beskrevet på siden om NTP-konfigurasjon (konfigurasjonen tilsvarer den for Mediation Controller-serverne til CyberElements Bastion).

Opprette en PKI for å generere sertifikater for PostgreSQL-nodene

Informasjon

Denne delen er valgfri hvis du allerede har en PKI som du har kunnet generere sertifikatene som er angitt i forutsetningene, med.
Denne delen presenterer de ulike trinnene for å opprette en PKI og sertifikatene som PostgreSQL-clusteret krever. Merk at det ikke angis hvordan de fornyes, siden fornyelse av et sertifikat innebærer at det opprettes på nytt.

Hopp over dette trinnet

OBS!

Den beskrevne prosedyren er validert på en Debian 12-maskin med pakken openssl. Enhver maskin med en nyere versjon av OpenSSL (den validerte versjonen er 3.0.17) kan imidlertid gjennomføre prosedyren. Med unntak av Windows eller MacOS, der systemkommandoene må tilpasses.

Definisjon av variabler og tilpasninger

Denne delen inneholder ulike kommandoer og konfigurasjonsfiler som bruker variabler som kan endres.
Tabellen nedenfor oppsummerer alle verdiene og gjør det mulig å definere dem, slik at du kan endre dem direkte i kommandoene som vises på denne siden.

Verdi Variabel Definisjon
PSQL_IP Virtuell IP-adresse til PostgreSQL-clusteret.
PSQL_NAME Kort navn (ikke FQDN) som er knyttet til den virtuelle IP-adressen til PostgreSQL-clusteret.
PSQL_1_IP IP-adresse til node nr. 1 i PostgreSQL-clusteret.
PSQL_1_NAME Kort navn (ikke FQDN) på node nr. 1 i PostgreSQL-clusteret.
PSQL_2_IP IP-adresse til node nr. 2 i PostgreSQL-clusteret.
PSQL_2_NAME Kort navn (ikke FQDN) på node nr. 2 i PostgreSQL-clusteret.
PSQL_3_IP IP-adresse til node nr. 3 i PostgreSQL-clusteret.
PSQL_3_NAME Kort navn (ikke FQDN) på node nr. 3 i PostgreSQL-clusteret.
CA_ROOT_NAME Navn som tilordnes rotsertifiseringsinstansen (CA) i PKI-en.

Forberedelse

De følgende handlingene utføres i en ny katalog for å samle alle de nye filene i én enkelt katalog. Det kan brukes en vilkårlig katalog, men tilgangen til den må være så begrenset som mulig. *Logg på PostgreSQL-node nr. 1 som root og kjør følgende kommandoer:

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

Opprettelse av rotsertifiseringsinstansen

Kjør følgende kommando for å opprette en ny rot-CA. Du blir bedt om et passord for å 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"

Erstatt CA_ROOT_NAME med navnet på rot-CA-en hvis du ikke har tilpasset det her.

Opprettelse av sertifikatene

Kommandoene som kreves for å generere sertifikater for PostgreSQL-nodene, 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")

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

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

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

Den første kommandoen oppretter en ny nøkkel, den andre genererer en CSR-fil med sertifikatsigneringsforespørselen, og den tredje oppretter selve sertifikatet.

Det gjenstår bare å konvertere sertifikatet til P12, noe som krever at du angir et passord:

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

Filene som kreves for å installere PostgreSQL-clusteret, finner du her (erstatt variablene CA_ROOT_NAME, PSQL_1_NAME, PSQL_2_NAME og PSQL_3_NAME med verdiene du valgte tidligere):

  • /root/psql-certificates/CA_ROOT_NAME.crt: sertifikatet til rot-CA-en
  • /root/psql-certificates/PSQL_1_NAME.p12: sertifikatet til PostgreSQL-node nr. 1
  • /root/psql-certificates/PSQL_2_NAME.p12: sertifikatet til PostgreSQL-node nr. 2
  • /root/psql-certificates/PSQL_3_NAME.p12: sertifikatet til PostgreSQL-node nr. 3

Installasjon av et PostgreSQL-cluster

Informasjon

De følgende trinnene må utføres på alle de tre PostgreSQL-nodene.

Forberedelse av konfigurasjonen av PostgreSQL-clusteret

Det er nødvendig å opprette en SFTP- eller SCP-forbindelse for å sende til appliancen:

  • Sertifikatet fra sertifiseringsinstansen som har signert sertifikatene til PostgreSQL-nodene
  • Sertifikatet til PostgreSQL-noden i P12-format

Merk at SFTP- eller SCP-forbindelser ikke kan opprettes med kontoen root. Filene kan i tillegg legges rett i /home/systancia/.

Disse filene må flyttes til en ny katalog:

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/

Erstatt:

  • PSQL_?_NAME med navnet på sertifikatet som er beregnet på PostgreSQL-noden som installeres
  • ROOT_CA_NAME med navnet på sertifikatet til rotsertifiseringsinstansen
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/

Kommandoene ovenfor må være tilpasset i henhold til tilpasningsinnstillingene.

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/

Kommandoene ovenfor må være tilpasset i henhold til tilpasningsinnstillingene.

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/

Kommandoene ovenfor må være tilpasset i henhold til tilpasningsinnstillingene.

Konfigurasjon av PostgreSQL-noden

For å starte initialiseringen av konfigurasjonen av noden må følgende kommandoer kjøres:

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

Den andre kommandoen starter et verktøy som krever følgende informasjon:

  1. Nye passord for de lokale brukerne root og systancia
  2. Navnet på PostgreSQL-noden (ikke FQDN)
  3. IP-adressen til PostgreSQL-noden, navnet på nettverksgrensesnittet, standard nettverksgateway som skal brukes, samt DNS-serverne og DNS-suffikset
  4. Versjonen av PostgreSQL; vi anbefaler versjon 15
  5. Tilgangsporten til PostgreSQL-clusteret; vi anbefaler port 5432
  6. Passordet til PostgreSQL-kontoen som brukes til replikering og til pg_rewind
  7. Navn og IP-adresse til en andre PostgreSQL-node
  8. Navn og IP-adresse til den siste PostgreSQL-noden
  9. Virtuell IP-adresse til PostgreSQL-clusteret
  10. IP-adressene (atskilt med komma) til Edge Gateway-serverne til CyberElements Bastion eller til alle andre maskiner som må koble til clusteret
  11. Navn og passord for PostgreSQL-brukerkontoen
  12. IP-adressene eller nettverkene (atskilt med komma) som har tillatelse til å koble til PostgreSQL-nodene via SSH
  13. Sertifikatinformasjon for PostgreSQL-noden (nodens sertifikat i P12-format + sertifikatet til rot-CA-en)

Etter at du har oppgitt denne informasjonen, vises et sammendrag av alle oppføringene dine før bekreftelsen.
Etter at du har bekreftet informasjonen som er oppgitt, vises en melding om endringene i filen /etc/ssh/sshd_config. Velg standardalternativet keep the local version currently installed.

For å ta i bruk konfigurasjonen kreves en omstart:

1
reboot
Tips for å gjøre installasjonen av PostgreSQL-node nr. 2 og nr. 3 raskere

Etter installasjonen av PostgreSQL-node nr. 1 kan du hente konfigurasjonsinnstillingene som ble brukt til å sette den opp, 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 å endre de uthevede linjene med verdiene til PostgreSQL-noden som installeres, med utgangspunkt i filen du hentet fra PostgreSQL-node nr. 1.

Fare

Hvis du gjenbruker eksempelfilen, må du endre alle de følgende uthevede verdiene i henhold til miljøet ditt:

 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

Ytterligere konfigurasjoner for patronictl

For at kommandoene for å administrere PostgreSQL-clusteret med patronictl skal kunne brukes, må det kjøres noen kommandoer 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

Ytterligere konfigurasjoner for etcd

Kjør følgende kommandoer som root på PostgreSQL-noden for å aktivere automatisk komprimering og defragmentering av etcd-databasen:

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

Opprettelse av databasen default som kreves for å installere CyberElements Bastion

Når du installerer CyberElements Bastion, må du først opprette en database som heter default.
Fyll ut tabellen nedenfor for å tilpasse kommandoen du må kjøre fra en vilkårlig node i PostgreSQL-clusteret:

Verdi Variabel Definisjon
PSQL_VIP Virtuell IP-adresse til PostgreSQL-clusteret.
DB_USER Brukernavnet for databasen som ble angitt under konfigurasjonen av PostgreSQL-noden

Kommando som skal kjøres fra en vilkårlig av nodene i PostgreSQL-clusteret:

1
createdb -h PSQL_VIP -U DB_USER default