Sari la conținut

Instalare

Notă

Ca reamintire, trecerea la root pe mașinile Debian trebuie făcută cu următoarea comandă:

1
su -

Instrucțiunile prezentate în această pagină trebuie urmate pentru instalarea tuturor nodurilor clusterului PostgreSQL.

Setări ale sistemelor

Conectarea la mașină

În mod implicit, pe appliance-urile virtuale există două conturi: un cont de utilizator și un cont de superutilizator.

  • Cont de utilizator
    • Login: systancia
    • Parolă: systnci
  • Cont de superutilizator
    • Login: root
    • Parolă: systnci

Conectați-vă la mașină în mod consolă.

Notă

Aranjamentul implicit al tastaturii este QWERTY.

Modificarea aranjamentului tastaturii

Puteți schimba aranjamentul tastaturii cu următoarea linie de comandă:

1
dpkg-reconfigure keyboard-configuration

Apare un meniu care vă permite să alegeți un alt aranjament de tastatură.

Apoi utilizați următoarea linie de comandă pentru a aplica și a salva setările:

1
setupcon -k --save

Setările intră în vigoare imediat după executarea acestei comenzi.

Configurarea rețelei

Este posibil ca appliance-ul virtual să nu primească nicio configurare de rețea la pornire, din următoarele motive:

  • Numele interfeței de rețea nu este ens192: appliance-ul este configurat pentru DHCP numai pe interfața ens192
  • Nu este disponibil niciun server DHCP

Pentru a verifica numele interfeței de rețea, starea sa și adresele IP atribuite, executați următoarea comandă ca root:

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

După executarea comenzii, se afișează următorul răspuns:

1
ens192      UP      10.100.0.51/24

Numele interfeței de rețea din exemplu este ens192, interfața este activă și are adresa IP 10.100.0.51/24.

Dacă numele este diferit de ens192 sau dacă comanda nu returnează nicio setare de rețea, va trebui să configurați rețeaua manual cu următoarele comenzi:

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

Înlocuiți:

  • IP_ADDRESS cu adresa IP a mașinii
  • SUBNET cu subrețeaua
  • DEV_NAME numele interfeței de rețea obținute anterior
  • GATEWAY cu gateway-ul de rețea
Exemplu

Pentru a configura nodul PostgreSQL cu următoarele informații:

  • Adresă IP: 10.100.0.51
  • Subrețea: /24 sau 255.255.255.0
  • Numele interfeței de rețea: eth0
  • Gateway de rețea: 10.100.0.254

Comenzile sunt următoarele:

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

Notă

Această configurare de rețea este temporară, prin urmare orice repornire a serverului va reinițializa setările manuale efectuate cu comenzile ip address și ip route.
Configurarea permanentă va fi realizată de utilitarul de configurare a clusterului PostgreSQL.

Totuși, datorită acestei configurări de rețea, puteți accesa acum nodul PostgreSQL prin SSH.

Modificarea fusului orar

În mod implicit, appliance-ul virtual este configurat pe fusul orar Europe/Paris.

Pentru a schimba acest fus orar, utilizați mai întâi următoarea comandă pentru a obține sintaxa fusurilor orare disponibile:

1
timedatectl list-timezones

Utilizați apoi următoarea linie de comandă:

1
timedatectl set-timezone your_time_zone
Exemplu

Pentru a seta fusul orar la Londra, trebuie executată următoarea comandă:

1
timedatectl set-timezone Europe/London

Verificați fusul orar al serverului cu următoarea linie de comandă:

1
timedatectl

Configurarea unui server de timp NTP

Pericol

Se recomandă insistent să configurați un server de timp pentru a menține ceasul sistemului actualizat: orice diferență de timp între nodurile PostgreSQL poate provoca instabilitate sau chiar poate scoate clusterul din funcțiune.

Etapele necesare sunt descrise în pagina de configurare NTP (configurarea este echivalentă cu cea a serverelor Mediation Controller CyberElements Bastion).

Crearea unei PKI pentru a genera certificatele nodurilor PostgreSQL

Informație

Această secțiune este opțională dacă dispuneți deja de o PKI cu care ați putut genera certificatele indicate în cerințele preliminare.
Această secțiune prezintă diferitele etape de creare a unei PKI și a certificatelor necesare pentru clusterul PostgreSQL. Rețineți că nu se va indica modul de reînnoire a acestora, deoarece reînnoirea unui certificat implică recrearea sa.

Omiteți această etapă

Atenție!

Procedura descrisă a fost validată pe o mașină Debian 12 cu pachetul openssl. Totuși, orice mașină care dispune de o versiune recentă de OpenSSL (versiunea validată fiind 3.0.17) va putea finaliza procedura. Cu excepția Windows sau MacOS, unde comenzile de sistem vor trebui adaptate.

Definirea variabilelor și a personalizărilor

Această secțiune furnizează diverse comenzi și fișiere de configurare care utilizează variabile ce pot fi modificate.
Tabelul de mai jos reunește toate valorile și permite definirea lor, pentru a le putea modifica direct în comenzile afișate în această pagină.

Valoare Variabilă Definiție
PSQL_IP Adresa IP virtuală a clusterului PostgreSQL.
PSQL_NAME Numele scurt (nu FQDN-ul) asociat adresei IP virtuale a clusterului PostgreSQL.
PSQL_1_IP Adresa IP a nodului nr. 1 al clusterului PostgreSQL.
PSQL_1_NAME Numele scurt (nu FQDN-ul) al nodului nr. 1 al clusterului PostgreSQL.
PSQL_2_IP Adresa IP a nodului nr. 2 al clusterului PostgreSQL.
PSQL_2_NAME Numele scurt (nu FQDN-ul) al nodului nr. 2 al clusterului PostgreSQL.
PSQL_3_IP Adresa IP a nodului nr. 3 al clusterului PostgreSQL.
PSQL_3_NAME Numele scurt (nu FQDN-ul) al nodului nr. 3 al clusterului PostgreSQL.
CA_ROOT_NAME Numele atribuit autorității de certificare (CA) rădăcină a PKI.

Pregătire

Acțiunile următoare se vor efectua într-un director nou, pentru a reuni toate fișierele noi într-un singur director. Poate fi utilizat orice director, dar accesul la acesta trebuie limitat cât mai mult posibil. *Conectați-vă la nodul PostgreSQL nr. 1 ca root și executați următoarele comenzi:

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

Crearea autorității de certificare rădăcină

Executați următoarea comandă pentru a crea o nouă CA rădăcină. Vi se va solicita o parolă pentru a proteja CA:

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"

Înlocuiți CA_ROOT_NAME cu numele CA rădăcină dacă nu l-ați personalizat aici.

Crearea certificatelor

Comenzile necesare pentru a genera certificatele nodurilor PostgreSQL sunt următoarele:

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

Înlocuiți CA_ROOT_NAME, PSQL_IP, PSQL_NAME, PSQL_1_IP și PSQL_1_NAME dacă nu le-ați personalizat aici.

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

Înlocuiți CA_ROOT_NAME, PSQL_IP, PSQL_NAME, PSQL_2_IP și PSQL_2_NAME dacă nu le-ați personalizat aici.

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

Înlocuiți CA_ROOT_NAME, PSQL_IP, PSQL_NAME, PSQL_3_IP și PSQL_3_NAME dacă nu le-ați personalizat aici.

Prima comandă creează o cheie nouă, a doua generează un fișier de cerere de semnare a certificatului CSR, iar a treia creează certificatul propriu-zis.

Mai rămâne doar să convertiți certificatul în P12, ceea ce vă va cere să definiți o parolă:

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

Fișierele necesare pentru instalarea clusterului PostgreSQL se găsesc aici (înlocuiți variabilele CA_ROOT_NAME, PSQL_1_NAME, PSQL_2_NAME și PSQL_3_NAME cu valorile alese anterior):

  • /root/psql-certificates/CA_ROOT_NAME.crt: certificatul CA rădăcină
  • /root/psql-certificates/PSQL_1_NAME.p12: certificatul nodului PostgreSQL nr. 1
  • /root/psql-certificates/PSQL_2_NAME.p12: certificatul nodului PostgreSQL nr. 2
  • /root/psql-certificates/PSQL_3_NAME.p12: certificatul nodului PostgreSQL nr. 3

Instalarea unui cluster PostgreSQL

Informație

Etapele următoare trebuie efectuate pe toate cele trei noduri PostgreSQL.

Pregătirea configurării clusterului PostgreSQL

Este necesar să stabiliți o conexiune SFTP sau SCP pentru a trimite către appliance:

  • Certificatul autorității de certificare care a semnat certificatele nodurilor PostgreSQL
  • Certificatul nodului PostgreSQL în format P12

Rețineți că conexiunile SFTP sau SCP nu pot fi inițializate cu contul root. În plus, fișierele pot fi plasate pur și simplu în /home/systancia/.

Este necesar să mutați aceste fișiere într-un director nou:

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/

Înlocuiți:

  • PSQL_?_NAME cu numele certificatului destinat nodului PostgreSQL care se instalează
  • ROOT_CA_NAME cu numele certificatului autorității de certificare rădăcină
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/

Comenzile de mai sus trebuie să fi fost personalizate conform setărilor de personalizare.

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/

Comenzile de mai sus trebuie să fi fost personalizate conform setărilor de personalizare.

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/

Comenzile de mai sus trebuie să fi fost personalizate conform setărilor de personalizare.

Configurarea nodului PostgreSQL

Pentru a începe inițializarea configurării nodului, trebuie executate următoarele comenzi:

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

A doua comandă lansează un utilitar care va solicita următoarele informații:

  1. Noile parole pentru utilizatorii locali root și systancia
  2. Numele nodului PostgreSQL (nu FQDN-ul)
  3. Adresa IP a nodului PostgreSQL, numele interfeței sale de rețea, gateway-ul de rețea implicit care trebuie utilizat, precum și serverele DNS și sufixul DNS
  4. Versiunea de PostgreSQL; vă recomandăm să utilizați versiunea 15
  5. Portul de acces la clusterul PostgreSQL; vă recomandăm să utilizați portul 5432
  6. Parola contului PostgreSQL utilizat pentru replicare și pentru pg_rewind
  7. Numele și adresa IP a unui al doilea nod PostgreSQL
  8. Numele și adresa IP a ultimului nod PostgreSQL
  9. Adresa IP virtuală a clusterului PostgreSQL
  10. Adresele IP (separate prin virgulă) ale Edge Gateway-urilor CyberElements Bastion sau ale oricăror alte mașini care trebuie să se conecteze la cluster
  11. Numele și parola contului de utilizator PostgreSQL
  12. Adresele IP sau rețelele (separate prin virgulă) autorizate să se conecteze prin SSH la nodurile PostgreSQL
  13. Informațiile de certificat ale nodului PostgreSQL (certificatul nodului în format P12 + certificatul CA rădăcină)

După introducerea acestor informații, se va afișa un rezumat al tuturor datelor indicate, înainte de validare.
După confirmarea informațiilor furnizate, va apărea un mesaj referitor la modificările aduse fișierului /etc/ssh/sshd_config. Selectați opțiunea implicită, keep the local version currently installed.

Pentru a aplica configurarea, este necesară o repornire:

1
reboot
Sfat pentru a accelera instalarea nodurilor PostgreSQL nr. 2 și nr. 3

După instalarea nodului PostgreSQL nr. 1, puteți recupera setările de configurare utilizate pentru instalarea sa din fișierul /etc/cleanroom-vault.ini.

Exemplu de fișier /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

Este suficient să modificați liniile evidențiate cu valorile nodului PostgreSQL care se instalează, pornind de la fișierul recuperat de pe nodul PostgreSQL nr. 1.

Pericol

Dacă reutilizați fișierul de exemplu, va trebui să modificați toate valorile evidențiate următoare în funcție de mediul dumneavoastră:

 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

Configurări suplimentare pentru patronictl

Pentru a permite utilizarea comenzilor de gestionare a clusterului PostgreSQL cu patronictl, mai rămân câteva comenzi care trebuie executate ca root pe nodul PostgreSQL:

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

Configurări suplimentare pentru etcd

Pentru a activa compactarea și defragmentarea automată a bazei de date etcd, executați următoarele comenzi ca root pe nodul PostgreSQL:

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

Crearea bazei de date default necesară pentru instalarea CyberElements Bastion

La instalarea CyberElements Bastion, trebuie mai întâi să creați o bază de date numită default.
În acest scop, completați tabelul următor pentru a personaliza comanda pe care va trebui să o executați de pe oricare dintre nodurile clusterului PostgreSQL:

Valoare Variabilă Definiție
PSQL_VIP Adresa IP virtuală a clusterului PostgreSQL.
DB_USER Numele de utilizator al bazei de date indicat în timpul configurării nodului PostgreSQL

Comandă de executat de pe oricare dintre nodurile clusterului PostgreSQL:

1
createdb -h PSQL_VIP -U DB_USER default