Перейти к основному содержимому

Задание 1: Ручная установка Pangolin

В этом задании мы изучим план развертывания кластера, выполним установку необходимых пакетов и на их основе настроим standalone сервер.

План развертывания кластера​

В этой теме рассматривается развертывание кластера СУБД Pangolin вручную. Развертывание производится на трех узлах:

  • srv1 — лидер, или, иначе, мастер сервер;
  • srv2 — реплика;
  • srv3 — арбитр.

Реальные кластеры СУБД Pangolin, возможно, используют большее количество узлов. Но, предлагаемая конфигурация вполне удовлетворяет минимальным требованиям отказоустойчивости.

Удаление автоматически развернутого кластера Pangolin​

Виртуальные машины используются те же, что и в теме «Развертывание кластера», рассказывающей об установке СУБД Pangolin с помощью Pangolin Installer.

Кластер СУБД Pangolin, который был развернут в этой теме, удален также посредством Pangolin Installer.

Для удаления развернутого ПО СУБД Pangolin необходимо следующее:

  1. Развернуть виртуальное окружение python3.
  2. Активировать виртуальное окружение.
  3. Запустить 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:00
    redos8.0-for-x86_64-baseos-rpms 7.5 kB/s | 2.3 kB 00:00
    redos8.0-for-x86_64-baseos-debug-rpms 6.5 kB/s | 2.0 kB 00:00
    redos8.0-for-x86_64-appstream-rpms 10 kB/s | 2.6 kB 00:00
    redos8.0-for-x86_64-appstream-debug-rpms 6.6 kB/s | 2.0 kB 00:00
    Dependencies resolved.
    ======================================================================================================================================================================================================
    Package Architecture Version Repository Size
    ======================================================================================================================================================================================================
    Installing:
    pangolin-dbms-6.7 x86_64 6.7.0-redos8.0 @commandline 18 M
    pangolin-dbms-6.7-client x86_64 6.7.0-redos8.0 @commandline 2.4 M
    Installing 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 175 kB/s | 56 kB 00:00
    ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    Total 174 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!
  • То же самое повторите на 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:00
    redos8.0-for-x86_64-baseos-rpms 7.6 kB/s | 2.3 kB 00:00
    redos8.0-for-x86_64-baseos-debug-rpms 6.7 kB/s | 2.0 kB 00:00
    redos8.0-for-x86_64-appstream-rpms 8.8 kB/s | 2.6 kB 00:00
    redos8.0-for-x86_64-appstream-debug-rpms 6.6 kB/s | 2.0 kB 00:00
    Dependencies resolved.
    ===========================================================================================================================
    Package Arch Version Repository Size
    ===========================================================================================================================
    Installing:
    pangolin-dbms-6.7 x86_64 6.7.0-redos8.0 @commandline 18 M
    pangolin-dbms-6.7-client x86_64 6.7.0-redos8.0 @commandline 2.4 M
    Installing 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_license
    drwxr-xr-x 2 postgres postgres 4096 Jan 4 21:47 /opt/pangolin_license
    drwxr-xr-x 2 postgres postgres 4096 Jan 4 21:47 /pgdata/06/data
    drwxr-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.json
    changed 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".

Подведем итоги​

Вопрос 1

Какая команда активирует виртуальное окружение Python для Pangolin Installer?

Вопрос 2

На каких узлах кластера необходимо установить серверную и клиентскую часть СУБД Pangolin?