Към съдържанието

Инсталиране

Забележка

Напомняме, че превключването към root на компютри с Debian трябва да се извършва със следната команда:

1
su -

Инструкциите на тази страница трябва да се следват при инсталирането на всички възли в клъстера PostgreSQL.

Системни настройки

Свързване с компютъра

По подразбиране виртуалните устройства имат два акаунта: потребителски акаунт и акаунт на суперпотребител.

  • Потребителски акаунт
    • Потребителско име: systancia
    • Парола: systnci
  • Акаунт на суперпотребител
    • Потребителско име: root
    • Парола: systnci

Свържете се към компютъра в режим на конзола.

Забележка

Подредбата на клавиатурата по подразбиране е QWERTY.

Промяна на клавиатурната подредба

Можете да промените подредбата на клавиатурата със следния команден ред:

1
dpkg-reconfigure keyboard-configuration

Появява се меню, което ви позволява да изберете друга подредба на клавиатурата.

След това използвайте следния команден ред, за да приложите и запишете настройките:

1
setupcon -k --save

Настройките влизат в сила веднага след изпълнението на тази команда.

Конфигуриране на мрежата

Виртуалното устройство може да не получи мрежова конфигурация при стартиране поради следните причини:

  • Името на мрежовия интерфейс не е ens192: устройството е конфигурирано за DHCP само на интерфейса ens192
  • Няма наличен DHCP сървър

За да проверите името на мрежовия интерфейс, неговото състояние и присвоените IP адреси, изпълнете следната команда като root:

1
ip -br a | grep -ve "^lo"
Пример

След изпълнението на командата се показва следният отговор:

1
ens192      UP      10.100.0.51/24

Името на мрежовия интерфейс в примера е ens192, интерфейсът е активен и има IP адрес 10.100.0.51/24.

Ако името е различно от ens192 или ако командата не връща мрежови настройки, ще трябва да конфигурирате мрежата ръчно със следните команди:

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

Заменете:

  • IP_ADDRESS с IP адреса на компютъра
  • SUBNET с подмрежата
  • DEV_NAME с името на предварително извлечения мрежов интерфейс
  • GATEWAY с мрежовия шлюз
Пример

За да конфигурирате възела PostgreSQL със следната информация:

  • IP адрес: 10.100.0.51
  • Подмрежа: /24 или 255.255.255.0
  • Име на мрежовия интерфейс: eth0
  • Мрежов шлюз: 10.100.0.254

Командите са следните:

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

Забележка

Тази мрежова конфигурация е временна, затова всяко рестартиране на сървъра ще нулира ръчните настройки, направени с командите ip address и ip route.
Постоянната конфигурация ще бъде извършена от помощната програма за конфигуриране на клъстера PostgreSQL.

Благодарение на тази мрежова конфигурация обаче вече можете да получите достъп до възела PostgreSQL чрез SSH.

Промяна на часовата зона

По подразбиране виртуалното устройство е настроено на часовата зона Europe/Paris.

За да промените тази часова зона, първо използвайте следната команда, за да получите синтаксиса на наличните часови зони:

1
timedatectl list-timezones

След това използвайте следния команден ред:

1
timedatectl set-timezone your_time_zone
Пример

За да зададете часовата зона на Лондон, трябва да изпълните следната команда:

1
timedatectl set-timezone Europe/London

Проверете часовата зона на сървъра със следния команден ред:

1
timedatectl

Конфигуриране на NTP сървър за време

Опасност

Силно се препоръчва да конфигурирате сървър за време, за да поддържате системния часовник актуален: всяка разлика във времето между възлите PostgreSQL може да доведе до нестабилност или дори до спиране на работата на клъстера.

Необходимите стъпки са описани на страницата за конфигуриране на NTP (конфигурацията е същата като тази на сървърите Mediation Controller на CyberElements Bastion).

Създаване на PKI за генериране на сертификатите на възлите PostgreSQL

Информация

Тази част не е задължителна, ако вече разполагате с PKI, от която сте успели да генерирате сертификатите, посочени в предварителните изисквания.
В тази част са представени различните стъпки за създаване на PKI и на сертификатите, необходими за клъстера PostgreSQL. Имайте предвид, че няма да бъде посочено как да ги подновите, тъй като подновяването на сертификат означава повторното му създаване.

Пропускане на тази стъпка

Внимание!

Описаната процедура е валидирана на компютър с Debian 12 с пакета openssl. Всеки компютър с актуална версия на OpenSSL (валидираната версия е 3.0.17) обаче ще може да изпълни процедурата. С изключение на Windows или MacOS, където системните команди ще трябва да бъдат адаптирани.

Дефиниране на променливи и персонализации

Тази част предоставя различни команди и конфигурационни файлове, които използват променливи, които могат да бъдат променяни.
Таблицата по-долу обобщава всички стойности и ви позволява да ги дефинирате, така че да можете да ги промените директно в командите, показани на тази страница.

Стойност Променлива Определение
PSQL_IP Виртуален IP адрес на клъстера PostgreSQL.
PSQL_NAME Кратко име (не FQDN), свързано с виртуалния IP адрес на клъстера PostgreSQL.
PSQL_1_IP IP адрес на възел PostgreSQL № 1 от клъстера.
PSQL_1_NAME Кратко име (не FQDN) на възел PostgreSQL № 1 от клъстера.
PSQL_2_IP IP адрес на възел PostgreSQL № 2 от клъстера.
PSQL_2_NAME Кратко име (не FQDN) на възел PostgreSQL № 2 от клъстера.
PSQL_3_IP IP адрес на възел PostgreSQL № 3 от клъстера.
PSQL_3_NAME Кратко име (не FQDN) на възел PostgreSQL № 3 от клъстера.
CA_ROOT_NAME Име, присвоено на главния сертифициращ орган (CA) на PKI.

Подготовка

Следните действия ще бъдат извършени в нова директория, за да се съберат всички нови файлове в една директория. Може да се използва всяка директория, но достъпът до нея трябва да бъде ограничен колкото е възможно повече. Влезте във възел PostgreSQL № 1 като root и изпълнете следните команди:

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

Създаване на главния сертифициращ орган

Изпълнете следната команда, за да създадете нов главен CA. Ще бъдете подканени да въведете парола за защита на 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"

Заменете CA_ROOT_NAME с името на главния CA, ако не сте го персонализирали тук.

Създаване на сертификати

Командите, необходими за генериране на сертификатите за възлите PostgreSQL, са следните:

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

Заменете CA_ROOT_NAME, PSQL_IP, PSQL_NAME, PSQL_1_IP и PSQL_1_NAME, ако не сте ги персонализирали тук.

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

Заменете CA_ROOT_NAME, PSQL_IP, PSQL_NAME, PSQL_2_IP и PSQL_2_NAME, ако не сте ги персонализирали тук.

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

Заменете CA_ROOT_NAME, PSQL_IP, PSQL_NAME, PSQL_3_IP и PSQL_3_NAME, ако не сте ги персонализирали тук.

Първата команда създава нов ключ, втората генерира файл със заявка за подписване на сертификат CSR, а третата създава самия сертификат.

Сертификатът все още трябва да бъде преобразуван в P12, което ще изисква да зададете парола:

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

Файловете, необходими за инсталиране на клъстера PostgreSQL, се намират тук (заменете променливите CA_ROOT_NAME, PSQL_1_NAME, PSQL_2_NAME и PSQL_3_NAME със стойностите, които сте избрали по-рано):

  • /root/psql-certificates/CA_ROOT_NAME.crt: сертификат на главния CA
  • /root/psql-certificates/PSQL_1_NAME.p12: сертификат за възел PostgreSQL № 1
  • /root/psql-certificates/PSQL_2_NAME.p12: сертификат за възел PostgreSQL № 2
  • /root/psql-certificates/PSQL_3_NAME.p12: сертификат за възел PostgreSQL № 3

Инсталиране на клъстер PostgreSQL

Информация

Следните стъпки трябва да бъдат изпълнени и на трите възела PostgreSQL.

Подготовка за конфигурирането на клъстера PostgreSQL

Необходимо е да установите SFTP или SCP връзка, за да изпратите към устройството:

  • Сертификата на сертифициращия орган, който е подписал сертификатите за възлите PostgreSQL
  • Сертификата на възела PostgreSQL във формат P12

Имайте предвид, че SFTP или SCP връзките не могат да бъдат инициализирани с акаунта root. Освен това файловете могат просто да бъдат поставени в /home/systancia/.

Необходимо е да преместите тези файлове в нова директория:

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/

Заменете:

  • PSQL_?_NAME с името на сертификата, предназначен за инсталирания възел PostgreSQL
  • ROOT_CA_NAME с името на сертификата на главния сертифициращ орган
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/

Командите по-горе трябва да са персонализирани съгласно настройките за персонализиране.

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/

Командите по-горе трябва да са персонализирани съгласно настройките за персонализиране.

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/

Командите по-горе трябва да са персонализирани съгласно настройките за персонализиране.

Конфигуриране на възела PostgreSQL

За да започнете инициализирането на конфигурацията на възела, трябва да изпълните следните команди:

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

Втората команда ще стартира помощна програма, която ще изиска следната информация:

  1. Нови пароли за локалните потребители root и systancia
  2. Име на възела PostgreSQL (не FQDN)
  3. IP адресът на възела PostgreSQL, името на неговия мрежов интерфейс, мрежовият шлюз по подразбиране, който да се използва, както и DNS сървърите и DNS суфиксът
  4. Версията на PostgreSQL; препоръчваме да използвате версия 15
  5. Портът за достъп до клъстера PostgreSQL; препоръчваме да използвате порт 5432
  6. Парола за акаунта на PostgreSQL, използван за репликацията и за pg_rewind
  7. Име и IP адрес на втори възел PostgreSQL
  8. Име и IP адрес на последния възел PostgreSQL
  9. Виртуален IP адрес на клъстера PostgreSQL
  10. IP адресите (разделени със запетаи) на сървърите Edge Gateway на CyberElements Bastion или на всички други компютри, които трябва да се свързват с клъстера
  11. Име и парола на потребителския акаунт на PostgreSQL
  12. IP адресите или мрежите (разделени със запетаи), на които е разрешено да се свързват чрез SSH с възлите PostgreSQL
  13. Информация за сертификата на възела PostgreSQL (сертификат на възела във формат P12 + сертификат на главния CA)

След въвеждането на тази информация преди валидирането ще бъде показано обобщение на всички въведени от вас данни.
След потвърждаване на предоставената информация ще се появи съобщение относно промените във файла /etc/ssh/sshd_config. Изберете опцията по подразбиране, keep the local version currently installed.

За да приложите конфигурацията, е необходимо рестартиране:

1
reboot
Съвет за ускоряване на инсталирането на възли PostgreSQL № 2 и № 3

След инсталирането на възел PostgreSQL № 1 можете да извлечете настройките на конфигурацията, използвани за настройването му, от файла /etc/cleanroom-vault.ini.

Пример за файла /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

Просто променете маркираните редове със стойностите на инсталирания възел PostgreSQL, като се базирате на файла, извлечен от възел PostgreSQL № 1.

Опасност

Ако използвате повторно примерния файл, ще трябва да промените всички следващи маркирани стойности според вашата среда:

 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

След като всички възли PostgreSQL бъдат инсталирани, изтрийте файла /etc/cleanroom-vault.ini от всеки възел, тъй като той съдържа паролите, въведени по време на конфигурирането, в обикновен текст:

1
rm /etc/cleanroom-vault.ini

Допълнителни конфигурации за patronictl

За да се даде възможност за използване на командите за управление на клъстера PostgreSQL с patronictl, остава да изпълните няколко команди като root на възела 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

Допълнителни конфигурации за etcd

За да активирате автоматичното уплътняване и дефрагментиране на базата данни etcd, изпълнете следните команди като root на възела 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

Създаване на базата данни default, необходима за инсталирането на CyberElements Bastion

При инсталирането на CyberElements Bastion първо трябва да създадете база данни с име default.
За целта попълнете следната таблица, за да персонализирате командата, която ще трябва да изпълните от който и да е възел на клъстера PostgreSQL:

Стойност Променлива Определение
PSQL_VIP Виртуален IP адрес на клъстера PostgreSQL.
DB_USER Потребителското име за базата данни, зададено по време на конфигурирането на възела PostgreSQL

Команда, която да се изпълни от някой от възлите на клъстера PostgreSQL:

1
createdb -h PSQL_VIP -U DB_USER default