Переход на поставку дополнительных компонентов в виде 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/