Задание 3: Установка и настройка Pangolin Manager
По итогам выполнения данной лабораторной работы вы научитесь устанавливать Pangolin Manager на узлах базы данных, создавать и корректировать основной файл конфигурации postgres.yml, а также запускать службу с проверкой ее статуса. Кроме того, вы сможете настраивать реплику и инициировать процесс потоковой репликации в кластере.
Установка Pangolin Manager
-
Проверьте наличие RPM-пакета Pangolin Manager на узлах
srv1(мастер) иsrv2(реплика). Узелsrv3выполняет роль арбитра, и на нем управление базой данных не запускается:[student@srv1 ~]$ for comp in srv{1,2}; do echo -e "\n${comp}"; ssh $comp ls -l ./Disrt/distributive/pangolin-manager-*.x86_64.rpm; donesrv1-rw-r--r-- 1 student student 10543965 Mar 20 2026 ./Disrt/distributive/pangolin-manager-2.1.13-redos8.0.x86_64.rpm-rw-r--r-- 1 student student 6381 Mar 20 2026 ./Disrt/distributive/pangolin-manager-dcs-6.7.0-redos8.0.x86_64.rpmsrv2-rw-r--r-- 1 student student 10543965 Mar 20 2026 ./Disrt/distributive/pangolin-manager-2.1.13-redos8.0.x86_64.rpm-rw-r--r-- 1 student student 6381 Mar 20 2026 ./Disrt/distributive/pangolin-manager-dcs-6.7.0-redos8.0.x86_64.rpm -
Перед установкой Pangolin Manager необходимо установить rpm-пакет
pangolin-manager-venv-2.1.13-redos8.0.x86_64.rpm. Разархивируйте его:[student@srv1 ~]$ cd Disrt/distributive/3rdparty[student@srv1 3rdparty]$ tar -xf 3rdparty.tar.gz[student@srv1 3rdparty]$ cd pangolin-manager-venv[student@srv1 pangolin-manager-venv]$ ls -latotal 8508-rw-r--r-- 1 student student 8711729 Mar 20 2026 pangolin-manager-venv-2.1.13-redos8.0.x86_64.rpm[student@srv1 pangolin-manager-venv]$ scp pangolin-manager-venv-2.1.13-redos8.0.x86_64.rpm srv2:~/Disrt/distributive -
На узлах
srv1иsrv2установите пакет:[student@srv1 pangolin-manager-venv]$ sudo dnf install -y pangolin-manager-venv-2.1.13-redos8.0.x86_64.rpm[student@srv2 ~]$ sudo dnf install -y Disrt/distributive/pangolin-manager-venv-2.1.13-redos8.0.x86_64.rpm -
Установите пакет Pangolin Manager на оба узла, используя менеджер пакетов
dnf:[student@srv1 ~]$ for comp in srv{1,2}; doecho -e "\n${comp}"ssh $comp sudo dnf install -y ./Disrt/distributive/pangolin-manager-*.rpmdoneОжидаемый результат: Успешная установка одного пакета без ошибок зависимостей.
Настройка Pangolin Manager на узле-мастере (srv1)
Основным файлом конфигурации является /etc/pangolin-manager/postgres.yml. Он определяет все параметры кластера, включая настройки DCS, PostgreSQL, аутентификации и сети.
-
Создайте резервную копию стандартного файла конфигурации:
[student@srv1 ~]$ sudo cp -v /etc/pangolin-manager/postgres.yml{,.bak} -
Подготовьте новый файл конфигурации. Вам необходимо создать файл
/etc/pangolin-manager/postgres.ymlна узлеsrv1со следующим содержимым. Ключевые блоки, требующие вашего внимания и, возможно, изменения, выделены в таблице ниже:Ключевые параметры конфигурации для узла
srv1:Секция Параметр Пример значения для srv1 Назначение Общие scopeclstrИмя кластера. Должно быть одинаковым на всех узлах namesrv1Уникальное имя данного члена кластера restapiconnect_address<IP-Address1>:8008IP-адрес и порт REST API этого узла для связи внутри кластера etcdhosts<IP-Address1>:2379,...Список всех узлов etcd для хранения конфигурации кластера postgresqlconnect_address<IP-Address1>:5433IP-адрес и порт, по которым PostgreSQL на этом узле доступен для подключений data_dir/pgdata/06/dataАбсолютный путь к каталогу данных PostgreSQL Принцип работы – Pangolin Manager, основанный на Patroni, использует распределенное хранилище конфигураций (DCS) для координации состояния кластера. Узел, получивший блокировку в DCS, становится лидером и запускает PostgreSQL в режиме мастера.
/etc/pangolin-manager/postgres.ymlдляsrv1:scope: clstrname: srv1restapi:listen: 0.0.0.0:8008connect_address: <IP-Address1>:8008allowlist: []allowlist_include_members: trueciphers: DEFAULT:!SSLv1:!SSLv2:!SSLv3:!TLSv1:!TLSv1.1verify_client: optionalcertfile: /pg_ssl/server.crtkeyfile: /pg_ssl/server.keycafile: /pg_ssl/root.crtauthentication:username: patroniymlpassword: sample_passwordetcd:hosts: <IP-Address1>:2379,<IP-Address2>:2379,<IP-Address3>:2379protocol: httpscacert: /pg_ssl/root.crtcert: /pg_ssl/patronietcd.crtkey: /pg_ssl/patronietcd.keyusername: patronietcdpassword: patronietcd123log:dir: /pgerrorlogs/06/pangolin-managerfile_name: pangolin-manager-%Y-%m-%d_%H%M%S.logdestination: filefile_mode: 600redirect_min_size: 10postgresql:listen: 0.0.0.0:5433bin_dir: /usr/pangolin/binbin_dir_client: /usr/pangolin-dbms-client/binconnect_address: <IP-Address1>:5433data_dir: /pgdata/06/datacreate_replica_methods:- basebackupbasebackup:format: plainwal-method: fetchauthentication:replication:username: patronidatabase: replicationsslmode: verify-casslkey: /pg_ssl/patroni.keysslcert: /pg_ssl/patroni.crtsslrootcert: /pg_ssl/root.crtsslrootpath: /pg_ssl/root_dirsuperuser:username: patronisslmode: verify-casslkey: /pg_ssl/patroni.keysslcert: /pg_ssl/patroni.crtsslrootcert: /pg_ssl/root.crtsslrootpath: /pg_ssl/root_dirparameters:listen_addresses: 0.0.0.0port: '5433'ssl: onssl_ca_file: /pg_ssl/root.crtssl_cert_file: /pg_ssl/server.crtssl_key_file: /pg_ssl/server.keylog_directory: /pgerrorlogs/06# Другие параметры производительности и безопасностиpg_hba:- hostssl all postgres 127.0.0.1/32 cert- hostssl all postgres <IP-Address1>/32 cert- hostssl all postgres <IP-Address2>/32 cert- hostssl all patroni 127.0.0.1/32 cert- hostssl all patroni <IP-Address1>/32 cert- hostssl all patroni <IP-Address2>/32 cert- hostssl all student 127.0.0.1/32 scram-sha-256- hostssl all student <IP-Address1>/32 scram-sha-256- hostssl all student <IP-Address2>/32 scram-sha-256- hostssl replication patroni 127.0.0.1/32 cert- hostssl replication patroni <IP-Address1>/32 cert- hostssl replication patroni <IP-Address2>/32 certВнимание!В приведенном примере опущены некоторые разделы (
bootstrap, детальныеparameters,tags) для краткости. В реальном сценарии вы можете использовать полный файл конфигурации, как описано в исходном материале, или адаптировать его под свои нужды.
Запуск Pangolin Manager на мастере
-
Включите и запустите службу
pangolin-manager. Она автоматически инициализирует каталог данных PostgreSQL (если он пуст) и запустит мастер:[student@srv1 ~]$ sudo systemctl enable --now pangolin-manager -
Проверьте статус службы. Убедитесь, что она активна (
active (running)), и в логах нет критических ошибок:[student@srv1 ~]$ sudo systemctl status pangolin-manager -
Убедитесь, что процесс PostgreSQL запущен и работает в режиме мастера:
[student@srv1 ~]$ ps f -C postgres[student@srv1 ~]$ psql "password=student" -c "SELECT pg_is_in_recovery();"Ожидаемый результат: Команда
pg_is_in_recoveryдолжна вернутьf(false). -
Проверьте состояние кластера с помощью утилиты командной строки
pangolin-manager-ctl. Она покажет текущего лидера:[student@srv1 ~]$ sudo su - postgres[postgres@srv1 ~]$ /opt/pangolin-manager/bin/pangolin-manager-ctl -c /etc/pangolin-manager/postgres.yml listОжидаемый результат: В выводе будет отображен один узел (
srv1) с рольюLeader.
Настройка реплики и запуск репликации
Перед добавлением реплики кластер должен быть переведен в режим обслуживания, чтобы предотвратить автоматическое переключение ролей во время настройки.
-
Переведите кластер в режим обслуживания (
pause) с мастера:[postgres@srv1 ~]$ /opt/pangolin-manager/bin/pangolin-manager-ctl -c /etc/pangolin-manager/postgres.yml pause -
Скопируйте конфигурационный файл с мастера (
srv1) на реплику (srv2):[student@srv1 ~]$ sudo cat /etc/pangolin-manager/postgres.yml | ssh srv2 sudo tee /etc/pangolin-manager/postgres.yml -
На реплике (
srv2) отредактируйте конфигурационный файл. Вам нужно изменить три ключевых параметра, чтобы они указывали на адреса узлаsrv2:[student@srv1 ~]$ sudo su - postgres[postgres@srv1 ~]$ sed -i.bak \-e 's/name: srv1/name: srv2/' \-e 's/connect_address: <IP-Address1>:8008/connect_address: <IP-Address2>:8008/' \-e 's/connect_address: <IP-Address1>:5433/connect_address: <IP-Address2>:5433/' \/etc/pangolin-manager/postgres.yml -
Подготовьте среду на реплике:
- убедитесь, что каталог данных
/pgdata/06/dataпуст имеет права700для пользователяpostgres. - проверьте наличие лицензии в
/opt/pangolin_license/.
- убедитесь, что каталог данных
-
Верните мастер в рабочий режим (
resume):[postgres@srv1 ~]$ /opt/pangolin-manager/bin/pangolin-manager-ctl -c /etc/pangolin-manager/postgres.yml resume -
Запустите Pangolin Manager на реплике. Сервис определит, что узел
srv2является членом кластераclstr, скачает резервную копию (basebackup) с мастера, восстановит ее и запустит процесс PostgreSQL в режиме горячей реплики.[student@srv2 ~]$ sudo systemctl enable --now pangolin-manager[student@srv2 ~]$ sudo systemctl status pangolin-manager -
Проверьте репликацию:
- на реплике (
srv2) командаSELECT pg_is_in_recovery();должна вернутьt(true). - на мастере (
srv1) проверьте представлениеpg_stat_replication, чтобы убедиться в активности потока WAL.
[student@srv1 ~]$ sudo su - postgres[postgres@srv1 ~]$ psql "sslmode=require sslcert=/pg_ssl/postgres.crt sslkey=/pg_ssl/postgres.key" -c "SELECT application_name, state, sync_state FROM pg_stat_replication;" - на реплике (
-
Проверьте итоговое состояние кластера:
[postgres@srv1 ~]$ /opt/pangolin-manager/bin/pangolin-manager-ctl -c /etc/pangolin-manager/postgres.yml listОжидаемый результат: Вывод покажет два узла:
srv1в ролиLeaderиsrv2в ролиSync Standbyс состояниемstreaming.