Przejdź do treści

Instalacja

Uwaga

Przypomnienie: przejście na root na maszynach Debian musi odbywać się za pomocą następującego polecenia:

1
su -

Instrukcje podane na tej stronie stosuj przy instalacji wszystkich węzłów clustera PostgreSQL.

Ustawienia systemowe

Połączenie z maszyną

Na wirtualnych appliance domyślnie istnieją dwa konta: konto użytkownika i konto superużytkownika.

  • Konto użytkownika
    • Login: systancia
    • Hasło: systnci
  • Konto superużytkownika
    • Login: root
    • Hasło: systnci

Połącz się z maszyną w trybie konsoli.

Uwaga

Domyślny układ klawiatury to QWERTY.

Zmiana układu klawiatury

Układ klawiatury możesz zmienić następującym wierszem poleceń:

1
dpkg-reconfigure keyboard-configuration

Pojawi się menu pozwalające wybrać inny układ klawiatury.

Następnie użyj poniższego wiersza poleceń, aby zastosować i zapisać ustawienia:

1
setupcon -k --save

Ustawienia zaczną obowiązywać natychmiast po wykonaniu tego polecenia.

Konfiguracja sieci

Wirtualna appliance może nie otrzymać konfiguracji sieci przy uruchomieniu z następujących powodów:

  • Nazwa interfejsu sieciowego nie jest ens192: appliance jest skonfigurowana dla DHCP tylko na interfejsie ens192
  • Żaden serwer DHCP nie jest dostępny

Aby sprawdzić nazwę interfejsu sieciowego, jego stan i przypisane adresy IP, wykonaj następujące polecenie jako root:

1
ip -br a | grep -ve "^lo"
Przykład

Po wykonaniu polecenia wyświetlana jest następująca odpowiedź:

1
ens192      UP      10.100.0.51/24

Nazwa interfejsu sieciowego w przykładzie to ens192, interfejs jest aktywny i ma adres IP 10.100.0.51/24.

Jeśli nazwa różni się od ens192 lub jeśli polecenie nie zwraca żadnej konfiguracji sieci, musisz skonfigurować sieć ręcznie za pomocą następujących poleceń:

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

Zamień:

  • IP_ADDRESS adresem IP maszyny
  • SUBNET podsiecią
  • DEV_NAME nazwa wcześniej odczytanego interfejsu sieciowego
  • GATEWAY bramą sieciową
Przykład

Aby skonfigurować węzeł PostgreSQL z następującymi informacjami:

  • Adres IP: 10.100.0.51
  • Podsieć: /24 lub 255.255.255.0
  • Nazwa interfejsu sieciowego: eth0
  • Brama sieciowa: 10.100.0.254

Polecenia są następujące:

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

Uwaga

Ta konfiguracja sieci jest tymczasowa, dlatego każde ponowne uruchomienie serwera wyzeruje ręczne ustawienia wprowadzone poleceniami ip address i ip route.
Konfiguracja trwała zostanie wykonana przez narzędzie konfiguracyjne clustera PostgreSQL.

Dzięki tej konfiguracji sieci możesz jednak teraz uzyskać dostęp do węzła PostgreSQL przez SSH.

Zmiana strefy czasowej

Wirtualne appliance jest domyślnie ustawione na strefę czasową Europe/Paris.

Aby zmienić tę strefę czasową, najpierw pobierz zapis dostępnych stref czasowych następującym poleceniem:

1
timedatectl list-timezones

Następnie użyj poniższego wiersza poleceń:

1
timedatectl set-timezone your_time_zone
Przykład

Aby ustawić strefę czasową na Londyn, należy wykonać następujące polecenie:

1
timedatectl set-timezone Europe/London

Sprawdź strefę czasową serwera następującym wierszem poleceń:

1
timedatectl

Konfiguracja serwera czasu NTP

Niebezpieczeństwo

Zdecydowanie zalecamy skonfigurowanie serwera czasu, aby zegar systemowy pozostawał aktualny: każda różnica czasu między węzłami PostgreSQL może powodować niestabilność, a nawet zatrzymanie działania clustera.

Niezbędne kroki opisano na stronie konfiguracji NTP (konfiguracja jest równoważna z konfiguracją serwerów Mediation Controller CyberElements Bastion).

Tworzenie PKI do generowania certyfikatów węzłów PostgreSQL

Informacja

Ta sekcja jest opcjonalna, jeśli masz już PKI, za pomocą której udało Ci się wygenerować certyfikaty wskazane w wymaganiach wstępnych.
Ta sekcja przedstawi poszczególne kroki tworzenia PKI oraz certyfikatów wymaganych dla clustera PostgreSQL. Nie zostanie wskazane, jak je odnawiać, ponieważ odnowienie certyfikatu polega na jego ponownym utworzeniu.

Pomiń ten krok

Uwaga!

Opisana procedura została zwalidowana na maszynie z systemem Debian 12 z pakietem openssl. Procedurę może jednak przeprowadzić każda maszyna z aktualną wersją OpenSSL (zwalidowana wersja to 3.0.17). Z wyjątkiem systemów Windows lub MacOS, gdzie polecenia systemowe trzeba będzie dostosować.

Definicja zmiennych i dostosowań

Ta sekcja udostępnia różne polecenia i pliki konfiguracyjne, które używają zmiennych możliwych do zmiany.
Poniższa tabela podsumowuje wszystkie wartości i pozwala je zdefiniować, aby móc zmienić je bezpośrednio w poleceniach wyświetlanych na tej stronie.

Wartość Zmienna Definicja
PSQL_IP Wirtualny adres IP clustera PostgreSQL.
PSQL_NAME Krótka nazwa (nie FQDN) powiązana z wirtualnym adresem IP clustera PostgreSQL.
PSQL_1_IP Adres IP węzła nr 1 clustera PostgreSQL.
PSQL_1_NAME Krótka nazwa (nie FQDN) węzła nr 1 clustera PostgreSQL.
PSQL_2_IP Adres IP węzła nr 2 clustera PostgreSQL.
PSQL_2_NAME Krótka nazwa (nie FQDN) węzła nr 2 clustera PostgreSQL.
PSQL_3_IP Adres IP węzła nr 3 clustera PostgreSQL.
PSQL_3_NAME Krótka nazwa (nie FQDN) węzła nr 3 clustera PostgreSQL.
CA_ROOT_NAME Nazwa przypisana głównemu urzędowi certyfikacji (CA) infrastruktury PKI.

Przygotowanie

Poniższe działania zostaną wykonane w nowym katalogu, aby zebrać wszystkie nowe pliki w jednym miejscu. Można użyć dowolnego katalogu, ale dostęp do niego musi być ograniczony w jak największym stopniu. *Zaloguj się na węźle PostgreSQL nr 1 jako root i wykonaj następujące polecenia:

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

Tworzenie głównego urzędu certyfikacji

Wykonaj następujące polecenie, aby utworzyć nowy główny urząd CA. Zostaniesz poproszony o hasło chroniące 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"

Zamień CA_ROOT_NAME na nazwę głównego CA, jeśli nie dostosowałeś jej tutaj.

Tworzenie certyfikatów

Polecenia wymagane do wygenerowania certyfikatów węzłów PostgreSQL są następujące:

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

Zamień CA_ROOT_NAME, PSQL_IP, PSQL_NAME, PSQL_1_IP i PSQL_1_NAME, jeśli nie dostosowałeś ich tutaj.

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

Zamień CA_ROOT_NAME, PSQL_IP, PSQL_NAME, PSQL_2_IP i PSQL_2_NAME, jeśli nie dostosowałeś ich tutaj.

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

Zamień CA_ROOT_NAME, PSQL_IP, PSQL_NAME, PSQL_3_IP i PSQL_3_NAME, jeśli nie dostosowałeś ich tutaj.

Pierwsze polecenie tworzy nowy klucz, drugie generuje plik żądania podpisania certyfikatu CSR, a trzecie tworzy sam certyfikat.

Pozostaje jedynie przekonwertować certyfikat na P12, co będzie wymagać ustawienia hasła:

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

Pliki wymagane do instalacji clustera PostgreSQL znajdują się tutaj (zamień zmienne CA_ROOT_NAME, PSQL_1_NAME, PSQL_2_NAME i PSQL_3_NAME na wybrane wcześniej wartości):

  • /root/psql-certificates/CA_ROOT_NAME.crt: certyfikat głównego CA
  • /root/psql-certificates/PSQL_1_NAME.p12: certyfikat węzła PostgreSQL nr 1
  • /root/psql-certificates/PSQL_2_NAME.p12: certyfikat węzła PostgreSQL nr 2
  • /root/psql-certificates/PSQL_3_NAME.p12: certyfikat węzła PostgreSQL nr 3

Instalacja clustera PostgreSQL

Informacja

Poniższe kroki muszą zostać wykonane na wszystkich trzech węzłach PostgreSQL.

Przygotowanie do konfiguracji clustera PostgreSQL

Konieczne jest ustanowienie połączenia SFTP lub SCP, aby przesłać do appliance:

  • Certyfikat urzędu certyfikacji, który podpisał certyfikaty węzłów PostgreSQL
  • Certyfikat węzła PostgreSQL w formacie P12

Zwróć uwagę, że połączeń SFTP lub SCP nie można inicjować przy użyciu konta root. Ponadto pliki można po prostu umieścić w /home/systancia/.

Te pliki należy przenieść do nowego katalogu:

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/

Zamień:

  • PSQL_?_NAME nazwą certyfikatu przeznaczonego dla instalowanego węzła PostgreSQL
  • ROOT_CA_NAME nazwą certyfikatu głównego urzędu certyfikacji
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/

Powyższe polecenia muszą być dostosowane zgodnie z ustawieniami dostosowania.

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/

Powyższe polecenia muszą być dostosowane zgodnie z ustawieniami dostosowania.

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/

Powyższe polecenia muszą być dostosowane zgodnie z ustawieniami dostosowania.

Konfiguracja węzła PostgreSQL

Aby rozpocząć inicjalizację konfiguracji węzła, trzeba wykonać następujące polecenia:

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

Drugie polecenie uruchomi narzędzie, które będzie wymagać następujących informacji:

  1. Nowe hasła lokalnych użytkowników root i systancia
  2. Nazwa węzła PostgreSQL (nie FQDN)
  3. Adres IP węzła PostgreSQL, nazwa jego interfejsu sieciowego, domyślna brama sieciowa, której należy użyć, a także serwery DNS i sufiks DNS
  4. Wersja PostgreSQL; zalecamy użycie wersji 15
  5. Port dostępu do clustera PostgreSQL; zalecamy użycie portu 5432
  6. Hasło konta PostgreSQL używanego do replikacji i do pg_rewind
  7. Nazwa i adres IP drugiego węzła PostgreSQL
  8. Nazwa i adres IP ostatniego węzła PostgreSQL
  9. Wirtualny adres IP clustera PostgreSQL
  10. Adresy IP (rozdzielone przecinkami) serwerów Edge Gateway CyberElements Bastion lub wszystkich innych maszyn, które muszą łączyć się z clusterem
  11. Nazwa i hasło konta użytkownika PostgreSQL
  12. Adresy IP lub sieci (rozdzielone przecinkami) uprawnione do łączenia się przez SSH z węzłami PostgreSQL
  13. Informacje o certyfikacie węzła PostgreSQL (certyfikat węzła w formacie P12 + certyfikat głównego CA)

Po wprowadzeniu tych informacji, przed zatwierdzeniem wyświetlone zostanie podsumowanie wszystkich Twoich wpisów.
Po zatwierdzeniu podanych informacji pojawi się komunikat dotyczący zmian w pliku /etc/ssh/sshd_config. Wybierz opcję domyślną, keep the local version currently installed.

Aby zastosować konfigurację, wymagane jest ponowne uruchomienie:

1
reboot
Wskazówka przyspieszająca instalację węzłów PostgreSQL nr 2 i nr 3

Po instalacji węzła PostgreSQL nr 1 możesz odczytać ustawienia konfiguracyjne użyte do jego przygotowania z pliku /etc/cleanroom-vault.ini.

Przykład pliku /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

Wystarczy zmienić wyróżnione wiersze na wartości instalowanego węzła PostgreSQL, opierając się na pliku odczytanym z węzła PostgreSQL nr 1.

Niebezpieczeństwo

Jeśli ponownie wykorzystasz plik przykładowy, będziesz musiał zmienić wszystkie następujące wyróżnione wartości odpowiednio do swojego środowiska:

 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

Dodatkowe konfiguracje dla patronictl

Aby umożliwić korzystanie z poleceń zarządzania clusterem PostgreSQL za pomocą patronictl, trzeba jeszcze wykonać na węźle PostgreSQL kilka poleceń jako root:

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

Dodatkowe konfiguracje dla etcd

Aby włączyć automatyczną kompaktację i defragmentację bazy danych etcd, uruchom następujące polecenia jako root na węźle 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

Tworzenie bazy danych default wymaganej do instalacji CyberElements Bastion

Podczas instalacji CyberElements Bastion musisz najpierw utworzyć bazę danych o nazwie default.
Aby to zrobić, wypełnij poniższą tabelę, dostosowując polecenie, które będziesz musiał wykonać z dowolnego jednego węzła clustera PostgreSQL:

Wartość Zmienna Definicja
PSQL_VIP Wirtualny adres IP clustera PostgreSQL.
DB_USER Nazwa użytkownika bazy danych podana podczas konfiguracji węzła PostgreSQL

Polecenie do wykonania z dowolnego z węzłów clustera PostgreSQL:

1
createdb -h PSQL_VIP -U DB_USER default