Задание 1: Ручная установка Pangolin
В этом задании мы изучим план развертывания кластера, выполним установку необходимых пакетов и на их основе настроим standalone сервер.
План развертывания кластера
В этой теме рассматривается развертывание кластера СУБД Pangolin вручную. Развертывание производится на трех узлах:
srv1— лидер, или, иначе, мастер сервер;srv2— реплика;srv3— арбитр.
Реальные кластеры СУБД Pangolin, возможно, используют большее количество узлов. Но, предлагаемая конфигурация вполне удовлетворяет минимальным требованиям отказоустойчивости.
Удаление автоматически развернутого кластера Pangolin
Виртуальные машины используются те же, что и в теме «Развертывание кластера», рассказывающей об установке СУБД Pangolin с помощью Pangolin Installer.
Кластер СУБД Pangolin, который был развернут в этой теме, удален также посредством Pangolin Installer.
Для удаления развернутого ПО СУБД Pangolin необходимо следующее:
- Развернуть виртуальное окружение python3.
- Активировать виртуальное окружение.
- Запустить Pangolin Installer для удаления.
Виртуальное окружение python3
Ранее в разделе «Задание 2: Развертывание по умолчанию с помощью Pangolin Installer» пакет для установки виртуального окружения уже был установлен.
Активация виртуального окружения
Активируем виртуальное окружение:
[student@srv1 ~]$ source /opt/pangolin-ansible-venv-controller/bin/activate
(pangolin-ansible-venv-controller) [student@srv1 ~]$
Вид приглашения командной строки Bash, задаваемый переменной PS1, изменился, указывая на активированное виртуальное окружение.
Запуск Pangolin Installer для удаления ПО Pangolin
Запустите очистку кластера:
(pangolin-ansible-venv-controller) [student@srv1 ~]$ /opt/pangolin-ansible-venv-controller/bin/pangolin-installer terminal -c config.yml -a clean
Вывод команды:
Запуск предварительных проверок.
Предварительные проверки пройдены.
|------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| clean |
|------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Node | Action | CPU | MEM | Disk available | OS | Version OS | Packages Removed | Packages Installed | Configuration |
|----------------|---------|-----|------|--------------------------|--------|------------|------------------------------------------|--------------------|---------------|
| node: master | install | 1 | 4 GB | / 14G | RED OS | 8.0 | pangolin-ansible-venv-controller (6.7.0) | | cluster |
| ip/dns: (srv1) | | | | | | | pangolin-installer (1.0.3) | | |
| | | | | | | | pangolin-ansible-venv-controlled (6.7.0) | | |
| | | | | | | | pangolin-auth-password (6.7.0) | | |
| | | | | | | | pangolin-certs-rotate (6.7.0) | | |
| | | | | | | | pangolin-security-utilities (6.7.0) | | |
| | | | | | | | pangolin-dbms-6.7 (6.7.0) | | |
| | | | | | | | pangolin-dbms-6.7-client (6.7.0) | | |
| | | | | | | | pangolin-timescaledb-6.7-apache (2.25.0) | | |
| | | | | | | | pangolin-manager-venv (2.1.13) | | |
| | | | | | | | pangolin-manager (2.1.13) | | |
| | | | | | | | pangolin-backup-tools-venv (6.7.0) | | |
| | | | | | | | pangolin-backup-tools (6.7.0) | | |
| | | | | | | | pangolin-pooler (1.5.6) | | |
| | | | | | | | pangolin-diagnostic-tool (6.7.0) | | |
| | | | | | | | pangolin-auth-reencrypt (6.7.0) | | |
| | | | | | | | pangolin-dbms-6-pltcl (6.7.0) | | |
| | | | | | | | pangolin-dbms-6-plperl (6.7.0) | | |
| | | | | | | | pangolin-dbms-6-jsonb-plperl (6.7.0) | | |
| | | | | | | | pangolin-dbms-6-hstore-plperl (6.7.0) | | |
| | | | | | | | pangolin-dbms-6-bool-plperl (6.7.0) | | |
| | | | | | | | pangolin-dbms-6-plpython3 (6.7.0) | | |
| | | | | | | | pangolin-dbms-6-ltree-plpython3 (6.7.0) | | |
| | | | | | | | pangolin-dbms-6-jsonb-plpython3 (6.7.0) | | |
| | | | | | | | pangolin-dbms-6-hstore-plpython3 (6.7.0) | | |
| | | | | | | | pangolin-tuner (1.1.1) | | |
| | | | | | | | | | |
| node: replica | install | 1 | 4 GB | / 19G | RED OS | 8.0 | pangolin-ansible-venv-controlled (6.7.0) | | cluster |
| ip/dns: (srv2) | | | | | | | pangolin-auth-password (6.7.0) | | |
| | | | | | | | pangolin-certs-rotate (6.7.0) | | |
| | | | | | | | pangolin-security-utilities (6.7.0) | | |
| | | | | | | | pangolin-dbms-6.7 (6.7.0) | | |
| | | | | | | | pangolin-dbms-6.7-client (6.7.0) | | |
| | | | | | | | pangolin-timescaledb-6.7-apache (2.25.0) | | |
| | | | | | | | pangolin-manager-venv (2.1.13) | | |
| | | | | | | | pangolin-manager (2.1.13) | | |
| | | | | | | | pangolin-backup-tools-venv (6.7.0) | | |
| | | | | | | | pangolin-backup-tools (6.7.0) | | |
| | | | | | | | pangolin-pooler (1.5.6) | | |
| | | | | | | | pangolin-diagnostic-tool (6.7.0) | | |
| | | | | | | | pangolin-auth-reencrypt (6.7.0) | | |
| | | | | | | | pangolin-dbms-6-pltcl (6.7.0) | | |
| | | | | | | | pangolin-dbms-6-plperl (6.7.0) | | |
| | | | | | | | pangolin-dbms-6-jsonb-plperl (6.7.0) | | |
| | | | | | | | pangolin-dbms-6-hstore-plperl (6.7.0) | | |
| | | | | | | | pangolin-dbms-6-bool-plperl (6.7.0) | | |
| | | | | | | | pangolin-dbms-6-plpython3 (6.7.0) | | |
| | | | | | | | pangolin-dbms-6-ltree-plpython3 (6.7.0) | | |
| | | | | | | | pangolin-dbms-6-jsonb-plpython3 (6.7.0) | | |
| | | | | | | | pangolin-dbms-6-hstore-plpython3 (6.7.0) | | |
| | | | | | | | pangolin-tuner (1.1.1) | | |
| | | | | | | | | | |
| node: arbiter | install | 1 | 4 GB | / 19G | RED OS | 8.0 | | | cluster |
| ip/dns: (srv3) | | | | | | | | | |
|------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
Процедура очистит стенд от компонентов Pangolin. Продолжить? (Y/N): y
Выполняемая задача: clean
🟢 Роль MAIN PLAY - Завершена! [Время выполнения: 0:03:02] Задач выполнено:: 43 | | |#########################################################################################|
Запуск предварительных проверок.
Предварительные проверки пройдены.
|---------------------------------------------------------------------------------------|
| after clean |
|---------------------------------------------------------------------------------------|
| Node | Action | Packages Installed |
|----------------|-------------|--------------------------------------------------------|
| node: master | after clean | pangolin-ansible-venv-controller (6.7.0) |
| ip/dns: (srv1) | | pangolin-installer (1.0.3) |
| | | pangolin-timescaledb-6.7-apache (2.25.0) |
| | | |
| node: replica | after clean | pangolin-timescaledb-6.7-apache (2.25.0) |
| ip/dns: (srv2) | | |
| node: arbiter | after clean | |
| ip/dns: (srv3) | | |
|---------------------------------------------------------------------------------------|
В результате этой процедуры все сервисы Pangolin будут остановлены.
Для деактивирования виртуального окружения:
(pangolin-ansible-venv-controller) [student@srv1 ~]$ deactivate
Развертывание установочных пакетов
Для развертывания кластера вручную удобно создать централизованный репозиторий, доступный на узлах с помощью какого-либо сетевого протокола. Тем не менее, для простоты демонстрации на этом курсе установочные rpm-пакеты дистрибутива СУБД Pangolin будут просто cкопированы на узлы srv2 и srv3.
Развертывание пакетов ПО
В теме «Развертывание кластера» было рассказано, как извлечь установочные rpm-пакеты из дистрибутива. Все эти пакеты находятся в каталоге ~stutent/Distrib:
[student@srv1 ~]$ find Distr/ -maxdepth 2 -type f -name '*.rpm'
Вывод команды:
Distr/distributive/pangolin-backup-tools-6.7.0-redos8.0.x86_64.rpm
Distr/distributive/pangolin-copywala-1.2.2-redos8.0.x86_64.rpm
Distr/distributive/pangolin-core-6.7.0-redos8.0.x86_64.rpm
Distr/distributive/pangolin-dbms-6.7-6.7.0-redos8.0.x86_64.rpm
Distr/distributive/pangolin-dbms-6.7-client-6.7.0-redos8.0.x86_64.rpm
Distr/distributive/pangolin-dbms-6.7-devel-6.7.0-redos8.0.x86_64.rpm
Distr/distributive/pangolin-dbms-6.7-libpq-6.7.0-redos8.0.x86_64.rpm
Distr/distributive/pangolin-dbms-6.7-libpq-dev-6.7.0-redos8.0.x86_64.rpm
Distr/distributive/pangolin-full-6.7.0-redos8.0.x86_64.rpm
Distr/distributive/pangolin-manager-2.1.13-redos8.0.x86_64.rpm
Distr/distributive/pangolin-manager-dcs-6.7.0-redos8.0.x86_64.rpm
Distr/distributive/pangolin-orchestrated-6.7.0-redos8.0.x86_64.rpm
Distr/distributive/pangolin-pooler-1.5.6-redos8.0.x86_64.rpm
Distr/distributive/pangolin-pooler-mt-1.5.4-redos8.0.x86_64.rpm
Убедимся, что каталога ~stutent/Distrib на других узлах нет:
[student@srv1 ~]$ ssh srv2 ls ~/Distrib
license.json
[student@srv1 ~]$ ssh srv3 ls ~/Distrib
license.json
В то же время на узле srv1 в каталоге ~student/Distrib множество файлов, которые не понадобятся при установке ПО на другие узлы. Поэтому скопируем на них лишь установочные rpm-пакеты, извлеченные на srv1 из дистрибутива.
Скопируем на узел srv2:
[student@srv1 ~]$ find Distr/ -maxdepth 2 -type f -name '*.rpm' | cpio -o | ssh srv2 cpio -ivd
Вывод команды:
Distr/distributive/pangolin-backup-tools-6.7.0-redos8.0.x86_64.rpm
Distr/distributive/pangolin-copywala-1.2.2-redos8.0.x86_64.rpm
Distr/distributive/pangolin-core-6.7.0-redos8.0.x86_64.rpm
Distr/distributive/pangolin-dbms-6.7-6.7.0-redos8.0.x86_64.rpm
Distr/distributive/pangolin-dbms-6.7-client-6.7.0-redos8.0.x86_64.rpm
Distr/distributive/pangolin-dbms-6.7-devel-6.7.0-redos8.0.x86_64.rpm
Distr/distributive/pangolin-dbms-6.7-libpq-6.7.0-redos8.0.x86_64.rpm
Distr/distributive/pangolin-dbms-6.7-libpq-dev-6.7.0-redos8.0.x86_64.rpm
Distr/distributive/pangolin-full-6.7.0-redos8.0.x86_64.rpm
Distr/distributive/pangolin-manager-2.1.13-redos8.0.x86_64.rpm
Distr/distributive/pangolin-manager-dcs-6.7.0-redos8.0.x86_64.rpm
Distr/distributive/pangolin-orchestrated-6.7.0-redos8.0.x86_64.rpm
Distr/distributive/pangolin-pooler-1.5.6-redos8.0.x86_64.rpm
99622 blocks
Distr/distributive/pangolin-pooler-mt-1.5.4-redos8.0.x86_64.rpm
99622 blocks
А затем на srv3:
[student@srv1 ~]$ find Distr/ -maxdepth 2 -type f -name '*.rpm' | cpio -o | ssh srv3 cpio -ivd
Вывод команды:
Distr/distributive/pangolin-backup-tools-6.7.0-redos8.0.x86_64.rpm
Distr/distributive/pangolin-copywala-1.2.2-redos8.0.x86_64.rpm
Distr/distributive/pangolin-core-6.7.0-redos8.0.x86_64.rpm
Distr/distributive/pangolin-dbms-6.7-6.7.0-redos8.0.x86_64.rpm
Distr/distributive/pangolin-dbms-6.7-client-6.7.0-redos8.0.x86_64.rpm
Distr/distributive/pangolin-dbms-6.7-devel-6.7.0-redos8.0.x86_64.rpm
Distr/distributive/pangolin-dbms-6.7-libpq-6.7.0-redos8.0.x86_64.rpm
Distr/distributive/pangolin-dbms-6.7-libpq-dev-6.7.0-redos8.0.x86_64.rpm
Distr/distributive/pangolin-full-6.7.0-redos8.0.x86_64.rpm
Distr/distributive/pangolin-manager-2.1.13-redos8.0.x86_64.rpm
Distr/distributive/pangolin-manager-dcs-6.7.0-redos8.0.x86_64.rpm
Distr/distributive/pangolin-orchestrated-6.7.0-redos8.0.x86_64.rpm
Distr/distributive/pangolin-pooler-1.5.6-redos8.0.x86_64.rpm
99622 blocks
Distr/distributive/pangolin-pooler-mt-1.5.4-redos8.0.x86_64.rpm
99622 blocks
Проверим наличие установочных файлов на srv2:
[student@srv1 ~]$ ssh srv2 ls -RF Distrib
Вывод команды:
Distrib:
distributive/
license.json
Distr/distributive:
pangolin-backup-tools-6.7.0-redos8.0.x86_64.rpm
pangolin-copywala-6.7-redos8.0.x86_64.rpm
pangolin-core-6.7.0-redos8.0.x86_64.rpm
pangolin-dbms-6.7-6.7.0-redos8.0.x86_64.rpm
pangolin-dbms-6.7-client-6.7.0-redos8.0.x86_64.rpm
pangolin-dbms-6.7-devel-6.7.0-redos8.0.x86_64.rpm
pangolin-dbms-6.7-libpq-6.7.0-redos8.0.x86_64.rpm
pangolin-dbms-6.7-libpq-dev-6.7.0-redos8.0.x86_64.rpm
pangolin-full-6.7.0-redos8.0.x86_64.rpm
pangolin-manager-6.7-redos8.0.x86_64.rpm
pangolin-manager-dcs-6.7.0-redos8.0.x86_64.rpm
pangolin-orchestrated-6.7.0-redos8.0.x86_64.rpm
pangolin-pooler-6.7-redos8.0.x86_64.rpm
pangolin-pooler-mt-6.7-redos8.0.x86_64.rpm
И то же самое на узле srv3:
[student@srv1 ~]$ ssh srv3 ls -RF Distrib
Distrib:
distributive/
license.json
Distr/distributive:
pangolin-backup-tools-6.7.0-redos8.0.x86_64.rpm
pangolin-copywala-6.7-redos8.0.x86_64.rpm
pangolin-core-6.7.0-redos8.0.x86_64.rpm
pangolin-dbms-6.7-6.7.0-redos8.0.x86_64.rpm
pangolin-dbms-6.7-client-6.7.0-redos8.0.x86_64.rpm
pangolin-dbms-6.7-devel-6.7.0-redos8.0.x86_64.rpm
pangolin-dbms-6.7-libpq-6.7.0-redos8.0.x86_64.rpm
pangolin-dbms-6.7-libpq-dev-6.7.0-redos8.0.x86_64.rpm
pangolin-full-6.7.0-redos8.0.x86_64.rpm
pangolin-manager-6.7-redos8.0.x86_64.rpm
pangolin-manager-dcs-6.7.0-redos8.0.x86_64.rpm
pangolin-orchestrated-6.7.0-redos8.0.x86_64.rpm
pangolin-pooler-6.7-redos8.0.x86_64.rpm
pangolin-pooler-mt-6.7-redos8.0.x86_64.rpm
Установка standalone сервера
Поскольку узлы srv1 и srv2 будут работать в качестве лидера (мастер-сервера) и реплики, на них следует установить серверную и клиентскую часть СУБД:
-
На
srv1:[student@srv1 ~]$ sudo dnf install -y Distr/distributive/{pangolin-dbms-6.7-6.7.0-redos8.0.x86_64,pangolin-dbms-6.7-client-6.7.0-redos8.0.x86_64}.rpmВывод команды:
Updating Subscription Management repositories.redos8.0-for-x86_64-powertools-rpms 8.9 kB/s | 2.6 kB 00:00redos8.0-for-x86_64-baseos-rpms 7.5 kB/s | 2.3 kB 00:00redos8.0-for-x86_64-baseos-debug-rpms 6.5 kB/s | 2.0 kB 00:00redos8.0-for-x86_64-appstream-rpms 10 kB/s | 2.6 kB 00:00redos8.0-for-x86_64-appstream-debug-rpms 6.6 kB/s | 2.0 kB 00:00Dependencies resolved.======================================================================================================================================================================================================Package Architecture Version Repository Size======================================================================================================================================================================================================Installing:pangolin-dbms-6.7 x86_64 6.7.0-redos8.0 @commandline 18 Mpangolin-dbms-6.7-client x86_64 6.7.0-redos8.0 @commandline 2.4 MInstalling dependencies:uuid x86_64 1.6.2-55.sl9.1 SBERTECH_JSC_SberLinux_redos8.0-for-x86_64-appstream-rpms 56 kTransaction Summary======================================================================================================================================================================================================Install 3 PackagesTotal size: 20 MTotal download size: 56 kInstalled size: 96 MDownloading Packages:uuid-1.6.2-55.sl9.1.x86_64.rpm 175 kB/s | 56 kB 00:00------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------Total 174 kB/s | 56 kB 00:00Running transaction checkTransaction check succeeded.Running transaction testTransaction test succeeded.Running transactionPreparing : 1/1Installing : uuid-1.6.2-55.sl9.1.x86_64 1/3Running scriptlet: pangolin-dbms-6.7-6.7.0-redos8.0.x86_64 2/3Installing : pangolin-dbms-6.7-6.7.0-redos8.0.x86_64 2/3Running scriptlet: pangolin-dbms-6.7-6.7.0-redos8.0.x86_64 2/3Config /etc/man_db.conf was updatedRunning scriptlet: pangolin-dbms-6.7-client-6.7.0-redos8.0.x86_64 3/3Installing : pangolin-dbms-6.7-client-6.7.0-redos8.0.x86_64 3/3Running scriptlet: pangolin-dbms-6.7-client-6.7.0-redos8.0.x86_64 3/3Config /etc/man_db.conf was updatedVerifying : uuid-1.6.2-55.sl9.1.x86_64 1/3Verifying : pangolin-dbms-6.7-6.7.0-redos8.0.x86_64 2/3Verifying : pangolin-dbms-6.7-client-6.7.0-redos8.0.x86_64 3/3Installed products updated.Installed:pangolin-dbms-6.7-6.7.0-redos8.0.x86_64 pangolin-dbms-6.7-client-6.7.0-redos8.0.x86_64 uuid-1.6.2-55.sl9.1.x86_64Complete! -
То же самое повторите на
srv2:[student@srv1 ~]$ ssh srv2 sudo dnf install -y Distr/distributive/{pangolin-dbms-6.7-6.7.0-redos8.0.x86_64,pangolin-dbms-6.7-client-6.7.0-redos8.0.x86_64}.rpmВывод команды:
Updating Subscription Management repositories.redos8.0-for-x86_64-powertools-rpms 9.0 kB/s | 2.6 kB 00:00redos8.0-for-x86_64-baseos-rpms 7.6 kB/s | 2.3 kB 00:00redos8.0-for-x86_64-baseos-debug-rpms 6.7 kB/s | 2.0 kB 00:00redos8.0-for-x86_64-appstream-rpms 8.8 kB/s | 2.6 kB 00:00redos8.0-for-x86_64-appstream-debug-rpms 6.6 kB/s | 2.0 kB 00:00Dependencies resolved.===========================================================================================================================Package Arch Version Repository Size===========================================================================================================================Installing:pangolin-dbms-6.7 x86_64 6.7.0-redos8.0 @commandline 18 Mpangolin-dbms-6.7-client x86_64 6.7.0-redos8.0 @commandline 2.4 MInstalling dependencies:uuid x86_64 1.6.2-55.sl9.1 SBERTECH_JSC_SberLinux_redos8.0-for-x86_64-appstream-rpms 56 k
Transaction Summary
Install 3 Packages
Total size: 20 M Total download size: 56 k Installed size: 96 M Downloading Packages: uuid-1.6.2-55.sl9.1.x86_64.rpm 167 kB/s | 56 kB 00:00
Total 166 kB/s | 56 kB 00:00 Running transaction check Transaction check succeeded. Running transaction test Transaction test succeeded. Running transaction Preparing : 1/1 Installing : uuid-1.6.2-55.sl9.1.x86_64 1/3 Running scriptlet: pangolin-dbms-6.7-6.7.0-redos8.0.x86_64 2/3 Installing : pangolin-dbms-6.7-6.7.0-redos8.0.x86_64 2/3 Running scriptlet: pangolin-dbms-6.7-6.7.0-redos8.0.x86_64 2/3 Config /etc/man_db.conf was updated
Running scriptlet: pangolin-dbms-6.7-client-6.7.0-redos8.0.x86_64 3/3 Installing : pangolin-dbms-6.7-client-6.7.0-redos8.0.x86_64 3/3 Running scriptlet: pangolin-dbms-6.7-client-6.7.0-redos8.0.x86_64 3/3 Config /etc/man_db.conf was updated
Verifying : uuid-1.6.2-55.sl9.1.x86_64 1/3 Verifying : pangolin-dbms-6.7-6.7.0-redos8.0.x86_64 2/3 Verifying : pangolin-dbms-6.7-client-6.7.0-redos8.0.x86_64 3/3 Installed products updated.
Installed: pangolin-dbms-6.7-6.7.0-redos8.0.x86_64 pangolin-dbms-6.7-client-6.7.0-redos8.0.x86_64 uuid-1.6.2-55.sl9.1.x86_64
Complete!
:::
### Необходимые каталоги
Теперь создадим каталоги:
- `/pgdata/06/data` — файлы экземпляра (каталог данных кластера баз данных);
- `/pgerrorlogs/06/pangolin-manager` — журнал сообщений Pangolin Manager;
- `/opt/pangolin_license` — каталог для размещения лицензии.
А также сразу установим для них владельца и группу:
- На `srv1`:
```bash:copy-code
[student@srv1 ~]$ sudo mkdir -p /pgdata/06/data /pgerrorlogs/06/pangolin-manager /opt/pangolin_license
[student@srv1 ~]$ sudo chown -R postgres:postgres /pgdata /pgerrorlogs /opt/pangolin_license
[student@srv1 ~]$ sudo ls -ld /pgdata/06/data /pgerrorlogs/06/pangolin-manager /opt/pangolin_license
drwxr-xr-x 2 postgres postgres 4096 Jan 4 21:45 /opt/pangolin_license
drwxr-xr-x 2 postgres postgres 4096 Jan 4 21:45 /pgdata/06/data
drwxr-xr-x 2 postgres postgres 4096 Jan 4 21:45 /pgerrorlogs/06/pangolin-manager
-
На
srv2:[student@srv1 ~]$ ssh srv2 sudo mkdir -p /pgdata/06/data /pgerrorlogs/06/pangolin-manager /opt/pangolin_license[student@srv1 ~]$ ssh srv2 sudo chown -R postgres:postgres /pgdata /pgerrorlogs /opt/pangolin_license[student@srv1 ~]$ ssh srv2 sudo ls -ld /pgdata/06/data /pgerrorlogs/06/pangolin-manager /opt/pangolin_licensedrwxr-xr-x 2 postgres postgres 4096 Jan 4 21:47 /opt/pangolin_licensedrwxr-xr-x 2 postgres postgres 4096 Jan 4 21:47 /pgdata/06/datadrwxr-xr-x 2 postgres postgres 4096 Jan 4 21:47 /pgerrorlogs/06/pangolin-manager
Настройка переменных окружения
Для пользователей student и postgres добавим в файлы профилей .bash_profile переменные окружения, связанные с СУБД и клиентской частью.
На srv1 для пользователя student:
[student@srv1 ~]$ vi ~student/.bash_profile
umask 022
export LD_LIBRARY_PATH=/usr/pangolin/lib
export PG_PLUGINS_PATH=/usr/pangolin/lib
export PGHOME=/usr/pangolin
export PGHOST=srv1
export PGPORT=5433
export PGCLIENTENCODING=UTF8
export CLNAME=clustername
export PGDATA=/pgdata/06/data
export PG_LICENSE_PATH=/opt/pangolin_license/
export LANG=en_US.UTF-8
export LC_ALL="en_US.UTF-8"
export MANPATH=$MANPATH:/usr/pangolin/share/man
export PATH=$PATH:/usr/pangolin/bin
Проверка:
[student@srv1 ~]$ cat .bash_profile
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
umask 022
export LD_LIBRARY_PATH=/usr/pangolin/lib
export PG_PLUGINS_PATH=/usr/pangolin/lib
export PGHOME=/usr/pangolin
export PGHOST=srv1
export PGPORT=5433
export PGCLIENTENCODING=UTF8
export CLNAME=clustername
export PGDATA=/pgdata/06/data
export PG_LICENSE_PATH=/opt/pangolin_license/
export LANG=en_US.UTF-8
export LC_ALL="en_US.UTF-8"
export MANPATH=:/usr/pangolin/share/man
export PATH=$PATH:/usr/pangolin/bin
На srv1 для пользователя postgres после очистки старые данные остались. Удалим их:
[student@srv1 ~]$ sudo rm -rf ~postgres/.bash_profile
Создадим файл профилей .bash_profile:
[student@srv1 ~]$ sudo vi ~postgres/.bash_profile
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
umask 022
export LD_LIBRARY_PATH=/usr/pangolin/lib
export PG_PLUGINS_PATH=/usr/pangolin/lib
export PGHOME=/usr/pangolin
export PGHOST=srv1
export PGPORT=5433
export PGCLIENTENCODING=UTF8
export CLNAME=clustername
export PGDATA=/pgdata/06/data
export PG_LICENSE_PATH=/opt/pangolin_license/
export LANG=en_US.UTF-8
export LC_ALL="en_US.UTF-8"
export MANPATH=$MANPATH:/usr/pangolin/share/man
export PATH=\$PATH:/usr/pangolin/bin
Проверка:
[student@srv1 ~]$ sudo -u postgres cat ~postgres/.bash_profile
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
umask 022
export LD_LIBRARY_PATH=/usr/pangolin/lib
export PG_PLUGINS_PATH=/usr/pangolin/lib
export PGHOME=/usr/pangolin
export PGHOST=srv1
export PGPORT=5433
export PGCLIENTENCODING=UTF8
export CLNAME=clustername
export PGDATA=/pgdata/06/data
export PG_LICENSE_PATH=/opt/pangolin_license/
export LANG=en_US.UTF-8
export LC_ALL="en_US.UTF-8"
export MANPATH=:/usr/pangolin/share/man
export PATH=$PATH:/usr/pangolin/bin
Скопируем с srv1 на srv2 файл профиля пользователя student:
[student@srv1 ~]$ scp .bash_profile srv2:~/
.bash_profile 100% 658 2.2MB/s 00:00
Проверка:
[student@srv1 ~]$ ssh srv2 cat .bash_profile
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
umask 022
export LD_LIBRARY_PATH=/usr/pangolin/lib
export PG_PLUGINS_PATH=/usr/pangolin/lib
export PGHOME=/usr/pangolin
export PGHOST=srv1
export PGPORT=5433
export PGCLIENTENCODING=UTF8
export CLNAME=clustername
export PGDATA=/pgdata/06/data
export PG_LICENSE_PATH=/opt/pangolin_license/
export LANG=en_US.UTF-8
export LC_ALL="en_US.UTF-8"
export MANPATH=:/usr/pangolin/share/man
export PATH=$PATH:/usr/pangolin/bin
С srv1 скопируйте содержимое файла ~postgres/.bash_profile в такой же файл на srv2:
[student@srv1 ~]$ sudo -u postgres cat ~postgres/.bash_profile | ssh srv2 sudo -u postgres tee ~postgres/.bash_profile
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
umask 022
export LD_LIBRARY_PATH=/usr/pangolin/lib
export PG_PLUGINS_PATH=/usr/pangolin/lib
export PGHOME=/usr/pangolin
export PGHOST=srv1
export PGPORT=5433
export PGCLIENTENCODING=UTF8
export CLNAME=clustername
export PGDATA=/pgdata/06/data
export PG_LICENSE_PATH=/opt/pangolin_license/
export LANG=en_US.UTF-8
export LC_ALL="en_US.UTF-8"
export MANPATH=:/usr/pangolin/share/man
export PATH=$PATH:/usr/pangolin/bin
Проверка:
[student@srv1 ~]$ ssh srv2 sudo -u postgres cat ~postgres/.bash_profile
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
umask 022
export LD_LIBRARY_PATH=/usr/pangolin/lib
export PG_PLUGINS_PATH=/usr/pangolin/lib
export PGHOME=/usr/pangolin
export PGHOST=srv1
export PGPORT=5433
export PGCLIENTENCODING=UTF8
export CLNAME=clustername
export PGDATA=/pgdata/06/data
export PG_LICENSE_PATH=/opt/pangolin_license/
export LANG=en_US.UTF-8
export LC_ALL="en_US.UTF-8"
export MANPATH=:/usr/pangolin/share/man
export PATH=$PATH:/usr/pangolin/bin
Лицензия
Файл лицензии должен быть помещен в каталог /opt/pangolin_license/ на узлах srv1 и srv2:
-
На узле
srv1:[student@srv1 ~]$ sudo cp -v Distr/license.json /opt/pangolin_license/'Distr/license.json' -> '/opt/pangolin_license/license.json'[student@srv1 ~]$ sudo chown -c postgres:postgres /opt/pangolin_license/license.jsonchanged ownership of '/opt/pangolin_license/license.json' from root:root to postgres:postgres -
На узле
srv2:[student@srv1 ~]$ sudo -u postgres cat /opt/pangolin_license/license.json | ssh srv2 sudo -u postgres tee /opt/pangolin_license/license.json
Создание каталога данных экземпляра
Поскольку srv1 будет выполнять роль лидера (мастер-сервера), то для запуска СУБД на нем потребуется инициализированный каталог данных.
Проверим наличие каталога и отсутсвие файлов в нем:
[student@srv1 ~]$ sudo su - postgres
[postgres@srv1 ~]$ ls -ld $PGDATA
drwxr-xr-x 2 postgres postgres 4096 Sep 24 21:45 /pgdata/06/data
[postgres@srv1 ~]$ ls -la $PGDATA
total 8
drwxr-xr-x 2 postgres postgres 4096 Sep 24 21:45 .
drwxr-xr-x 3 postgres postgres 4096 Sep 24 21:45 ..
Инициализируем каталог данных:
[postgres@srv1 ~]$ initdb -k
Вывод команды:
The files belonging to this database system will be owned by user "postgres".
This user must also own the server process.
The database cluster will be initialized with locale "en_US.UTF-8".
The default database encoding has accordingly been set to "UTF8".
The default text search configuration will be set to "english".
Data page checksums are enabled.
fixing permissions on existing directory /pgdata/06/data ... ok
creating subdirectories ... ok
selecting dynamic shared memory implementation ... posix
selecting default max_connections ...
"/usr/pangolin-6.7/bin/postgres" --check -F -c log_checkpoints=false -c is_initdb=true -c max_connections=100 -c shared_buffers=1000 -c dynamic_shared_memory_type=posix < "/dev/null" > "/dev/null" 2>&1
100
selecting default shared_buffers ... 128MB
selecting default time zone ... UTC
creating configuration files ... ok
running bootstrap script ... WARNING: 01000: Force disable "enable_vault_params_cache", vault credentials does not exists
LOCATION: check_enable_params_cache, security.c:101
ok
performing post-bootstrap initialization ... WARNING: 01000: Force disable "enable_vault_params_cache", vault credentials does not exists
LOCATION: check_enable_params_cache, security.c:101
ok
syncing data to disk ... ok
initdb: warning: enabling "trust" authentication for local connections
initdb: hint: You can change this by editing pg_hba.conf or using the option -A, or --auth-local and --auth-host, the next time you run initdb.
Success. You can now start the database server using:
pg_ctl -D /pgdata/06/data -l logfile start
Посмотрим, какие права на каталог данных и на файлы в нем установлены при инициализации:
[postgres@srv1 ~]$ ls -ld $PGDATA
drwx------ 23 postgres postgres 4096 Sep 24 12:15 /pgdata/06/data
[postgres@srv1 ~]$ ls -lF $PGDATA
Вывод команды:
total 88
drwx------ 23 postgres postgres 4096 Sep 24 13:44 .
drwxr-xr-x 3 postgres postgres 18 Sep 24 13:16 ..
drwx------ 5 postgres postgres 33 Sep 24 13:44 base
drwx------ 2 postgres postgres 4096 Sep 24 13:44 global
drwx------ 2 postgres postgres 6 Sep 24 13:44 pg_commit_ts
drwx------ 2 postgres postgres 6 Sep 24 13:44 pg_dynshmem
-rw------- 1 postgres postgres 4789 Sep 24 13:44 pg_hba.conf
-rw------- 1 postgres postgres 1636 Sep 24 13:44 pg_ident.conf
drwx------ 4 postgres postgres 68 Sep 24 13:44 pg_logical
drwx------ 4 postgres postgres 36 Sep 24 13:44 pg_multixact
drwx------ 2 postgres postgres 6 Sep 24 13:44 pg_notify
drwx------ 2 postgres postgres 6 Sep 24 13:44 pg_perf_insights
drwx------ 2 postgres postgres 6 Sep 24 13:44 pg_pp_cache
drwx------ 2 postgres postgres 6 Sep 24 13:44 pg_prep_stats
-rw------- 1 postgres postgres 558 Sep 24 13:44 pg_quota.conf
drwx------ 2 postgres postgres 6 Sep 24 13:44 pg_replslot
drwx------ 2 postgres postgres 6 Sep 24 13:44 pg_serial
drwx------ 2 postgres postgres 6 Sep 24 13:44 pg_snapshots
drwx------ 2 postgres postgres 25 Sep 24 13:44 pg_stat
drwx------ 2 postgres postgres 6 Sep 24 13:44 pg_stat_tmp
drwx------ 2 postgres postgres 29 Sep 24 13:44 pg_subtrans
drwx------ 2 postgres postgres 6 Sep 24 13:44 pg_tblspc
drwx------ 2 postgres postgres 6 Sep 24 13:44 pg_twophase
-rw------- 1 postgres postgres 3 Sep 24 13:44 PG_VERSION
drwx------ 3 postgres postgres 60 Sep 24 13:44 pg_wal
drwx------ 2 postgres postgres 29 Sep 24 13:44 pg_xact
-rw------- 1 postgres postgres 88 Sep 24 13:44 postgresql.auto.conf
-rw------- 1 postgres postgres 52980 Sep 24 13:44 postgresql.conf
-rw------- 1 postgres postgres 29 Sep 24 13:44 PRODUCT_VERSION
drwx------ 2 postgres postgres 6 Sep 24 13:44 tracing
Настройка конфигурационных параметров СУБД
Добавим необходимые параметры настройки СУБД в конец файла postgresql.conf:
[postgres@srv1 ~]$ vi $PGDATA/postgresql.conf
# Pangolin conf
listen_addresses = '*'
port = 5433
max_connections = 100
superuser_reserved_connections = 3
enabled_extra_auth_methods = 'peer'
logging_collector = on
log_directory = '/pgerrorlogs/06/'
log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'
psql.save_history = 'on'
Проверка:
[postgres@srv1 ~]$ sed -n '/^# Pangolin conf/,$p' $PGDATA/postgresql.conf
# Pangolin conf
listen_addresses = '*'
port = 5433
max_connections = 100
superuser_reserved_connections = 3
enabled_extra_auth_methods = 'peer'
logging_collector = on
log_directory = '/pgerrorlogs/06/'
log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'
psql.save_history = 'on'
Настройка разрешений в HBA
Переда запуском СУБД необходимо настроить файл HBA (Host Based Authentication).
Полученный после инициализации каталога данных кластера содержит в себе такие настройки:
[postgres@srv1 ~]$ tail -14 $PGDATA/pg_hba.conf
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all trust
# IPv4 local connections:
host all all 127.0.0.1/32 trust
# IPv6 local connections:
host all all ::1/128 trust
# Allow replication connections from localhost, by a user with the
# replication privilege.
local replication all trust
host replication all 127.0.0.1/32 trust
host replication all ::1/128 trust
Заменим настройку trust разрешением подключаться без пароля от имени одноименного пользователя ОС (например, postgres). Такое разрешение дает метод аутентификации peer. Его не следует использовать в промышленной среде, но в процессе ручного развертывания кластера СУБД Pangolin этот метод вполне уместен:
[postgres@srv1 ~]$ sed -i.bak 's/^\(local.*\)trust/\1 peer/' $PGDATA/pg_hba.conf
Теперь заменим все оставшиеся вхождения trust методом аутентификации scram-sha-256:
[postgres@srv1 ~]$ sed -i.bak 's/^\(host.*\)trust/\1 scram-sha-256/' $PGDATA/pg_hba.conf
Посмотрим, что получилось в результате редактирования:
[postgres@srv1 ~]$ tail -14 $PGDATA/pg_hba.conf
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all peer
# IPv4 local connections:
host all all 127.0.0.1/32 scram-sha-256
# IPv6 local connections:
host all all ::1/128 scram-sha-256
# Allow replication connections from localhost, by a user with the
# replication privilege.
local replication all peer
host replication all 127.0.0.1/32 scram-sha-256
host replication all ::1/128 scram-sha-256
Пробный запуск СУБД
Запустим СУБД для проверки конфигурации:
[postgres@srv1 ~]$ pg_ctl start
waiting for server to start.... WARNING: 01000: Force disable "enable_vault_params_cache", vault credentials does not exists
LOCATION: check_enable_params_cache, security.c:101
...
done
server started
[postgres@srv1 ~]$ ps f -C postgres
PID TTY STAT TIME COMMAND
195983 ? Ss 0:00 /usr/pangolin-6.7/bin/postgres
195985 ? Ss 0:00 \_ postgres: logger
195986 ? Ss 0:00 \_ postgres: checkpointer
195987 ? Ss 0:00 \_ postgres: background writer
195989 ? Ss 0:00 \_ postgres: idle sessions terminator
195990 ? Ss 0:00 \_ postgres: walwriter
195991 ? Ss 0:00 \_ postgres: autovacuum launcher
195992 ? Ss 0:00 \_ postgres: autounite launcher
195993 ? Ss 0:00 \_ postgres: integrity check launcher
195994 ? Ss 0:00 \_ postgres: license checker
195995 ? Ss 0:00 \_ postgres: logical replication launcher
Изучим содержимое файла сообщений:
[postgres@srv1 ~]$ cat /pgerrorlogs/06/postgresql-{date}.log
2026-09-24 13:53:06.886 UTC [195983] LOG: product version: Platform V Pangolin DB 6.7.0
2026-09-24 13:53:06.886 UTC [195983] LOG: product build info: build 26 (21:39:41 20.03.2026) commit f28ce0fac88b4ffa22294349d98367d49e608abc
2026-09-24 13:53:06.886 UTC [195983] LOG: starting PostgreSQL 15.15 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 11.5.0 20240719 (Platform V SberLinux 11.5.0-11), 64-bit
2026-09-24 13:53:06.886 UTC [195983] LOG: listening on IPv4 address "0.0.0.0", port 5433
2026-09-24 13:53:06.886 UTC [195983] LOG: listening on IPv6 address "::", port 5433
2026-09-24 13:53:06.890 UTC [195983] LOG: listening on Unix socket "/tmp/.s.PGSQL.5433"
2026-09-24 13:53:06.899 UTC [195988] LOG: database system was shut down at 2026-09-24 13:44:40 UTC
2026-09-24 13:53:06.901 UTC [195989] LOG: idle terminator started
2026-09-24 13:53:06.912 UTC [195983] LOG: database system is ready to accept connections
2026-09-24 13:53:06.914 UTC [195994] LOG: License checker started
2026-09-24 13:53:06.914 UTC [195993] LOG: Start integrity check launcher
2026-09-24 13:53:06.915 UTC [195993] LOG: Start of integrity check
Из приведенного вывода следует, что ошибок в конфигурации нет.
Используя метод аутентификации peer, подключимся к серверу:
[postgres@srv1 ~]$ psql -h '/tmp'
psql (15.5)
Type "help" for help.
postgres=# \conninfo
You are connected to database "postgres" as user "postgres" via socket in "/tmp" at port "5433".
Создадим роль student и назначим ролям пароли:
postgres=# ALTER ROLE postgres PASSWORD 'postgres';
ALTER ROLE
postgres=# CREATE ROLE student LOGIN PASSWORD 'student';
CREATE ROLE
Создадим для student одноименную базу данных:
postgres=# CREATE DATABASE student OWNER student;
CREATE DATABASE
Создадим роль patroni, необходимую для работы кластера:
postgres=# CREATE USER patroni PASSWORD 'patroni' SUPERUSER REPLICATION VALID UNTIL 'infinity' CONNECTION LIMIT 5;
CREATE ROLE
postgres=# \du
List of roles
Role name | Attributes | Member of
-----------|------------------------------------------------------------|-----------
patroni | Superuser, Replication +| {}
| 5 connections +|
| Password valid until infinity |
postgres | Superuser, Create role, Create DB, Replication, Bypass RLS | {}
student | | {}
Проверим содержимое HBA:
postgres=# SELECT * FROM pg_hba_file_rules();
line_number | type | database | user_name | address | netmask | auth_method | options | error
-------------|-------|---------------|-----------|-----------|-----------------------------------------|---------------|---------|-------
89 | local | {all} | {all} | | | peer | |
91 | host | {all} | {all} | 127.0.0.1 | 255.255.255.255 | scram-sha-256 | |
93 | host | {all} | {all} | ::1 | ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff | scram-sha-256 | |
96 | local | {replication} | {all} | | | peer | |
97 | host | {replication} | {all} | 127.0.0.1 | 255.255.255.255 | scram-sha-256 | |
98 | host | {replication} | {all} | ::1 | ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff | scram-sha-256 | |
(6 rows)
Опробуем аутентификацию по паролю:
postgres=# \c student student localhost 5433
Password for user student:
You are now connected to database "student" as user "student" on host "localhost" (address "::1") at port "5433".