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

Задание 3: Установка и настройка Pangolin Manager

По итогам выполнения данной лабораторной работы вы научитесь устанавливать Pangolin Manager на узлах базы данных, создавать и корректировать основной файл конфигурации postgres.yml, а также запускать службу с проверкой ее статуса. Кроме того, вы сможете настраивать реплику и инициировать процесс потоковой репликации в кластере.

Установка Pangolin Manager​

  1. Проверьте наличие 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; done
    srv1
    -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

    srv2
    -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
  2. Перед установкой 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 -la
    total 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
  3. На узлах 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
  4. Установите пакет Pangolin Manager на оба узла, используя менеджер пакетов dnf:

    [student@srv1 ~]$ for comp in srv{1,2}; do
    echo -e "\n${comp}"
    ssh $comp sudo dnf install -y ./Disrt/distributive/pangolin-manager-*.rpm
    done

    Ожидаемый результат: Успешная установка одного пакета без ошибок зависимостей.

Настройка Pangolin Manager на узле-мастере (srv1)​

Основным файлом конфигурации является /etc/pangolin-manager/postgres.yml. Он определяет все параметры кластера, включая настройки DCS, PostgreSQL, аутентификации и сети.

  1. Создайте резервную копию стандартного файла конфигурации:

    [student@srv1 ~]$ sudo cp -v /etc/pangolin-manager/postgres.yml{,.bak}
  2. Подготовьте новый файл конфигурации. Вам необходимо создать файл /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: clstr
    name: srv1

    restapi:
    listen: 0.0.0.0:8008
    connect_address: <IP-Address1>:8008
    allowlist: []
    allowlist_include_members: true
    ciphers: DEFAULT:!SSLv1:!SSLv2:!SSLv3:!TLSv1:!TLSv1.1
    verify_client: optional
    certfile: /pg_ssl/server.crt
    keyfile: /pg_ssl/server.key
    cafile: /pg_ssl/root.crt
    authentication:
    username: patroniyml
    password: sample_password

    etcd:
    hosts: <IP-Address1>:2379,<IP-Address2>:2379,<IP-Address3>:2379
    protocol: https
    cacert: /pg_ssl/root.crt
    cert: /pg_ssl/patronietcd.crt
    key: /pg_ssl/patronietcd.key
    username: patronietcd
    password: patronietcd123

    log:
    dir: /pgerrorlogs/06/pangolin-manager
    file_name: pangolin-manager-%Y-%m-%d_%H%M%S.log
    destination: file
    file_mode: 600
    redirect_min_size: 10

    postgresql:
    listen: 0.0.0.0:5433
    bin_dir: /usr/pangolin/bin
    bin_dir_client: /usr/pangolin-dbms-client/bin
    connect_address: <IP-Address1>:5433
    data_dir: /pgdata/06/data
    create_replica_methods:
    - basebackup
    basebackup:
    format: plain
    wal-method: fetch
    authentication:
    replication:
    username: patroni
    database: replication
    sslmode: verify-ca
    sslkey: /pg_ssl/patroni.key
    sslcert: /pg_ssl/patroni.crt
    sslrootcert: /pg_ssl/root.crt
    sslrootpath: /pg_ssl/root_dir
    superuser:
    username: patroni
    sslmode: verify-ca
    sslkey: /pg_ssl/patroni.key
    sslcert: /pg_ssl/patroni.crt
    sslrootcert: /pg_ssl/root.crt
    sslrootpath: /pg_ssl/root_dir
    parameters:
    listen_addresses: 0.0.0.0
    port: '5433'
    ssl: on
    ssl_ca_file: /pg_ssl/root.crt
    ssl_cert_file: /pg_ssl/server.crt
    ssl_key_file: /pg_ssl/server.key
    log_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 на мастере​

  1. Включите и запустите службу pangolin-manager. Она автоматически инициализирует каталог данных PostgreSQL (если он пуст) и запустит мастер:

    [student@srv1 ~]$ sudo systemctl enable --now pangolin-manager
  2. Проверьте статус службы. Убедитесь, что она активна (active (running)), и в логах нет критических ошибок:

    [student@srv1 ~]$ sudo systemctl status pangolin-manager
  3. Убедитесь, что процесс PostgreSQL запущен и работает в режиме мастера:

    [student@srv1 ~]$ ps f -C postgres
    [student@srv1 ~]$ psql "password=student" -c "SELECT pg_is_in_recovery();"

    Ожидаемый результат: Команда pg_is_in_recovery должна вернуть f (false).

  4. Проверьте состояние кластера с помощью утилиты командной строки 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.

Настройка реплики и запуск репликации​

Перед добавлением реплики кластер должен быть переведен в режим обслуживания, чтобы предотвратить автоматическое переключение ролей во время настройки.

  1. Переведите кластер в режим обслуживания (pause) с мастера:

    [postgres@srv1 ~]$ /opt/pangolin-manager/bin/pangolin-manager-ctl -c /etc/pangolin-manager/postgres.yml pause
  2. Скопируйте конфигурационный файл с мастера (srv1) на реплику (srv2):

    [student@srv1 ~]$ sudo cat /etc/pangolin-manager/postgres.yml | ssh srv2 sudo tee /etc/pangolin-manager/postgres.yml
  3. На реплике (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
  4. Подготовьте среду на реплике:

    • убедитесь, что каталог данных /pgdata/06/data пуст имеет права 700 для пользователя postgres.
    • проверьте наличие лицензии в /opt/pangolin_license/.
  5. Верните мастер в рабочий режим (resume):

    [postgres@srv1 ~]$ /opt/pangolin-manager/bin/pangolin-manager-ctl -c /etc/pangolin-manager/postgres.yml resume
  6. Запустите Pangolin Manager на реплике. Сервис определит, что узел srv2 является членом кластера clstr, скачает резервную копию (basebackup) с мастера, восстановит ее и запустит процесс PostgreSQL в режиме горячей реплики.

    [student@srv2 ~]$ sudo systemctl enable --now pangolin-manager
    [student@srv2 ~]$ sudo systemctl status pangolin-manager
  7. Проверьте репликацию:

    • на реплике (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;"
  8. Проверьте итоговое состояние кластера:

    [postgres@srv1 ~]$ /opt/pangolin-manager/bin/pangolin-manager-ctl -c /etc/pangolin-manager/postgres.yml list

    Ожидаемый результат: Вывод покажет два узла: srv1 в роли Leader и srv2 в роли Sync Standby с состоянием streaming.

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

Вопрос 1

Вопрос 1: В какой секции основного файла конфигурации Pangolin Manager находится параметр настройки IP адреса и TCP порта для подключения клиентов к Pangolin Manager?

Вопрос 2

Вопрос 2: Какой параметр настройки в файле конфигурации Pangolin Manager задает уникальное имя узла кластера?