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

Переход на поставку дополнительных компонентов в виде rpm-пакетов

В рамках перехода на поставку дополнительных компонентов СУБД Pangolin в виде rpm-пакетов, был осуществлен рефакторинг кода скриптов развертывания/обновления.

Исключены:

  • Возможность создания каталога для конфигурационного файла Pangolin Pooler.

  • Старые версии template для manager_backup.

  • Файлы requirements.txt/requirements_altlinux.txt.

  • Параметры пользовательского конфигурационного файла и проверки валидности их значений:

    pip_repository:
    index_url: https://pypi.org/simple/
    trusted_host: pypi.org
    - name: Verify repository URL
    ansible.builtin.assert:
    that: "pip_repository.index_url is regex(valid_url_regex)"
    fail_msg: "{{ message_installer.fails.verify_url.format(pip_repository.index_url, 'pip_repository.index_url') }}"

    - name: Verify pip_repository.trusted_host hostname is valid
    ansible.builtin.assert:
    that: "pip_repository.trusted_host is regex(valid_url_regex)"
    fail_msg: "{{ message_installer.fails.verify_url.format(pip_repository.trusted_host, 'pip_repository.trusted_host') }}"
  • Возможность добавлению в service-файл Pangolin Manager параметра KillMode=process;

  • Создание файлов backup_state, wal_backup_state на стенде с компонентом pangolin-backup-tools.

  • Поддержка confd (Удаление/Откат).

  • Слияние bootstrap-частей конфигурационных файлов после миграции.

  • Возможность изменения конфигурации pg_hba в процессе работы скриптов обновления. Конфигурация после миграции должна остаться исходной:

    - name: disable {{ as_group }} connection in pg_hba
    ansible.builtin.include_role:
    name: common
    tasks_from: update_edit_pghba
    vars:
    _pghba_remove_params: [ '^(.*)host(.*)all(.*){{ as_group }}(.*)0.0.0.0/0(.*)scram-sha-256(.*)$' ]
    _pghba_action_type: 'remove'
    when: inventory_hostname != 'etcd' and action_type == 'install'
  • Изменение пользовательских настроек postgresql_clean_logs в процессе обновления:

     - name: remove cron job
    ansible.builtin.cron:
    name: "a job for postgresql clean logs"
    state: absent
    become_user: postgres
    ignore_errors: yes

    - name: setup deleting and compressing old logs
    ansible.builtin.template:
    src: postgresql_clean_logs.j2
    dest: "{{ global_scripts }}/postgresql_clean_logs"
    owner: postgres
    group: postgres
    mode: '0700'

    - name: create cron job
    ansible.builtin.cron:
    name: "a job for postgresql clean logs"
    special_time: daily
    job: "{{ global_scripts }}/postgresql_clean_logs"
    become_user: postgres
  • Создание sos-файла.

  • Создание variables-файла для работы СРК-службы.

  • control-скрипты.

Изменена логика конфигурирования pg_quote в процессе обновления:

  • Создание и заполнение файла производится только в процессе первичной установки.

  • После обновления данная функциональность не включается, а работает с параметрами по умолчанию. В случае, если на стенде данная функциональность включена, то ее настройка не поменяется, а именно:

    • Значение для параметра postgresql.pg_quote, в случае конфигурации с pangolin-manager, сохранится с исходного стенда.
    • Содержимое файла pg_quote.conf, в случае конфигурации без pangolin-manager, сохранится с исходного стенда.

Доработки скриптов развертывания/обновления:

  • rpm-пакет pangolin-ansible-venv-controller, входящий в состав дистрибутива и располагающийся в 3rdparty, позволяет развернуть виртуальное окружения для корректного запуска скриптов развертывания/обновления в один шаг. В его состав будут входить все необходимые зависимости для запуска ansible-скриптов.

  • Реализована возможность выбирать целевой вариант поиска и использования пакетов для развертывания/обновления. Путь поиска необходимых пакетов, как исходной версии, так и новой, по умолчанию ведет к локальному репозиторию. В пользовательский конфигурационный файл был добавлен параметр pangolin_rpms_path, позволяющий задать путь к каталогу с пакетами на управляющем узле.

  • Добавлен параметр pangolin_block_update, с помощью которого можно контролировать блокировку обновления, если один из исходных пакетов для восстановления найден не был. Значение по умолчанию - true. В случае значения для данного параметра false, автоматический откат будет отключен, а процесс обновления заблокирован не будет:

    pangolin_rpms_path: ""                         # Path to rpm packages new/old version on localhost
    pangolin_block_update: true # Block update if rpm for recovery not exists. If set false, automation recovery will be disabled if rpm current version not exists

Изменение в permission-части

Cкорректированы и приведены к общему виду разрешения (permissions) на рабочие каталоги и файлы компонентов. Общим подходом стал уход от выдачи прав для пользователей other-группы. Добавлено создание дополнительной группы pangolin_users, куда входят пользователь postgres и kmadmin_pg.

По умолчанию uid/gid следующие:

  • postgres - 26;
  • kmadmin_pg - 126;
  • pangolin_users - 226.

Ниже приведена развертка каталогов с правами/владельцем и группой.

Исполняемые файлы:

/usr 

# клиентская часть
/pangolin-dbms-{short_version}-client - 755 root:root
/pangolin-dbms-client/<dir> - 755 root:root
/pangolin-dbms-client/bin/* - 555 root:root
/pangolin-dbms-client/lib/* - 444 root:root
/pangolin-dbms-client/share/* - 444 root:root

# серверная часть
/pangolin-{short_version} - 775 postgres:pangolin_users
/bin - 770 postgres:pangolin_users
/initprotection - 550 kmadmin_pg:kmadmin_pg
/pangolin-linker - 500 root:root
/<остальные файлы> - 500 postgres:postgres
/lib - 770 postgres:pangolin_users
/lib/* - 440 postgres:pangolin_users
/3rdparty - 700 postgres:postgres
/3rdparty/* - 700 postgres:postgres
/share - 705 postgres:postgres
/share/{man,doc} - 705 postgres:postgres
/share/{man,doc}/* - 605 postgres:postgres
/share/*.sample - 600 postgres:postgres
/share/<остальные файлы> - 400 postgres:postgres
/share/<остальные каталоги> - 700 postgres:postgres
/share/<остальные каталоги>/* - 600 postgres:postgres

/opt

# pangolin-diagnostic-tool
/pangolin-diagnostic-tool - 700 postgres:postgres
/pangolin-diagnostic-tool/<dir> - 700 postgres:postgres
/pangolin-diagnostic-tool/lib/* - 400 postgres:postgres
/pangolin-diagnostic-tool/bin/* - 500 postgres:postgres
/pangolin-diagnostic-tool/share/* - 600 postgres:postgres

# pangolin-pgloader
/pangolin-pgloader - 700 postgres:postgres
/pangolin-pgloader/<dir> - 700 postgres:postgres
/pangolin-pgloader/lib/* - 400 postgres:postgres
/pangolin-pgloader/bin/* - 500 postgres:postgres
/pangolin-pgloader/share/* - 600 postgres:postgres

# pangolin-manager
/pangolin-manager - 700 postgres:postgres
/pangolin-manager/<dir> - 700 postgres:postgres
/pangolin-manager/share/* - 600 postgres:postgres
/pangolin-manager/bin/* - 500 postgres:postgres
/pangolin-manager/lib/* - 400 postgres:postgres

# pangolin-pooler
/pangolin-pooler - 700 postgres:postgres
/pangolin-pooler/<dir> - 700 postgres:postgres
/pangolin-pooler/bin/* - 500 postgres:postgres
/pangolin-pooler/lib/* - 400 postgres:postgres
/pangolin-pooler/share/* - 600 postgres:postgres

# pangolin-backup-tools
/pangolin-backup-tools - 700 postgres:postgres
/pangolin-backup-tools/<dir> - 700 postgres:postgres
/pangolin-backup-tools/bin/* - 500 postgres:postgres
/pangolin-backup-tools/lib/* - 400 postgres:postgres
/pangolin-backup-tools/share/* - 600 postgres:postgres

# pangolin_license
/pangolin_license - 770 postgres:pangolin_users
/pangolin_license/* - 440 postgres:pangolin_users

# pangolin-certs-rotate
/pangolin-certs-rotate - 700 postgres:postgres
/pangolin-certs-rotate/<dir> - 700 postgres:postgres
/pangolin-certs-rotate/lib/* - 400 postgres:postgres
/pangolin-certs-rotate/bin/* - 500 postgres:postgres
/pangolin-certs-rotate/share/* - 600 postgres:postgres

# pangolin-auth-reencrypt
/pangolin-auth-reencrypt - 770 postgres:pangolin_users
/pangolin-auth-reencrypt/<dir> - 770 postgres:pangolin_users
/pangolin-auth-reencrypt/lib/* - 440 postgres:pangolin_users
/pangolin-auth-reencrypt/bin/* - 550 postgres:pangolin_users
/pangolin-auth-reencrypt/share/* - 660 postgres:pangolin_users


# pangolin-security-utilities
/pangolin-security-utilities - 700 kmadmin_pg:kmadmin_pg
/pangolin-security-utilities/<dir> - 700 kmadmin_pg:kmadmin_pg
/pangolin-security-utilities/lib/* - 400 kmadmin_pg:kmadmin_pg
/pangolin-security-utilities/bin/* - 500 kmadmin_pg:kmadmin_pg
/pangolin-security-utilities/share/* - 600 kmadmin_pg:kmadmin_pg

# /pangolin-common - начиная с версии 6.3.0 перестает использоваться

Конфигурационные файлы:

/etc

# pangolin-backup-tools
/pangolin-backup-tools - 700 postgres:postgres
/pangolin-backup-tools/* - 600 postgres:postgres

# pangolin-pooler
/pangolin-pooler - 700 postgres:postgres
/pangolin-pooler/* - 600 postgres:postgres

# pangolin-manager
/pangolin-manager - 700 postgres:postgres
/pangolin-manager/* - 600 postgres:postgres

# pangolin-certs-rotate
/pangolin-certs-rotate - 700 postgres:postgres
/pangolin-certs-rotate/* - 600 postgres:postgres

# pangolin-auth-reencrypt
/pangolin-auth-reencrypt - 770 postgres:pangolin_users
/pangolin-auth-reencrypt/enc_util.cfg - 440 postgres:pangolin_users
/pangolin-auth-reencrypt/postgres - 700 postgres:postgres
/pangolin-auth-reencrypt/postgres/enc_params.cfg.postgres - 600 postgres:postgres
/pangolin-auth-reencrypt/kmadmin_pg - 700 kmadmin_pg:kmadmin_pg
/pangolin-auth-reencrypt/kmadmin_pg/enc_params.cfg.kmadmin_pg - 600 kmadmin_pg:kmadmin_pg

# pangolin-security-utilities
/pangolin-security-utilities - 770 kmadmin_pg:pangolin_users
/pangolin-security-utilities/enc_connection_settings.cfg - 640 kmadmin_pg:pangolin_users
/pangolin-security-utilities/enc_connection_settings_certs.cfg - 640 kmadmin_pg:pangolin_users

/etc/pangolin-auth-encryption - 700 postgres:postgres
/etc/pangolin-auth-encryption/enc_util_auth_settings.cfg - 600 postgres:postgres

# /postgres - начиная с версии 6.3.0 перестает использоваться. В процессе обновлении все файлы, находящиеся в данном каталоге, будут перемещены в целевые директории.

Service-файлы:

/usr/lib/systemd/system/*                       - 600 postgres:postgres
/home/postgres/.config/user/systemd/* - 600 postgres:postgres
/home/kmadmin_pg/.config/user/systemd/* - 600 kmadmin_pg:kmadmin_pg

Файлы логов по умолчанию:

/opt
pangolin-pooler/ - 700 postgres:postgres
log/ - 700 postgres:postgres
pangolin-pooler-* - 600 postgres:postgres
pangolin-manager/ - 700 postgres:postgres
log/ - 700 postgres:postgres
pangolin-manager-* - 600 postgres:postgres
pangolin-certs-rotate/ - 700 postgres:postgres
log/ - 700 postgres:postgres
pangolin-certs-rotate-* - 600 postgres:postgres
pangolin-auth-reencrypt/ - 770 postgres:pangolin_users
log/ - 770 postgres:pangolin_users
pangolin-auth-reencrypt-postgres* - 600 postgres:postgres
pangolin-auth-reencrypt-kmadmin_pg* - 600 kmadmin_pg:kmadmin_pg
/var/log
pangolin-pgqd-* - 600 postgres:postgres

# ротация логов
/etc/logrotate.d/
pangolin-auth-reencrypt-postgres - 644 root:root
pangolin-auth-reencrypt-kmadmin_pg - 644 root:root
pangolin-pooler - 644 root:root
pangolin-certs-rotate - 644 root:root
pangolin-manager - 644 root:root
pangolin-dbms - 644 root:root

Изменения в части логирования

Логирование всех компонентов осуществляется в отдельные файлы логов. Формат наименования: pangolin-имя-компонента-%Y-%m-%d_%H%M%S.log.

Развертывание компонента через rpm-пакет происходит следующим образом:

  • По умолчанию запись файла лога будет осуществляться в /opt/pangolin-имя-компонента/log/pangolin-имя-компонента-%Y-%m-%d_%H%M%S.log, за исключением логов pangolin-dbms, которые пишутся в каталог /usr/pangolin-<short_version>/log/pangolin-dbms-%Y-%m-%d_%H%M%S.log.

  • Необходима установка индивидуального пути хранения файлов логов через env. Перед установкой пакета нужно задать путь через параметр LOG_DIR_PANGOLIN_ИМЯ_КОМПОНЕНТА:

    LOG_DIR_PANGOLIN_ИМЯ_КОМПОНЕНТА=/pgerrorslog/pangolin_pooler/

При развертывании компонента скриптами развертывания/обновления по умолчанию запись файла лога происходит в каталог {{ PGLOGS }}/имя-компонента/pangolin-имя-компонента-%Y-%m-%d_%H%M%S.log, за исключением логов pangolin-dbms, которые используют каталог {{ PGLOGS }}/pangolin-имя-компонента-%Y-%m-%d_%H%M%S.log.

PGLOGS - по умолчанию соответствует директории/pgerrorlogs/0<base_version>/. Это необходимо для сохранения обратной совместимости.

В процессе установки пакета будет добавляться конфигурация ротации логов через logrotate для следующих компонентов:

  • pangolin-dbms;
  • pangolin-manager;
  • pangolin-pooler;
  • pangolin-auth-reencrypt;
  • pangolin-certs-rotate.

В рамках обновление компонента настройки логирования не меняются. Файлы сохраняются в исходных каталогах с исходным наименованием.

Настройка ротации логов аудита (для Pangolin DBMS и Pangolin Manager) не производится.

Внимание!

Задать индивидуальное имя файла c логом для компонентов при развертывании через rpm невозможно. Для корректировки имени файла необходимо после развертывания скорректировать путь в конфигурационном файле компонента и файл ротации для компонента в /etc/logrotate.d/имя-компонента.

Изменения в хранении конфигурационного файла, генерируемого утилитой pg_auth_config

Конфигурационный файл enc_util_auth_settings.cfg перенесен из /etc/postgres/ в /etc/pangolin-auth-encryption/ по причине ухода от путей, используемых ванильной версией postgresql. Ввиду этого после обновления путь до этого файла в конфигурационном файле службы перешифрования enc_util.cfg будет изменен.

Изменения в части формирования rpm

rpm/deb упрощает распространение, управление и обновление программного обеспечения. Поставка компонентов в виде rpm/deb-пакетов является предпочтительной. С помощью rpm/deb можно:

  • Использовать стандартные средства управления пакетами (например, yum/dnf или apt-get) для установки, переустановки, удаления, обновления и проверки rpm-пакетов.
  • Осуществлять запросы и проверку пакетов в системе, поскольку rpm поддерживает базу данных установленных пакетов и их файлов.
  • Использовать метаданные для описания пакетов, инструкций по их установке. Каждый rpm/deb-пакет содержит метаданные, описывающие компоненты пакета, версию, выпуск, размер, URL-адрес проекта, инструкции по установке и так далее.
  • Добавлять пакеты в репозитории, что позволяет легко находить и развертывать компоненты. Исходный код дополнительных компонентов СУБД Pangolin упакован в rpm/deb-пакеты. Для каждого компонента имеется файл спецификации.

Изменения в рамках pangolin-dbms и pangolin-dbms-client

Скорректирован путь развертывания бинарных файлов и библиотек компонентов pangolin-dbms и pangolin-dbms-client. Из путей PGHOME/PGHOME_CLIENT исключена патч-версия:

# Исходный путь
/usr/pangolin-<short_version>.<patch>/

# Целевой путь
/usr/pangolin-<short_version>/

Изменения в рамках Pangolin Pooler, Pangolin Manager и pangolin-backup-tools

В логике rpm-пакетов компонентов pangolin-backup-tools, Pangolin Manager и Pangolin Pooler не создается физический каталог /opt/pangolin-Х.Х.Х с версией компонета в названии, а также не генерируются ссылки относительно /opt/pangolin, /opt/pangolin-Х. При развертывании создается только один физический каталог /opt/pangolin-имя-компонента.

Из состава клиентской части СУБД исключена утилита pg_probackup. Теперь она поставляется в составе компонента pangolin-backup-tools. Утилиты расположена после развертывания rpm-пакета по пути /opt/pangolin-backup-tools/bin/.

В скриптах развертывания/обновления изменена логика развертывания. Теперь компонент pangolin-backup-tools при первичном развертывании или при обновлении стенда, на котором этого компонента не было, устанавливается по умолчанию.

Удалены следующие параметры из пользоваетельского конфигурационного файла:

################################################## 4. BACKUP SETTINGS (optional-bank) #################################################```
SRC: false
manage_backup_bin: /opt/omni/lbin
backup_tools_conf_path: /etc/pangolin-backup-tools

Изменения pangolin-certs-rotate

Сервис ротации сертификатов и обновления файлов CRL входит в состав продукта и поставляется в виде rpm в составе дистрибутива в каталоге utilities/.

Бинарные файлы/библиотеки при развертывании rpm-пакета располагаются по следующим путям:

/opt/pangolin-certs-rotate/bin/
/opt/pangolin-certs-rotate/lib/

Сервисный файл компонента при развертывании rpm-пакета располагается по пути:

/usr/lib/systemd/system/pangolin-certs-rotate.service или /home/postgres/.config/systemd/user/pangolin-certs-rotate.service

Конфигурационный файл компонента при развертывании rpm-пакета располагается по пути: /etc/pangolin-certs-rotate/pangolin-certs-rotate.yml.

Файл с PID процесса компонента при развертывании rpm-пакета располагается по следующему пути: /var/run/pangolin-certs-rotate/pangolin-certs-rotate.pid.

Примечание:

Версия компонента привязан к версии продукта.

Изменения pangolin-auth-reencrypt

Cервис для автоматического перешифрования параметров подключения без привлечения администратора базы данных и администратора безопасности, входит в состав продукта, поэтому будет поставляться в виде rpm в составе дистрибутива в каталоге utilities/.

Бинарные файлы и библиотеки при развертывании rpm-пакета располагаются по следующему пути:

/opt/pangolin-auth-reencrypt/bin/

Cервисный файла компонента при развертывании rpm-пакета располагается по пути:

/usr/lib/systemd/system/pangolin-auth-reencrypt@.service или /home/postgres/.config/systemd/user/pangolin-auth-reencrypt.service

Конфигурационный файл компонента при развертывании rpm-пакета располагается по следующему пути:

/etc/pangolin-auth-reencrypt/enc_util.cfg
/etc/pangolin-auth-reencrypt/postgres/enc_params.cfg.postgres
/etc/pangolin-auth-reencrypt/kmadmin_pg/enc_params.cfg.kmadmin_pg

Файл с PID процесса компонента при развертывании rpm-пакета располагается по следующему пути:

/var/run/pangolin-auth-reencrypt/pangolin-auth-reencrypt-postgres.pid
/var/run/pangolin-auth-reencrypt/pangolin-auth-reencrypt-kmadmin_pg.pid

При развертывании конфигурационные файлы, расположенные по старому пути /etc/postgres остаются в исходном состоянии. Скрипты развертывания/обновления или post-скрипты rpm их не изменяют. За исключением enc_util.cfg. В процессе обновления он будет перемещен в целевой каталог.

Изменения pangolin-security-utilities

Данный компонент представляет собой комплекс следующих утилит:

setup_kms_credentials
encrypt_params_file
generate_encryption_key

Данный набор утилит входят в состав продукта, поэтому будет поставляться в виде rpm в составе дистрибутива в каталоге utilities/.

Бинарные файлы и библиотеки при развертывании rpm-пакета располагаются по следующему пути:

/opt/pangolin-security-utilities/bin/

Конфигурационный файл компонента при развертывании rpm-пакета располагается по следующему пути:

/etc/pangolin-security-utilities/enc_connection_settings.cfg   
/etc/pangolin-security-utilities/enc_connection_settings_certs.cfg

Версия компонента привязан к версии продукта.

Ввиду того, что пути расположения файлов подключения к серверам VAULT изменились, после обновления пути до этих файлов будут изменены в конфигурационном файле службы перешифрования enc_util.cfg.

Изменения pangolin-ansible-venv-controller

Набор pip-пакетов для развертывания виртуального окружения, которое необходимо для корректного запуска ansible-скриптов на управляющем узле. Данный компонент не входит в состав продукта, поэтому поставляется в виде rpm в составе дистрибутива в каталоге 3rdparty/.

Список pip-пакетов, которые вошли в состав компонента:

cffi==1.15.0
cryptography==3.3.1
Jinja2==3.0.3
jmespath==0.10.0
MarkupSafe==2.0.1
netaddr==0.7.19
packaging==24.0
pycparser==2.21
pyparsing==3.0.6
PyYAML==6.0
resolvelib==0.5.5
six==1.16.0
ansible==4.10.0

Виртуальное окружение при развертывании rpm располагается по пути /opt/pangolin-ansible-venv-controller/.

Изменения pangolin-ansible-venv-controlled

Набор pip-пакетов для развертывания виртуального окружения, необходимый для корректного запуска ansible-скриптов на управляемом узле. Данный компонент не входит в состав продукта, поэтому поставляется в виде rpm в составе дистрибутива в каталоге 3rdparty/. Изменил свое название с ansible-venv на pangolin-ansible-venv-controlled. Также поменялся способ версионирования. Версия компонента привязана к версии продукта. При развертывании старый пакет ansible-venv будет удален.

Изменения pangolin-pgloader

Утилита для миграции данных из MSSQL в СУБД Pangolin. Данный компонент не входит в состав продукта, поэтому поставляется в виде rpm в составе дистрибутива в каталоге 3rdparty/migration_tools/.

Утилита при развертывании rpm-пакета располагается по пути: /opt/pangolin-pgloader/bin/.

Изменения ora2pg

Утилита для миграции данных из Oracle в Pangolin. Данный компонент не входит в состав продукта, поэтому поставляется в виде бинарных файлов в составе дистрибутива в каталоге 3rdparty/migration_tools/. Для сборки rpm-пакета подготовлен spec-файл. Для настройки данного компонента необходимо воспользоваться инструкцией из официальной документации.

Изменения pangolin-diagnostic-tool

Утилита для сбора диагностической информации об узле СУБД. Данный компонент входит в состав продукта, поэтому будет поставляться в виде rpm в составе дистрибутива в каталоге utilities/.

Утилита при развертывании располагается по пути /opt/pangolin-diagnostic-tool/bin/.

Изменения pangolin-pgsql-http

Расширение для поддержки HTTP-клиента на уровне СУБД, позволяющее обращаться к REST-сервисам посредством SQL-запросов. Данный компонент не входит в состав продукта, поэтому поставляется в виде rpm в составе дистрибутива в каталоге 3rdparty/pgsql_http/. Версия компонента привязана к ванильной версии расширения.

Расположение расширения при развертывании rpm пакета: /usr/pangolin-<short_version>/share/extension/.

Расположение библиотек расширения при развертывании rpm-пакета: /usr/pangolin-<short_version>/lib/.

Изменения pangolin-pg-background

Расширение для управления пользовательскими фоновыми процессами. Данный компонент не входит в состав продукта, поэтому поставляется в виде rpm в составе дистрибутива в каталоге 3rdparty/pg_background/. Версия компонента привязана к ванильной версии расширения.

Расширение при развертывании rpm располагается по пути /usr/pangolin-<short_version>/share/extension/.

Библиотеки расширения располагаются в /usr/pangolin-<short_version>/lib/.

Изменения pangolin-pgq и pangolin-pgq-coop

Расширения для поддержки очередей сообщений со стороны СУБД. Данные компоненты не входят в состав продукта, поэтому поставляются в виде rpm в составе дистрибутива в каталогах 3rdparty/pgq/ и 3rdparty/pgq-coop/. Версии компонентов привязаны к ванильным версиям расширений. Расширения располагаются в /usr/pangolin-<short_version>/share/extension/.

Библиотеки расширений при развертывании rpm располагаются в /usr/pangolin-<short_version>/lib/.

Изменения pangolin-pgqd

Сервис для поддержки очередей сообщений со стороны СУБД. Данный компонент не входит в состав продукта, поэтому поставляется в виде rpm в составе дистрибутива в каталоге 3rdparty/pgqd/. Версия компонента привязана к ванильной версии расширения.

Бинарный файл компонента при развертывании rpm-пакета расположен в /usr/pangolin-<short_version>/bin/.

Сервисный файл компонента расположен по пути /usr/lib/systemd/system/pangolin-pgqd.service или /home/postgres/.config/systemd/user/pangolin-pgqd.service.

Конфигурационный файл расположен в /etc/pangolin-pgqd/pangolin-pgqd.ini.

Расположение файла с PID процесса компонента следующее: /var/run/pangolin-pgqd/pangolin-pgqd.pid.

Изменения pangolin-pldebugger

Расширение, предоставляющее API для выполнения функций с возможностью остановки в заданной точке, пошаговым выполнением и просмотром значений переменных. Расширение интегрировано с решениями от pg_admin и dbeaver (данные утилиты предоставляют графический интерфейс для разработки с использованием возможностей расширения), а также позволяет использовать функции API прямо из psql, поскольку они представляют собой стандартные SQL-функции. Данный компонент не входит в состав продукта, поэтому поставляется в виде rpm в составе дистрибутива в каталоге 3rdparty/pldebugger/. Версия компонента привязана к ванильной версии расширения.

Расширение при развертывании rpm-пакета располагается в /usr/pangolin-<short_version>/share/extension/.

Библиотеки расширения при развертывании находятся по пути: /usr/pangolin-<short_version>/lib/.

Изменения pangolin-pgcopydb

Утилита для автоматизации копирования базы данных на другой сервер. Основным вариантом использования pgcopydb является миграция на новую систему PostgreSQL либо для нового оборудования, новой архитектуры, либо для новой основной версии PostgreSQL. Данный компонент не входит в состав продукта, поэтому поставляется в виде rpm в составе дистрибутива в каталоге 3rdparty/pgcopydb/. Версия компонента привязана к ванильной версии расширения.

Расширение располагается при развертывании по следующему пути: /usr/pangolin-<short_version>/bin/.

Изменения pangolin-pgsql-check

Статический анализатор кода plpgsql для PostgreSQL, предоставляющее набор функций для анализа и профилирования функций и процедур, написанных на языке PL/pgSQL. Данный компонент не входит в состав продукта, поэтому поставляется в виде rpm в составе дистрибутива в каталоге 3rdparty/pgsql_check/. Версия компонента привязан к ванильной версии расширения.

Расположение расширения при развертывании rpm-пакета: /usr/pangolin-<short_version>/share/extension/.

Расположение библиотек расширения при развертывании: /usr/pangolin-<short_version>/lib/.

Изменения pangolin-postgis

Расширение, добавляющее поддержку хранения, индексирования и запроса геопространственных данных. Данный компонент не входит в состав продукта, поэтому поставляется в виде rpm в составе дистрибутива в каталоге 3rdparty/postgis/. Версия компонента привязана к ванильной версии расширения.

Расположение расширения при развертывании: /usr/pangolin-<short_version>/share/extension/.

Расположение сторонних библиотек расширения: /usr/local/lib.

Изменения pangolin-pgrouting

Расширение, добавляющее поддержку геопространственной маршрутизации и другие функции сетевого анализа. Данный компонент не входит в состав продукта, поэтому поставляется в виде rpm в составе дистрибутива в каталоге 3rdparty/pgrouting/. Версия компонента привязана к ванильной версии расширения.

Расположение расширения при развертывании rpm-пакета: /usr/pangolin-<short_version>/share/extension/.

Расположение библиотек расширения: /usr/pangolin-<short_version>/lib/.

Разделение клиентской и серверной частей DBMS в отдельные RPM-пакеты

В СУБД Pangolin RPM-пакет разделен на две независимые части — клиентскую и серверную, обе из которых доступны пользователю после установки. Также пользователю доступна возможность независимого развертывания клиентской части с удаленным доступом к серверу. Такое разделение упрощает процессы обновления и модификации СУБД Pangolin.

Состав клиентского RPM-пакета

В состав пакета включены (перенесены из серверной части) следующие утилиты, а также файлы документации и локали, соответствующие им:

  • clusterdb;
  • createdb;
  • createuser;
  • dropdb;
  • dropuser;
  • pangolin-linker;
  • pg_amcheck;
  • pg_basebackup;
  • pgbench;
  • pg_dump;
  • pg_dumpall;
  • pg_isready;
  • pg_probackup;
  • pg_receivewal;
  • pg_recvlogical;
  • pg_restore;
  • pg_verifybackup;
  • psql;
  • reindexdb;
  • vacuumdb.

libpq

Примечание:

libpq — это интерфейс СУБД Pangolin для программирования приложений на языке C. Библиотека содержит набор функций, используя которые клиентские программы могут передавать запросы серверу СУБД Pangolin и принимать результаты этих запросов. Клиентские программы должны использовать для определения API-функций заголовочный файл libpq.h и должны компоноваться с библиотекой libpq.

В состав клиентского rpm-пакета включен libpq.h:

/usr/pangolin-dbms-libpq-<версия>/
└── include
└── libpq.h

1 directories, 1 files

Описание решения и ограничения

Имя серверного rpm-пакета изменено с platform-v-pangolin-dbms-<версия>.00-rhel8.9.x86_64.rpm на pangolin-dbms-<версия>-rhel8.9.x86_64.rpm. Добавление суффикса -major_ver.minor_ver к имени пакета позволяет разворачивать пакет с СУБД рядом с его предыдущей версией, в том случае, если у этой версии суффикс -major_ver.minor_ver отличается (изменения, требующие миграции данных при обновлении СУБД могут быть только при изменении либо минорной, либо мажорной версии СУБД).

Имя клиентского rpm-пакета - pangolin-dbms-6.5.0-client-<версия>-rhel8.9.x86_64.rpm.

После развертывания все пользователи ОС получают возможность запуска клиентской части СУБД независимо от расположения сервера БД:

  • содержимое /usr/pangolin-dbms-client-{full_dbms_ver}/bin получает права доступа 0755;
  • остальное содержимое в /usr/pangolin-dbms-client-{full_dbms_ver}/ получает права доступа 0444;
  • владельцем директории /usr/pangolin-dbms-client-{full_dbms_ver}/ и ее содержимого является root.

Для корректной работы Pangolin Manager c клиентской частью СУБД:

  • в unit-файл pangolin-manager.service службы systemd была добавлена новая переменная окружения PG_CLIENT_PLUGINS_PATH=/usr/pangolin-dbms-client/lib;
  • в конфигурационный файл Pangolin Manager postgres.yml был добавлен новый параметр bin_dir_client, в котором указывается путь до исполняемых файлов клиентской части СУБД.

Так как утилита pg_upgrade использует одновременно утилиты как из серверной, так и из клиентской части для ее запуска было добавлено два дополнительных ключа:

  • --old-bindirclient - путь к исполняемым файлам клиентской части обновляемой версии (по умолчанию параметру присваивается значение из ключа -b);
  • --new-bindirclient - путь к исполняемым файлам клиентской части новой версии (по умолчанию параметру присваивается значение из ключа ).

Для запуска (после установки в ОС rpm/deb-пакета) утилиты из клиентской части СУБД необходимо либо указать полный путь до утилиты, например, /usr/pangolin-dbms-client/bin/psql, либо использовать psql в командной строке.

Запуск возможен из-под любого пользователя ОС. Передавать дополнительно какие-либо environment-переменные (например, LD_LIBRARY_PATH или PG_PLUGINS_PATH) не нужно.

Имеются следующие ограничения:

  • клиентская часть будет разворачиваться в отдельную директорию /usr/pangolin-dbms-client-{full_dbms_ver}, отличную от директории развертывания серверной части;

  • при развертывании rpm-пакета автоматически будут создаваться следующие символические ссылки:

    • /usr/pangolin-dbms-client → /usr/pangolin-dbms-client-{full_dbms_ver};
    • /usr/pangolin-dbms-client-{major_dbms_ver} → /usr/pangolin-dbms-client-{full_dbms_ver}.
  • утилиты, перенесенные в клиентскую часть (за исключением pangolin-linker) и указанные в /usr/pangolin-dbms-client/bin не должны дублироваться в /usr/pangolin/bin;

  • при развертывании СУБД с помощью скриптов автоматизации клиентская часть устанавливается автоматически на той же машине, что и серверная;

  • утилита pg_verifybackup, входящая в состав клиентской части СУБД Pangolin, в случае развертывания последней на отдельном от серверной части узле, должна запускаться с ключом -n/--no-parse-wal.