Установка#
Pangolin — система управления базами данных, основанная на PostgreSQL. В данном руководстве описываются аспекты Pangolin, связанные с установкой системы.
Документ предназначен для администраторов и специалистов по безопасности, отвечающих за установку и обновление продукта.
Примечание:
Перед прочтением документа рекомендуется ознакомиться с используемыми терминами и определениями.
Если FQDN (Fully Qualified Domain Name) каждого участника кластера в DNS не определены, добавьте их в
/etc/hostsв форматеip fqdn(например:<IP-адрес> server.domain.ru) на каждом сервере. Это необходимо для создания arbiter-кластера.При использовании на серверах межсетевого экрана необходимо обеспечить сетевую связность по используемым портам.
Нельзя менять в
inventoryимена узлов (master,replica,arbiter). В блокеarbiter_nodesуказываются серверы, которые только участвуют в кластере etcd или Pangolin DCS, но не являются master или replica.Перед запуском скрипта инсталляции добавьте в файлы
sudoercосновного узла, реплики и арбитра строкуuser_ansible ALL=(ALL:ALL) NOPASSWD: ALL.
Состав дистрибутива#
Единый дистрибутив PSQ-\<версия Pangolin\>-distrib.tar.gz содержит все перечисленные ниже компоненты дистрибутива для запуска установки/обновления:
Элемент дистрибутива |
Описание |
|---|---|
|
Rpm/Deb пакет СУБД Pangolin с серверной частью |
|
Rpm/Deb пакет СУБД Pangolin с клиентской частью |
|
Rpm/Deb пакет с libpq частью СУБД |
|
Rpm/Deb пакет с libpq develop частью СУБД |
|
Rpm/Deb пакет Pangolin Pooler |
|
Rpm/Deb пакет Pangolin Manager |
|
Rpm/Deb пакет Pangolin Backup Tools |
Папка |
Содержит ПО с вирусными лицензиями |
|
Расширение, которое преобразует Postgres в распределенную базу данных для высокой производительности в любом масштабе. Rpm/Deb пакет компонента |
|
Запуск команд в фоновом режиме. Исходный код компонента |
|
Запуск команд в фоновом режиме. Rpm/Deb пакет компонента |
|
Утилита миграции данных из oracle в PostgreSQL в бинарном виде. Прилагается spec-файл для последующей сборки на стенде клиента при необходимости |
|
Утилита миграции данных из MySQL, SQLite и SQL Server. Rpm/Deb пакет компонента |
|
Набор pip-пакетов для развертывания виртуального окружения, необходимый для корректного запуска ansible-скриптов на управляемом узле. Rpm/Deb пакет компонента |
|
Набор pip-пакетов для развертывания виртуального окружения, необходимый для корректного запуска ansible-скриптов на управляющем узле. Rpm/Deb пакет компонента |
|
Расширение для поддержки http-клиента на уровне СУБД, позволяющее обращаться к REST-сервисам посредством SQL-запросов. Rpm/Deb пакет компонента |
|
Расширение для поддержки очередей сообщений со стороны СУБД. Rpm/Deb пакет компонента |
|
Расширение для поддержки очередей сообщений со стороны СУБД. Rpm/Deb пакет компонента |
|
Сервис для поддержки очередей сообщений со стороны СУБД. Rpm/Deb пакет компонента |
|
Расширение, предоставляющее API для выполнения функций с возможностью остановки в заданной точке, пошаговым выполнением и просмотром значений переменных. Rpm/Deb пакет компонента |
|
Утилита для автоматизации копирования базы данных на другой сервер. Исходный код компонента |
|
Утилита для автоматизации копирования базы данных на другой сервер. Rpm/Deb пакет компонента |
|
Статический анализатор кода |
|
Утилита для реорганизации данных в таблицах и перестроения индексов для возврата дискового пространства без влияния на производительность базы данных… Rpm/Deb пакет компонента |
|
Расширение, добавляющее поддержку геопространственной маршрутизации и другие функции сетевого анализа. Исходный код компонента |
|
Расширение, добавляющее поддержку геопространственной маршрутизации и другие функции сетевого анализа. Rpm/Deb пакет компонента |
|
Добавляет поддержку географических объектов. Исходный код компонента |
|
Добавляет поддержку географических объектов. Rpm/Deb пакет компонента |
|
Библиотека структур данных и алгоритмов вычислительной геометрии. Исходный код компонента |
|
Библиотека для чтения и записи растровых и векторных геопространственных форматов данных. Исходный код компонента |
|
Библиотека для вычислительной геометрии с акцентом на алгоритмы, используемые в программном обеспечении географических информационных систем (ГИС). Исходный код компонента |
|
Библиотека для преобразования картографических проекций. Исходный код компонента |
|
Библиотека-оболочка для CGAL, предназначенная для поддержки стандартов ISO 191007:2013 и OGC Simple Features для 3D-операций. Исходный код компонента |
Папка |
Содержит документацию к продукту СУБД Pangolin |
Папка |
Содержит шаблоны лицензий компонентов |
Папка |
Содержит инструменты развертывания и инструменты обновления |
|
Конфигурационный файл для работы Ansible |
|
Подключаемый модуль Ansible для реализации индикатора выполнения |
|
collection-скрипты для ansible |
|
Библиотека libkms_substitute_plugin.so |
|
Групповые переменные Ansible |
|
Инвентарные файлы Ansible |
|
Схема запуска очистки виртуальной машины |
|
Схема запуска различных схем развертывания |
|
Схема запуска мажорного обновления |
|
Схема запуска минорного обновления |
|
Схема запуска разведчик перед обновлением |
|
Схема запуска для определения типа обновления для установки |
|
Версия Pangolin |
|
Скрипты ролевой модели |
|
Набор шаблоны конфигурационных файлов |
|
Набор утилит для корректной работы скриптов развертывания/обновления |
|
Набор пакетов для установки отладочных символов, собранных для основных модулей |
|
Набор пакетов для установки отладочных символов, собранных для утилит |
|
Набор скриптов по автоматической настройки СЗИ на стенде или развертывание ролевой модели |
Папка |
Расширение для работы с временными рядами |
|
Расширение для работы с временными рядами. Rpm/Deb пакет компонента |
Папка |
Содержит различные утилиты |
|
Сервис ротации сертификатов. Rpm/Deb пакет компонента |
|
Cервис для автоматического перешифрования параметров подключения. Rpm/Deb пакет компонента |
|
Утилита формирования диагностического отчета. Rpm/Deb пакет компонента |
|
Утилиты для настройки защиты администратора, TDE и безопасной конфигурации. Rpm/Deb пакет компонента |
Диаграмма процесса развертывания Pangolin#
Внимание!
В установке standalone-версии продукта участвуют две машины. Первая – откуда производится запуск ansible-установщика, вторая – целевая, куда разворачивается продукт.
Диаграмма процесса развертывания Pangolin:

Выбор способа установки#
В зависимости от способа развертывания сервиса воспользуйтесь одной из инструкций:
Перед началом установки сформируйте единый дистрибутив Pangolin из zip-пакета:
Получите архив zip-пакета и выполните команду распаковки:
unzip -q <имя zip-пакета>.zipПерейдите в каталог с распакованным zip-пакетом и выполните запуск скрипта по формированию единого дистрибутива:
sh PSQ-<version>-unpacker-distrib.sh
Результатом выполнения будет единый дистрибутив в формате tar.gz (пример: PSQ-<version>-distrib.tar.gz), предназначенный для установки Pangolin.
Подготовка окружения#
Рекомендуется запускать установку продукта Pangolin в виртуальной среде Python.
Для этого необходимо выполнить установку пакета pangolin-ansible-venv-controller на управляющем хосте, который поставляется в составе дистрибутива:
Внимание!
При установке на ОС Altlinux использовать пакетный менеджер - apt-get. При установке на ОС Astra использовать пакетный менеджер - apt. На других ОС использовать dnf или yum.
sudo пакетный_менеджер -y install pangolin-ansible-venv-controller
Настройка скриптов автоматизации#
Для корректной работы скриптов автоматизации необходимо, чтобы на целевых узлах (master/replica/arbiter) у скриптов автоматизации была возможность доступа к rpm/deb-пакетам каждого участвующего в обновлении или первичном развертывании компонента. Для организации данного доступа возможны несколько вариантов настройки скриптов автоматизации перед их использованием (способы друг друга взаимоисключают).
Первый вариант (не целевой, по умолчанию отключен)#
Скрипты могут получить доступ к пакетам через ключ/переменную pangolin_rpms_path, если пользователь самостоятельно скопирует все rpm/deb-пакеты из дистрибутива в заданную директорию на хост, с которого запускаются сами скрипты, и укажет путь до нее, используя pangolin_rpms_path в пользовательском конфигурационном файле. По умолчанию pangolin_rpms_path не используется, для его использования необходимо в пользовательском конфигурационном файле указать путь до директории со всеми rpm/deb-пакетами.
Второй вариант (используется по умолчанию)#
Скрипты автоматизации ищут все необходимые для своей работы rpm/deb-пакеты в linux-репозиторях ОС на узлах master/replica/arbiter. Предполагается, что пользователь или администратор ОС может сам настраивать необходимые ему репозитории, а также отслеживать их актуальность и работоспособность. Но в случае, если скрипты все же не находят необходимые пакеты в общих linux-репозиториях, происходит настройка на целевых узлах локального репозитория Pangolin, который входит в состав дистрибутива начиная с версии 6.4.1. Предусмотрены сценарии:
Первичное развертывание:
Локальный репозиторий автоматически извлекается из дистрибутива на узле, с которого запускаются скрипты, и копируется на узлы master/replica/arbiter.
Происходит его регистрация в системе.
После развертывания репозиторий остается на хостах. Одним из вариантов его дальнейшего использования может быть откат версий компонент к их первоначальным значениям в случае ошибки при работе сценария обновления СУБД и компонент на новую версию.
Обновление версий СУБД и компонент. В этом случае алгоритм такой же как и при первичном развертывании.
Примечание:
В случае работы сценария разведки обновления, если скрипты не могут найти какой-либо пакет, то пользователю будет выведено неблокирующее сообщение о том, что при запуске сценария обновления, ввиду отсутствия необходимых пакетов на целевых хостах, будет автоматически развернут и настроен локальный репозиторий.
Особенности работы с ОС Linux#
СУБД Pangolin предусматривает работу с процедурными языками
tclиperl, однако пакеты для данных языков не устанавливаются по умолчанию при установке. Для работы с этим процедурными языками необходимо установить языковые пакеты вручную и включить расширенияpltcl,pltcluдляtclиplperlдляperlсоответственно.Для полноценной работы утилиты
pgcompacttableв версии 6.4.0 необходимо установить вручную пакеты:perl-Time-HiRes,perl-DBI,perl-DBD-Pg.В СУБД Pangolin версии 6.4.0 (ФСТЭК) Sberlinux 9 не поддерживает локали, отличные от русской и английской (в связи с отсутствием пакета
glibc-langpack-*).В СУБД Pangolin версии 6.4.0 (ФСТЭК) отсутствует возможность использования
etcdпри построении кластера, в связи с отсутствием пакетаetcdв репозиториях.
Ручная установка Pangolin#
Внимание!
При ручной установке не будут настроены различные параметры, в том числе присущие только Pangolin:
настройки конфигурационных файлов (
postgresql.conf,pg_hba.conf);настройки кластерной конфигурации;
будут отсутствовать компоненты Pangolin (etcd, Pangolin Manager, Pangolin Pooler, и другие);
настройки ролевой модели;
настройки расширений;
настройки ротации журналов;
и другие.
Примечание:
Для развертывания СУБД Pangolin на окружении 1С выполните шаги с пометкой «для окружения 1С», вместо «обычное окружение».
Установка на ОС «Platform V SberLinux OS Server 8.8»#
Примечание:
При выполнении нижеперечисленных команд необходимо отредактировать пути к файлам.
Создайте директорию с дистрибутивом Pangolin (в каталоге, который доступен для чтения для всех пользователей ОС, например в каталоге
/tmp):mkdir distribПоместите дистрибутив Pangolin в директорию
distrib(отредактируйте команду в соответствии с местонахождением директорииdistribи дистрибутиваinstaller_rhel87-D-<версия Pangolin>-distrib.zip):mv /путь к дистрибутиву/installer_sberlinux88-D-<версия Pangolin>-distrib.zip /путь к директории/distrib/Перейдите в директорию
distribи распакуйте дистрибутив Pangolin:cd /путь к директории/distrib/ unzip installer_sberlinux88-D-<версия Pangolin>-distrib.zip unzip owned-distrib.zip tar -xvf owned-distrib.tar.gzЛибо найдите пакеты
pangolin-dbms-<версия dbms>-<version>-sberlinux8.8.x86_64.rpm,pangolin-dbms-<версия dbms client>-client-<version>-sberlinux8.8.x86_64.rpmв архиве самостоятельно:installer_sberlinux88-D-<версия Pangolin>-distrib.zip/owned-distrib.zip/owned-distrib.tar.gz/pangolin-dbms-<версия dbms>-<версия Pangolin>-sberlinux8.8.x86_64.rpm installer_sberlinux88-D-<версия Pangolin>-distrib.zip/owned-distrib.zip/owned-distrib.tar.gz/pangolin-dbms-<версия dbms client>-client-<версия Pangolin>-sberlinux8.8.x86_64.rpmУстановите пакеты
pangolin-dbms-<версия dbms>-<версия Pangolin>-sberlinux8.8.x86_64.rpm,pangolin-dbms-<версия dbms client>-client-<версия Pangolin>-sberlinux8.8.x86_64.rpm:sudo dnf install /полный_путь_до_пакета/distrib/pangolin-dbms-<версия dbms>-<версия Pangolin>-sberlinux8.8.x86_64.rpm sudo dnf install /полный_путь_до_пакета/distrib/pangolin-dbms-<версия dbms client>-client-<версия Pangolin>-sberlinux8.8.x86_64.rpmСоздайте директорию
$PGDATA,/pgerrorlogsи/opt/pangolin_license:sudo mkdir -p /pgdata/06/ sudo chown -R postgres:postgres /pgdata/06/ sudo mkdir -p /pgerrorlogs/06/ sudo chown postgres:postgres /pgerrorlogs/06/ sudo mkdir -p /opt/pangolin_license/ sudo chown postgres:postgres /opt/pangolin_license/Добавьте файл с лицензией
license.jsonв папку/opt/pangolin_license/с правамиpostgres:postgres:sudo mv /путь_до_файла/license.json /opt/pangolin_license/ sudo chown postgres:postgres /opt/pangolin_license/license.jsonПереключитесь на пользователя
postgres:sudo su - postgresОткройте файл
.bash_profileпри помощи текстового редактора и добавьте строку окружения (в примерах используются текстовые редакторы vi и nano, вы можете повторить все действия, описанные ниже, либо можете использовать удобный вам текстовый редактор):Открытие файла
.bash_profileпри помощи текстового редактора vi:vim ~/.bash_profileДля редактирования файла в текстовом редакторе vi опуститесь в конец файла и нажмите клавишу i для перехода в режим редактирования, затем вставьте (правой кнопкой мыши) команды:
umask 022 export LD_LIBRARY_PATH=/usr/pangolin-<версия Pangolin>/lib export PATH=$PATH:/usr/pangolin-<версия Pangolin>/bin export PG_PLUGINS_PATH=/usr/pangolin-<версия Pangolin>/lib export PGHOME=/usr/pangolin-<версия Pangolin> export PGDATABASE=postgres export PGUSER=postgres export PGHOST=127.0.0.1 export PGPORT=5432 export PGCLIENTENCODING=UTF8 export CLNAME=clustername export PGDATA=/pgdata/06/data export MANPATH=$MANPATH:$PGHOME/share/manПосле выполнения вышеперечисленных действий, сохраните изменения:
Нажмите клавишу Esc для выхода из режима редактирования.
Нажмите сочетание клавиш Ctrl + :.
Введите wq для сохранения файла и выхода из него.
При возникновении проблем с редактором vi, можно использовать текстовый редактор nano:
Откройте файл:
nano ~/.bash_profileВставьте команды:
umask 022 export LD_LIBRARY_PATH=/usr/pangolin-<версия Pangolin>/lib export PATH=$PATH:/usr/pangolin-<версия Pangolin>/bin export PG_PLUGINS_PATH=/usr/pangolin-<версия Pangolin>/lib export PGHOME=/usr/pangolin-<версия Pangolin> export PGDATABASE=postgres export PGUSER=postgres export PGHOST=127.0.0.1 export PGPORT=5432 export PGCLIENTENCODING=UTF8 export CLNAME=clustername export PGDATA=/pgdata/06/data export MANPATH=$MANPATH:$PGHOME/share/manСохраните изменения:
Нажмите сочетание клавиш Ctrl + O.
Нажмите клавишу Enter.
Нажмите сочетание клавиш Ctrl + X.
Перечитайте переменные окружения для
bash_profile:. ~/.bash_profileРазверните СУБД:
обычное окружение:
initdb -k -D /pgdata/06/data/окружение 1С:
initdb --data-checksums --locale ru_RU.UTF-8 --username postgres --pgdata $PGDATA # для 1С крайне важно указывать локаль, в будущем она будет использоваться для инициализации БД, что создает 1С
Отредактируйте конфигурационный файл
$PGDATA/postgresql.confс помощью текстового редактора (добавьте в конец файла).Откройте файл
postgresql.confпри помощи текстового редактора vi:vi $PGDATA/postgresql.confРабота в текстовом редакторе vi была описана в п.8, на данном шаге при помощи тех же команд добавьте следующие параметры в конец файла:
обычное окружение:
listen_addresses = '*' port = 5432 max_connections = 100 superuser_reserved_connections = 3 enabled_extra_auth_methods = 'peer, trust'для окружения 1С рекомендуются следующие параметры:
listen_addresses = '*' port = 5432 max_connections = 200 # с учетом ожидаемого количества superuser_reserved_connections = 3 optimize_for_1c = 'on' shared_preload_libraries = 'pg_stat_statements, plantuner' # Параметры памяти имеет смысл скорректировать с учетом ваших КТС # huge_pages = on # shared_buffers = 96GB # от 1/4 до 2/5 RAM, если не используются HugePages - не более 128GB # effective_cache_size = 288GB # 3/4 RAM temp_buffers = 256MB maintenance_work_mem = 256MB wal_buffers = 64MB work_mem = 128MB max_worker_processes = 8 # равно количеству ядер max_parallel_workers_per_gather = 4 max_parallel_workers = 8 # равно количеству ядер max_parallel_maintenance_workers = 4 fsync = 'on' checkpoint_completion_target = 0.9 checkpoint_timeout = 30min wal_level = 'minimal' max_wal_senders = 0 wal_compression = 'off' wal_sync_method = 'fdatasync' synchronous_commit = 'off' commit_delay = 1000 commit_siblings = 5 # min_wal_size = 100GB # max_wal_size = 100GB bgwriter_delay = 20ms bgwriter_lru_maxpages = 400 bgwriter_lru_multiplier = 4.0 autovacuum = 'on' track_counts = 'on' autovacuum_max_workers = 4 # 1/4 количества ядер autovacuum_naptime = 20s max_locks_per_transaction = 1000 max_prepared_transactions = 1000 max_files_per_process = 8000 effective_io_concurrency = 200 from_collapse_limit = 11 join_collapse_limit = 11 random_page_cost = 1.1 geqo = 'on' geqo_threshold = 12 password_encryption = 'md5' logging_collector = 'on' log_min_messages = 'log' log_statement = 'none' pgaudit.log = 'none' performance_insights.enable = 'off' password_policies_enable = 'off' pg_outline.enable = 'off' enable_monitor_object_modification_date = 'off' object_modification_date_keep_interval = '1 week' enabled_sec_admin_extra_auth_methods = 'md5,trust,peer,cert' enabled_extra_auth_methods = 'md5,trust,peer,cert' ssl = 'off' track_io_timing = 'off' row_security = 'off' standard_conforming_strings = 'off' escape_string_warning = 'off' plantuner.fix_empty_table = on
По аналогии с редактированием предыдущего файла отредактируйте конфигурационный файл
pg_hba.conf:Откройте файл
pg_hba.confпри помощи текстового редактора vi:vi $PGDATA/pg_hba.confВставьте строки:
local all all peer host all all 0.0.0.0/0 trust
Запустите экземпляр Pangolin:
pg_ctl -D /pgdata/06/data/ -l /pgerrorlogs/06/postgresql.log startПримечание:
Возможные ошибки:
Не читается файл лицензий:
Check license file "/opt/pangolin_license/license.json" : file is not foundРешение:
Проверьте доступность под пользователем операционной системы
postgresфайла лицензии:Указание в переменной
PG_LICENSE_PATH=/opt/pangolin_license/[postgres@srv ~]$ echo $PG_LICENSE_PATH /opt/pangolin_license/При необходимости исправьте:
export PG_LICENSE_PATH=/opt/pangolin_license/Доступность файла лицензии:
[postgres@srv ~]$ ls -la $PG_LICENSE_PATH total 12 drwxr-xr-x 2 postgres postgres 4096 Apr 12 12:17 . drwxr-xr-x. 5 root root 4096 Apr 12 12:14 .. -rw-r--r-- 1 postgres postgres 500 Apr 12 12:17 license_trial_202407.json
Скопированы некорректные символы в конфигурационный файл. После запуска в логе появляется запись об ошибках чтения конфигурационного файла в
$PGDATA/log/*. Например:2024-04-12 12:25:50.689 MSK [60403] КОНТЕКСТ: строка 100 файла конфигурации "/pgdata/06/data/pg_hba.conf" 2024-04-12 12:25:50.689 MSK [60403] СООБЩЕНИЕ: неверный метод проверки подлинности " "Решение:
Скорее всего привнесены лишние символы при копировании строк из инструкции. Необходимо либо скорректировать, либо удалить проблемные строки и ввести их с клавиатуры например через vi.
Выполните команду
psql:postgres@srv-64-44:~$ psql psql (15.5) Type "help" for help. postgres=#
Установка на ОС «РЕД ОС 7.3»#
Создайте директорию с дистрибутивом Pangolin (в каталоге, который доступен для чтения для всех пользователей ОС, например в каталоге
/tmp).mkdir distribПоместите дистрибутив Pangolin в директорию
distrib(отредактируйте команду в соответствии с местонахождением директорииdistribи дистрибутиваinstaller_redos73-D-<version>-distrib.zip).mv /путь к директории/installer_redos73-D-<версия Pangolin>-distrib.zip /путь к директории/distrib/Перейдите в директорию
distribи распакуйте дистрибутив Pangolin.cd /путь к директории/distrib/ unzip docker_redos73-D-<версия Pangolin>-16-distrib.zip unzip owned-distrib.zip tar -xvf owned-distrib.tar.gzЛибо найдите пакеты
pangolin-dbms-<версия dbms>-<version>-redos7.3.2.x86_64.rpm,pangolin-dbms-<версия dbms client>-client-<version>-redos7.3.2.x86_64.rpmв архиве самостоятельно:installer_redos73-D-<версия Pangolin>-distrib.zip/owned-distrib.zip/owned-distrib.tar.gz/pangolin-dbms-<версия dbms>-<версия Pangolin>-redos7.3.2.x86_64.rpm installer_redos73-D-<версия Pangolin>-distrib.zip/owned-distrib.zip/owned-distrib.tar.gz/pangolin-dbms-<версия dbms client>-client-<версия Pangolin>-redos7.3.2.x86_64.rpmУстановите пакет
pangolin-dbms-<версия dbms>-<version>-redos7.3.2.x86_64.rpm,pangolin-dbms-<версия dbms client>-client-<version>-redos7.3.2.x86_64.rpm:sudo dnf install pangolin-dbms-<версия dbms>-<версия Pangolin>-redos7.3.2.x86_64.rpm sudo dnf install pangolin-dbms-<версия dbms client>-client-<версия Pangolin>-redos7.3.2.x86_64.rpmСоздайте директорию
$PGDATA,/pgerrorlogsи/opt/pangolin_license:sudo mkdir -p /pgdata/06/ sudo chown -R postgres:postgres /pgdata/06/ sudo mkdir -p /pgerrorlogs/06/ sudo chown postgres:postgres /pgerrorlogs/06/ sudo mkdir -p /opt/pangolin_license/ sudo chown postgres:postgres /opt/pangolin_license/Добавьте файл с лицензией
license.jsonв папку/opt/pangolin_license/с правамиpostgres:postgres:sudo mv /путь к файлу/license.json /opt/pangolin_license/ sudo chown postgres:postgres /opt/pangolin_license/license.jsonПереключитесь на пользователя postgres (если такого нет, то создайте):
sudo su - postgresОткройте файл
.bash_profileпри помощи текстового редактора и добавьте строку окружения (в примерах используются текстовые редакторы vi и nano, вы можете повторить все действия, описанные ниже, либо можете использовать удобный вам текстовый редактор).Открытие файла
.bash_profileпри помощи текстового редактора vi:vi ~/.bash_profileДля редактирования файла в текстовом редакторе vi опуститесь в конец файла и нажмите клавишу i для перехода в режим редактирования, затем вставьте (правой кнопкой мыши) команды:
umask 022 export LD_LIBRARY_PATH=/usr/pangolin-<версия Pangolin>/lib export PATH=$PATH:/usr/pangolin-<версия Pangolin>/bin export PG_PLUGINS_PATH=/usr/pangolin-<версия Pangolin>/lib export PGHOME=/usr/pangolin-<версия Pangolin> export PGDATABASE=postgres export PGUSER=postgres export PGHOST={IP-адрес} export PGPORT={Порт} export PGCLIENTENCODING=UTF8 export CLNAME=clustername export PGDATA=/pgdata/0{major_version}/data export MANPATH=$MANPATH:$PGHOME/share/manПосле выполнения вышеперечисленных действий, сохраните изменения:
Нажмите клавишу Esc для выхода из режима редактирования.
Нажмите сочетание клавиш Ctrl + :
Введите wq для сохранения файла и выхода из него.
Перечитайте переменные окружения для
bash_profile:. ~/.bash_profileРазверните СУБД:
обычное окружение:
initdb -k -D /pgdata/0{major_version}/data/окружение 1С:
initdb --data-checksums --locale ru_RU.UTF-8 --username postgres --pgdata $PGDATA # для 1С крайне важно указывать локаль, в будущем она будет использоваться для инициализации БД, что создает 1С
Отредактируйте конфигурационный файл
$PGDATA/postgresql.confс помощью текстового редактора (добавьте в конец файла). Открытие файлаpostgresql.confпри помощи текстового редактора vi:vi $PGDATA/postgresql.confРабота в текстовом редакторе vi была описана в п.8, на данном шаге при помощи тех же команд необходимо добавить следующие параметры в конец файла:
обычное окружение:
listen_addresses = '*' port = {Порт} max_connections = 100 superuser_reserved_connections = 3 enabled_extra_auth_methods = 'peer, trust'окружение 1С:
listen_addresses = '*' port = {Порт} max_connections = 200 # с учетом ожидаемого количества superuser_reserved_connections = 3 optimize_for_1c = 'on' shared_preload_libraries = 'pg_stat_statements, plantuner' # Параметры памяти имеет смысл скорректировать с учетом ваших КТС # huge_pages = on # shared_buffers = 96GB # от 1/4 до 2/5 RAM, если не используются HugePages - не более 128GB # effective_cache_size = 288GB # 3/4 RAM temp_buffers = 256MB maintenance_work_mem = 256MB wal_buffers = 64MB work_mem = 128MB max_worker_processes = 8 # равно количеству ядер max_parallel_workers_per_gather = 4 max_parallel_workers = 8 # равно количеству ядер max_parallel_maintenance_workers = 4 fsync = 'on' checkpoint_completion_target = 0.9 checkpoint_timeout = 30min wal_level = 'minimal' max_wal_senders = 0 wal_compression = 'off' wal_sync_method = 'fdatasync' synchronous_commit = 'off' commit_delay = 1000 commit_siblings = 5 # min_wal_size = 100GB # max_wal_size = 100GB bgwriter_delay = 20ms bgwriter_lru_maxpages = 400 bgwriter_lru_multiplier = 4.0 autovacuum = 'on' track_counts = 'on' autovacuum_max_workers = 4 # 1/4 количества ядер autovacuum_naptime = 20s max_locks_per_transaction = 1000 max_prepared_transactions = 1000 max_files_per_process = 8000 effective_io_concurrency = 200 from_collapse_limit = 11 join_collapse_limit = 11 random_page_cost = 1.1 geqo = 'on' geqo_threshold = 12 default_statistics_target = 1000 password_encryption = 'md5' logging_collector = 'on' log_min_messages = 'log' log_statement = 'none' pgaudit.log = 'none' performance_insights.enable = 'off' password_policies_enable = 'off' pg_outline.enable = 'off' enable_monitor_object_modification_date = 'off' object_modification_date_keep_interval = '1 week' enabled_sec_admin_extra_auth_methods = 'md5,trust,peer,cert' enabled_extra_auth_methods = 'md5,trust,peer,cert' ssl = 'off' track_io_timing = 'off' row_security = 'off' standard_conforming_strings = 'off' escape_string_warning = 'off' plantuner.fix_empty_table = on
По аналогии с редактированием предыдущего файла, отредактируйте конфигурационный файл
pg_hba.conf:Откройте файл
pg_hba.confпри помощи текстового редактора vi:vi $PGDATA/pg_hba.confВставьте строки:
local all all trust host all all 0.0.0.0/0 trust
Запустите экземпляр Pangolin:
pg_ctl -D /pgdata/0{major_version}/data/ -l start
Примечание:
Возможные ошибки:
Не читается файл лицензий:
Check license file "/opt/pangolin_license/license.json" : file is not foundРешение:
Проверьте доступность под пользователем операционной системы
postgresфайла лицензии:
Указание в переменной
PG_LICENSE_PATH=/opt/pangolin_license/[postgres@srv ~]$ echo $PG_LICENSE_PATH /opt/pangolin_license/При необходимости исправьте:
export PG_LICENSE_PATH=/opt/pangolin_license/Доступность файла лицензии:
[postgres@srv ~]$ ls -la $PG_LICENSE_PATH total 12 drwxr-xr-x 2 postgres postgres 4096 Apr 12 12:17 . drwxr-xr-x. 5 root root 4096 Apr 12 12:14 .. -rw-r--r-- 1 postgres postgres 500 Apr 12 12:17 license_trial_202407.jsonСкопированы некорректные символы в конфигурационный файл. После запуска в логе появляется запись об ошибках чтения конфигурационного файла в
$PGDATA/log/*. Например:2024-04-12 12:25:50.689 MSK [60403] КОНТЕКСТ: строка 100 файла конфигурации "/pgdata/0{major_version}/data/pg_hba.conf" 2024-04-12 12:25:50.689 MSK [60403] СООБЩЕНИЕ: неверный метод проверки подлинности " "Решение:
Скорее всего привнесены лишние символы при копировании строк из инструкции. Необходимо либо скорректировать, либо удалить проблемные строки и ввести их с клавиатуры например через vi.
Выполните команду
psql:postgres@srv-64-44:~$ psql psql ({postgres_version}) Type "help" for help. postgres=#
Установка на ОС «Astra Linux 1.7»#
Создайте директорию с дистрибутивом Pangolin (в каталоге, который доступен для чтения для всех пользователей ОС, например в каталоге
/tmp):mkdir distribПоместите дистрибутив Pangolin в директорию
distrib(отредактируйте команду в соответствии с местонахождением директорииdistribи дистрибутиваinstaller_astrase17-D-<version>-distrib.zip).mv /путь к директории/installer_astrase17-D-<версия Pangolin>-distrib.zip /путь к директории/distrib/Перейдите в директорию
distribи распакуйте дистрибутив Pangolin:cd /путь к директории/distrib/ unzip installer_astrase17-D-<версия Pangolin>-distrib.zip unzip owned-distrib.zip tar -xvf owned-distrib.tar.gzЛибо найдите пакеты
pangolin-dbms-<версия dbms>_<version>_amd64.deb,pangolin-dbms-<версия dbms client>-client_<version>_amd64.debв архиве самостоятельно:installer_astrase17-D-<версия Pangolin>-distrib.zip/owned-distrib.zip/owned-distrib.tar.gz/pangolin-dbms-<версия dbms>_<версия Pangolin>_amd64.deb installer_astrase17-D-<версия Pangolin>-distrib.zip/owned-distrib.zip/owned-distrib.tar.gz/pangolin-dbms-<версия dbms client>-client_<версия Pangolin>_amd64.debУстановите пакеты
pangolin-dbms-<версия dbms>_<version>_amd64.deb,pangolin-dbms-<версия dbms client>-client_<version>_amd64.deb:sudo apt install /укажите_полный_путь/до_пакета/distrib/pangolin-dbms-<версия dbms>-<версия Pangolin>_amd64.deb sudo apt install /укажите_полный_путь/до_пакета/distrib/pangolin-dbms-<версия dbms client>-client_<версия Pangolin>_amd64.debСоздайте директорию
$PGDATA,/pgerrorlogsи/opt/pangolin_license:sudo mkdir -p /pgdata/06/ sudo chown -R postgres:postgres /pgdata/06/ sudo mkdir -p /pgerrorlogs/06/ sudo chown postgres:postgres /pgerrorlogs/06/ sudo mkdir -p /opt/pangolin_license/ sudo chown postgres:postgres /opt/pangolin_license/Добавьте файл с лицензией
license.jsonв папку/opt/pangolin_license/с правами postgres:postgres:sudo mv /путь к файлу/license.json /opt/pangolin_license/ sudo chown postgres:postgres /opt/pangolin_license/license.jsonПереключитесь на пользователя
postgres:sudo su - postgresОткройте файл
.bash_profileпри помощи текстового редактора и добавьте строку окружения (в примерах используются текстовые редакторы vi и nano, вы можете повторить все действия, описанные ниже, либо можете использовать удобный вам текстовый редактор).Открытие файла
.bash_profileпри помощи текстового редактора vi:vim ~/.bash_profileДля редактирования файла в текстовом редакторе vi опуститесь в конец файла и нажмите клавишу i для перехода в режим редактирования, затем вставьте (правой кнопкой мыши) команды:
umask 022 export LD_LIBRARY_PATH=/usr/pangolin-<версия Pangolin>/lib export PATH=$PATH:/usr/pangolin-<версия Pangolin>/bin export PG_PLUGINS_PATH=/usr/pangolin-<версия Pangolin>/lib export PGHOME=/usr/pangolin-<версия Pangolin> export PGDATABASE=postgres export PGUSER=postgres export PGHOST=127.0.0.1 export PGPORT=5432 export PGCLIENTENCODING=UTF8 export CLNAME=clustername export PGDATA=/pgdata/06/data export MANPATH=$MANPATH:$PGHOME/share/manПосле выполнения вышеперечисленных действий, сохраните изменения:
Нажмите клавишу Esc для выхода из режима редактирования.
Нажмите сочетание клавиш Ctrl + :.
Введите wq для сохранения файла и выхода из него.
При возникновении проблем с редактором vi, можно использовать текстовый редактор nano:
Откройте файл:
nano ~/.bash_profileВставьте команды:
umask 022 export LD_LIBRARY_PATH=/usr/pangolin-<версия Pangolin>/lib export PATH=$PATH:/usr/pangolin-<версия Pangolin>/bin export PG_PLUGINS_PATH=/usr/pangolin-<версия Pangolin>/lib export PGHOME=/usr/pangolin-<версия Pangolin> export PGDATABASE=postgres export PGUSER=postgres export PGHOST=127.0.0.1 export PGPORT=5432 export PGCLIENTENCODING=UTF8 export CLNAME=clustername export PGDATA=/pgdata/06/data export MANPATH=$MANPATH:$PGHOME/share/manСохраните изменения:
Нажмите сочетание клавиш Ctrl + O.
Нажмите клавишу Enter.
Нажмите сочетание клавиш Ctrl + X.
Перечитайте переменные окружения для
bash_profile:. ~/.bash_profileРазверните СУБД.
обычное окружение:
initdb -k -D /pgdata/0{major_version}/data/окружение 1С:
initdb --data-checksums --locale ru_RU.UTF-8 --username postgres --pgdata $PGDATAПримечание:
В случае возникновении ошибки:
initdb: error while loading shared libraries: libjsoncpp.so.1: cannot open shared object file: No such file or directoryНеобходимо установить пакет:
sudo apt install libjsoncpp1
Отредактируйте конфигурационный файл
$PGDATA/postgresql.confс помощью текстового редактора (добавьте в конец файла).Откройте файл
postgresql.confпри помощи текстового редактора vi:vi $PGDATA/postgresql.confРабота в текстовом редакторе vi была описана в п.8, на данном шаге при помощи тех же команд добавьте следующие параметры в конец файла:
обычное окружение:
listen_addresses = '*' port = 5432 max_connections = 100 superuser_reserved_connections = 3 enabled_extra_auth_methods = 'peer, trust'для окружения 1С рекомендуются следующие параметры:
listen_addresses = '*' port = 5432 max_connections = 200 # с учетом ожидаемого количества superuser_reserved_connections = 3 optimize_for_1c = 'on' shared_preload_libraries = 'pg_stat_statements, plantuner' # Параметры памяти имеет смысл скорректировать с учетом ваших КТС # huge_pages = on # shared_buffers = 96GB # от 1/4 до 2/5 RAM, если не используются HugePages - не более 128GB # effective_cache_size = 288GB # 3/4 RAM temp_buffers = 256MB maintenance_work_mem = 256MB wal_buffers = 64MB work_mem = 128MB max_worker_processes = 8 # равно количеству ядер max_parallel_workers_per_gather = 4 max_parallel_workers = 8 # равно количеству ядер max_parallel_maintenance_workers = 4 fsync = 'on' checkpoint_completion_target = 0.9 checkpoint_timeout = 30min wal_level = 'minimal' max_wal_senders = 0 wal_compression = 'off' wal_sync_method = 'fdatasync' synchronous_commit = 'off' commit_delay = 1000 commit_siblings = 5 # min_wal_size = 100GB # max_wal_size = 100GB bgwriter_delay = 20ms bgwriter_lru_maxpages = 400 bgwriter_lru_multiplier = 4.0 autovacuum = 'on' track_counts = 'on' autovacuum_max_workers = 4 # 1/4 количества ядер autovacuum_naptime = 20s max_locks_per_transaction = 1000 max_prepared_transactions = 1000 max_files_per_process = 8000 effective_io_concurrency = 200 from_collapse_limit = 11 join_collapse_limit = 11 random_page_cost = 1.1 geqo = 'on' geqo_threshold = 12 default_statistics_target = 1000 password_encryption = 'md5' logging_collector = 'on' log_min_messages = 'log' log_statement = 'none' pgaudit.log = 'none' performance_insights.enable = 'off' password_policies_enable = 'off' pg_outline.enable = 'off' enable_monitor_object_modification_date = 'off' object_modification_date_keep_interval = '1 week' enabled_sec_admin_extra_auth_methods = 'md5,trust,peer,cert' enabled_extra_auth_methods = 'md5,trust,peer,cert' ssl = 'off' track_io_timing = 'off' row_security = 'off' standard_conforming_strings = 'off' escape_string_warning = 'off' plantuner.fix_empty_table = on
По аналогии с редактированием предыдущего файла отредактируйте конфигурационный файл
pg_hba.conf:Откройте файл
pg_hba.confпри помощи текстового редактора vi:vi $PGDATA/pg_hba.confВставьте строки:
local all all peer host all all 0.0.0.0/0 trust
Запустите экземпляр Pangolin:
pg_ctl -D /pgdata/0{major_version}/data/ -l /pgerrorlogs/0{major_version}/postgresql.log start
Примечание:
Возможные ошибки:
Не читается файл лицензий:
Check license file "/opt/pangolin_license/license.json" : file is not foundРешение:
Проверьте доступность под пользователем операционной системы
postgresфайла лицензии:
Указание в переменной
PG_LICENSE_PATH=/opt/pangolin_license/[postgres@srv ~]$ echo $PG_LICENSE_PATH /opt/pangolin_license/При необходимости исправьте:
export PG_LICENSE_PATH=/opt/pangolin_license/Доступность файла лицензии:
[postgres@srv ~]$ ls -la $PG_LICENSE_PATH total 12 drwxr-xr-x 2 postgres postgres 4096 Apr 12 12:17 . drwxr-xr-x. 5 root root 4096 Apr 12 12:14 .. -rw-r--r-- 1 postgres postgres 500 Apr 12 12:17 license_trial_202407.jsonСкопированы некорректные символы в конфигурационный файл. После запуска в логе появляется запись об ошибках чтения конфигурационного файла в
$PGDATA/log/*. Например:2024-04-12 12:25:50.689 MSK [60403] КОНТЕКСТ: строка 100 файла конфигурации "/pgdata/06/data/pg_hba.conf" 2024-04-12 12:25:50.689 MSK [60403] СООБЩЕНИЕ: неверный метод проверки подлинности " "Решение:
Скорее всего привнесены лишние символы при копировании строк из инструкции. Необходимо либо скорректировать, либо удалить проблемные строки и ввести их с клавиатуры например через vi.
Выполните команду
psql:postgres@srv-64-44:~$ psql psql ({postgres_version}) Type "help" for help. postgres=#
Установка на ОС «Альт СП 8.4»#
Примечание:
При выполнении нижеперечисленных команд необходимо отредактировать пути к файлам.
Создайте директорию с дистрибутивом Pangolin (в каталоге, который доступен для чтения для всех пользователей ОС, например в каталоге
/tmp):mkdir distribПоместите дистрибутив Pangolin в директорию
distrib(отредактируйте команду в соответствии с местонахождением директорииdistribи дистрибутиваinstaller_altlinux84-D-<версия Pangolin>-distrib.zip):mv /путь к дистрибутиву/installer_altlinux84-D-<версия Pangolin>-distrib.zip /путь к директории/distrib/Перейдите в директорию
distribи распакуйте дистрибутив Pangolin:cd /путь к директории/distrib/ unzip installer_altlinux84-D-<версия Pangolin>-distrib.zip unzip owned-distrib.zip tar -xvf owned-distrib.tar.gzЛибо найдите пакеты
pangolin-dbms-<версия dbms>-<version>-altlinuxp8.4.x86_64.rpm,pangolin-dbms-<версия dbms client>-client-<version>-altlinuxp8.4.x86_64.rpmв архиве самостоятельно:docker_6_2_0_alt10-D-<версия Pangolin>-69-distrib.zip/owned-distrib.zip/owned-distrib.tar.gz/pangolin-dbms-<версия dbms>-<версия Pangolin>-altlinuxp8.4.x86_64.rpm docker_6_2_0_alt10-D-<версия Pangolin>-69-distrib.zip/owned-distrib.zip/owned-distrib.tar.gz/pangolin-dbms-<версия dbms client>-client-<версия Pangolin>-altlinuxp8.4.x86_64.rpmПримечание:
Если на текущем шаге возникла ошибка
-bash: unzip: command not found– необходимо установить утилитуunzipи вернуться к шагу с распаковкой. Установкаunzip:sudo apt-get install unzipУстановите пакеты
pangolin-dbms-<версия dbms>-<версия Pangolin>-altlinuxp8.4.x86_64.rpm,pangolin-dbms-<версия dbms client>-client-<версия Pangolin>-altlinuxp8.4.x86_64.rpm:sudo apt-get install /полный_путь_до_пакета/distrib/pangolin-dbms-<версия dbms>-<версия Pangolin>-altlinuxp8.4.x86_64.rpm sudo apt-get install /полный_путь_до_пакета/distrib/pangolin-dbms-<версия dbms client>-client-<версия Pangolin>-altlinuxp8.4.x86_64.rpmСоздайте директорию
$PGDATA,/pgerrorlogsи/opt/pangolin_license:sudo mkdir -p /pgdata/0{major_version}/ sudo chown -R postgres:postgres /pgdata/0{major_version}/ sudo mkdir -p /pgerrorlogs/0{major_version}/ sudo chown postgres:postgres /pgerrorlogs/0{major_version}/ sudo mkdir -p /opt/pangolin_license/ sudo chown postgres:postgres /opt/pangolin_license/Добавьте файл с лицензией
license.jsonв папку/opt/pangolin_license/с правамиpostgres:postgres:sudo mv /путь_до_файла/license.json /opt/pangolin_license/ sudo chown postgres:postgres /opt/pangolin_license/license.jsonПереключитесь на пользователя
postgres:sudo su - postgresОткройте файл
.bash_profileпри помощи текстового редактора и добавьте строку окружения (в примерах используются текстовые редакторы vi и nano, вы можете повторить все действия, описанные ниже, либо можете использовать удобный вам текстовый редактор):Открытие файла
.bash_profileпри помощи текстового редактора vi:vim ~/.bash_profileДля редактирования файла в текстовом редакторе vi опуститесь в конец файла и нажмите клавишу i для перехода в режим редактирования, затем вставьте (правой кнопкой мыши) команды:
umask 022 export LD_LIBRARY_PATH=/usr/pangolin-<версия Pangolin>/lib export PATH=$PATH:/usr/pangolin-<версия Pangolin>/bin export PG_PLUGINS_PATH=/usr/pangolin-<версия Pangolin>/lib export PGHOME=/usr/pangolin-<версия Pangolin> export PGDATABASE=postgres export PGUSER=postgres export PGHOST=127.0.0.1 export PGPORT=5432 export PGCLIENTENCODING=UTF8 export CLNAME=clustername export PGDATA=/pgdata/0{major_version}/data export MANPATH=$MANPATH:$PGHOME/share/manПосле выполнения вышеперечисленных действий, сохраните изменения:
Нажмите клавишу Esc для выхода из режима редактирования.
Нажмите сочетание клавиш Ctrl + :.
Введите wq для сохранения файла и выхода из него.
При возникновении проблем с редактором vi, можно использовать текстовый редактор nano:
Откройте файл:
nano ~/.bash_profileВставьте команды:
umask 022 export LD_LIBRARY_PATH=/usr/pangolin-<версия Pangolin>/lib export PATH=$PATH:/usr/pangolin-<версия Pangolin>/bin export PG_PLUGINS_PATH=/usr/pangolin-<версия Pangolin>/lib export PGHOME=/usr/pangolin-<версия Pangolin> export PGDATABASE=postgres export PGUSER=postgres export PGHOST=127.0.0.1 export PGPORT=5432 export PGCLIENTENCODING=UTF8 export CLNAME=clustername export PGDATA=/pgdata/06/data export MANPATH=$MANPATH:$PGHOME/share/manСохраните изменения:
Нажмите сочетание клавиш Ctrl + O.
Нажмите клавишу Enter.
Нажмите сочетание клавиш Ctrl + X.
Перечитайте переменные окружения для
bash_profile:. ~/.bash_profileРазверните СУБД:
initdb -k -D /pgdata/06/data/Отредактируйте конфигурационный файл
$PGDATA/postgresql.confс помощью текстового редактора (добавьте в конец файла).Откройте файл
postgresql.confпри помощи текстового редактора vi:vi $PGDATA/postgresql.confРабота в текстовом редакторе vi была описана в п.8, на данном шаге при помощи тех же команд добавьте следующие параметры в конец файла:
обычное окружение:
listen_addresses = '*' port = 5432 max_connections = 100 superuser_reserved_connections = 3 enabled_extra_auth_methods = 'peer, trust'для окружения 1С рекомендуются следующие параметры:
listen_addresses = '*' port = 5432 max_connections = 200 # с учетом ожидаемого количества superuser_reserved_connections = 3 optimize_for_1c = 'on' shared_preload_libraries = 'pg_stat_statements, plantuner' # Параметры памяти имеет смысл скорректировать с учетом ваших КТС # huge_pages = on # shared_buffers = 96GB # от 1/4 до 2/5 RAM, если не используются HugePages - не более 128GB # effective_cache_size = 288GB # 3/4 RAM temp_buffers = 256MB maintenance_work_mem = 256MB wal_buffers = 64MB work_mem = 128MB max_worker_processes = 8 # равно количеству ядер max_parallel_workers_per_gather = 4 max_parallel_workers = 8 # равно количеству ядер max_parallel_maintenance_workers = 4 fsync = 'on' checkpoint_completion_target = 0.9 checkpoint_timeout = 30min wal_level = 'minimal' max_wal_senders = 0 wal_compression = 'off' wal_sync_method = 'fdatasync' synchronous_commit = 'off' commit_delay = 1000 commit_siblings = 5 # min_wal_size = 100GB # max_wal_size = 100GB bgwriter_delay = 20ms bgwriter_lru_maxpages = 400 bgwriter_lru_multiplier = 4.0 autovacuum = 'on' track_counts = 'on' autovacuum_max_workers = 4 # 1/4 количества ядер autovacuum_naptime = 20s max_locks_per_transaction = 1000 max_prepared_transactions = 1000 max_files_per_process = 8000 effective_io_concurrency = 200 from_collapse_limit = 11 join_collapse_limit = 11 random_page_cost = 1.1 geqo = 'on' geqo_threshold = 12 password_encryption = 'md5' logging_collector = 'on' log_min_messages = 'log' log_statement = 'none' pgaudit.log = 'none' performance_insights.enable = 'off' password_policies_enable = 'off' pg_outline.enable = 'off' enable_monitor_object_modification_date = 'off' object_modification_date_keep_interval = '1 week' enabled_sec_admin_extra_auth_methods = 'md5,trust,peer,cert' enabled_extra_auth_methods = 'md5,trust,peer,cert' ssl = 'off' track_io_timing = 'off' row_security = 'off' standard_conforming_strings = 'off' escape_string_warning = 'off' plantuner.fix_empty_table = on
По аналогии с редактированием предыдущего файла отредактируйте конфигурационный файл
pg_hba.conf:Откройте файл
pg_hba.confпри помощи текстового редактора vi:vi $PGDATA/pg_hba.confВставьте строки:
local all all peer host all all 0.0.0.0/0 trust
Запустите экземпляр Pangolin:
pg_ctl -D /pgdata/0{major_version}/data/ -l /pgerrorlogs/0{major_version}/postgresql.log startПримечание:
Возможные ошибки:
Не читается файл лицензий:
Check license file "/opt/pangolin_license/license.json" : file is not foundРешение:
Проверьте доступность под пользователем операционной системы
postgresфайла лицензии:Указание в переменной
PG_LICENSE_PATH=/opt/pangolin_license/[postgres@srv ~]$ echo $PG_LICENSE_PATH /opt/pangolin_license/При необходимости исправьте:
export PG_LICENSE_PATH=/opt/pangolin_license/Доступность файла лицензии:
[postgres@srv ~]$ ls -la $PG_LICENSE_PATH total 12 drwxr-xr-x 2 postgres postgres 4096 Apr 12 12:17 . drwxr-xr-x. 5 root root 4096 Apr 12 12:14 .. -rw-r--r-- 1 postgres postgres 500 Apr 12 12:17 license_trial_202407.json
Скопированы некорректные символы в конфигурационный файл. После запуска в логе появляется запись об ошибках чтения конфигурационного файла в
$PGDATA/log/*. Например:2024-04-12 12:25:50.689 MSK [60403] КОНТЕКСТ: строка 100 файла конфигурации "/pgdata/06/data/pg_hba.conf" 2024-04-12 12:25:50.689 MSK [60403] СООБЩЕНИЕ: неверный метод проверки подлинности " "Решение:
Скорее всего привнесены лишние символы при копировании строк из инструкции. Необходимо либо скорректировать, либо удалить проблемные строки и ввести их с клавиатуры например через vi.
[16:41:22 postgres@srv-0-211 ~]$ psql psql ({postgres_version}) Type "help" for help. postgres=#
Установка на ОС «Альт СП 9.2»#
Примечание:
При выполнении нижеперечисленных команд необходимо отредактировать пути к файлам.
Создайте директорию с дистрибутивом Pangolin (в каталоге, который доступен для чтения для всех пользователей ОС, например в каталоге
/tmp):mkdir distribПоместите дистрибутив Pangolin в директорию
distrib(отредактируйте команду в соответствии с местонахождением директорииdistribи дистрибутиваinstaller_altlinux92-D-<версия Pangolin>-distrib.zip):mv /путь к дистрибутиву/installer_altlinux92-D-<версия Pangolin>-distrib.zip /путь к директории/distrib/Перейдите в директорию
distribи распакуйте дистрибутив Pangolin:cd /путь к директории/distrib/ unzip installer_altlinux84-D-<версия Pangolin>-distrib.zip unzip owned-distrib.zip tar -xvf owned-distrib.tar.gzЛибо найдите пакеты
pangolin-dbms-<версия dbms>-<version>-altlinuxp8.4.x86_64.rpm,pangolin-dbms-<версия dbms client>-client-<version>-altlinuxp8.4.x86_64.rpmв архиве самостоятельно:installer_altlinux92-D-<версия Pangolin>-distrib.zip/owned-distrib.zip/owned-distrib.tar.gz/pangolin-dbms-<версия dbms>-<версия Pangolin>-altlinuxp9.x86_64.rpm installer_altlinux92-D-<версия Pangolin>-distrib.zip/owned-distrib.zip/owned-distrib.tar.gz/pangolin-dbms-<версия dbms client>-client-<версия Pangolin>-altlinuxp9.x86_64.rpmПримечание:
Если на текущем шаге возникла ошибка
-bash: unzip: command not found– необходимо установить утилитуunzipи вернуться к шагу с распаковкой. Установкаunzip:sudo apt-get install unzipУстановите пакеты
pangolin-dbms-<версия dbms>-<версия Pangolin>-altlinuxp9.x86_64.rpm,pangolin-dbms-<версия dbms client>-client-<версия Pangolin>-altlinuxp9.x86_64.rpm:sudo apt-get install /полный_путь_до_пакета/distrib/pangolin-dbms-<версия dbms>-<версия Pangolin>-altlinuxp9.x86_64.rpm sudo apt-get install /полный_путь_до_пакета/distrib/pangolin-dbms-<версия dbms client>-client-<версия Pangolin>-altlinuxp9.x86_64.rpmСоздайте директорию
$PGDATA,/pgerrorlogsи/opt/pangolin_license:sudo mkdir -p /pgdata/06/ sudo chown -R postgres:postgres /pgdata/06/ sudo mkdir -p /pgerrorlogs/06/ sudo chown postgres:postgres /pgerrorlogs/06/ sudo mkdir -p /opt/pangolin_license/ sudo chown postgres:postgres /opt/pangolin_license/Добавьте файл с лицензией
license.jsonв папку/opt/pangolin_license/с правамиpostgres:postgres:sudo mv /путь_до_файла/license.json /opt/pangolin_license/ sudo chown postgres:postgres /opt/pangolin_license/license.jsonПереключитесь на пользователя
postgres:sudo su - postgresОткройте файл
.bash_profileпри помощи текстового редактора и добавьте строку окружения (в примерах используются текстовые редакторы vi и nano, вы можете повторить все действия, описанные ниже, либо можете использовать удобный вам текстовый редактор):Открытие файла
.bash_profileпри помощи текстового редактора vi:vim ~/.bash_profileДля редактирования файла в текстовом редакторе vi опуститесь в конец файла и нажмите клавишу i для перехода в режим редактирования, затем вставьте (правой кнопкой мыши) команды:
umask 022 export LD_LIBRARY_PATH=/usr/pangolin-<версия Pangolin>/lib export PATH=$PATH:/usr/pangolin-<версия Pangolin>/bin export PG_PLUGINS_PATH=/usr/pangolin-<версия Pangolin>/lib export PGHOME=/usr/pangolin-<версия Pangolin> export PGDATABASE=postgres export PGUSER=postgres export PGHOST=127.0.0.1 export PGPORT=5432 export PGCLIENTENCODING=UTF8 export CLNAME=clustername export PGDATA=/pgdata/06/data export MANPATH=$MANPATH:$PGHOME/share/manПосле выполнения вышеперечисленных действий, сохраните изменения:
Нажмите клавишу Esc для выхода из режима редактирования.
Нажмите сочетание клавиш Ctrl + :.
Введите wq для сохранения файла и выхода из него.
При возникновении проблем с редактором vi, можно использовать текстовый редактор nano:
Откройте файл:
nano ~/.bash_profileВставьте команды:
umask 022 export LD_LIBRARY_PATH=/usr/pangolin-<версия Pangolin>/lib export PATH=$PATH:/usr/pangolin-<версия Pangolin>/bin export PG_PLUGINS_PATH=/usr/pangolin-<версия Pangolin>/lib export PGHOME=/usr/pangolin-<версия Pangolin> export PGDATABASE=postgres export PGUSER=postgres export PGHOST=127.0.0.1 export PGPORT=5432 export PGCLIENTENCODING=UTF8 export CLNAME=clustername export PGDATA=/pgdata/06/data export MANPATH=$MANPATH:$PGHOME/share/manСохраните изменения:
Нажмите сочетание клавиш Ctrl + O.
Нажмите клавишу Enter.
Нажмите сочетание клавиш Ctrl + X.
Перечитайте переменные окружения для
bash_profile:. ~/.bash_profileРазверните СУБД:
обычное окружение:
initdb -k -D /pgdata/06/data/окружение 1С:
initdb --data-checksums --locale ru_RU.UTF-8 --username postgres --pgdata $PGDATA # для 1С крайне важно указывать локаль, в будущем она будет использоваться для инициализации БД, что создает 1С
Отредактируйте конфигурационный файл
$PGDATA/postgresql.confс помощью текстового редактора (добавьте в конец файла).Откройте файл
postgresql.confпри помощи текстового редактора vi:vi $PGDATA/postgresql.confРабота в текстовом редакторе vi была описана в п.8, на данном шаге при помощи тех же команд добавьте следующие параметры в конец файла:
обычное окружение:
listen_addresses = '*' port = 5432 max_connections = 100 superuser_reserved_connections = 3 enabled_extra_auth_methods = 'peer, trust'для окружения 1С рекомендуются следующие параметры:
listen_addresses = '*' port = 5432 max_connections = 200 # с учетом ожидаемого количества superuser_reserved_connections = 3 optimize_for_1c = 'on' shared_preload_libraries = 'pg_stat_statements, plantuner' # Параметры памяти имеет смысл скорректировать с учетом ваших КТС # huge_pages = on # shared_buffers = 96GB # от 1/4 до 2/5 RAM, если не используются HugePages - не более 128GB # effective_cache_size = 288GB # 3/4 RAM temp_buffers = 256MB maintenance_work_mem = 256MB wal_buffers = 64MB work_mem = 128MB max_worker_processes = 8 # равно количеству ядер max_parallel_workers_per_gather = 4 max_parallel_workers = 8 # равно количеству ядер max_parallel_maintenance_workers = 4 fsync = 'on' checkpoint_completion_target = 0.9 checkpoint_timeout = 30min wal_level = 'minimal' max_wal_senders = 0 wal_compression = 'off' wal_sync_method = 'fdatasync' synchronous_commit = 'off' commit_delay = 1000 commit_siblings = 5 # min_wal_size = 100GB # max_wal_size = 100GB bgwriter_delay = 20ms bgwriter_lru_maxpages = 400 bgwriter_lru_multiplier = 4.0 autovacuum = 'on' track_counts = 'on' autovacuum_max_workers = 4 # 1/4 количества ядер autovacuum_naptime = 20s max_locks_per_transaction = 1000 max_prepared_transactions = 1000 max_files_per_process = 8000 effective_io_concurrency = 200 from_collapse_limit = 11 join_collapse_limit = 11 random_page_cost = 1.1 geqo = 'on' geqo_threshold = 12 password_encryption = 'md5' logging_collector = 'on' log_min_messages = 'log' log_statement = 'none' pgaudit.log = 'none' performance_insights.enable = 'off' password_policies_enable = 'off' pg_outline.enable = 'off' enable_monitor_object_modification_date = 'off' object_modification_date_keep_interval = '1 week' enabled_sec_admin_extra_auth_methods = 'md5,trust,peer,cert' enabled_extra_auth_methods = 'md5,trust,peer,cert' ssl = 'off' track_io_timing = 'off' row_security = 'off' standard_conforming_strings = 'off' escape_string_warning = 'off' plantuner.fix_empty_table = on
По аналогии с редактированием предыдущего файла отредактируйте конфигурационный файл
pg_hba.conf:Откройте файл
pg_hba.confпри помощи текстового редактора vi:vi $PGDATA/pg_hba.confВставьте строки:
local all all peer host all all 0.0.0.0/0 trust
Запустите экземпляр Pangolin:
pg_ctl -D /pgdata/06/data/ -l /pgerrorlogs/06/postgresql.log startПримечание:
Возможные ошибки:
Не читается файл лицензий:
Check license file "/opt/pangolin_license/license.json" : file is not foundРешение:
Проверьте доступность под пользователем операционной системы
postgresфайла лицензии:Указание в переменной
PG_LICENSE_PATH=/opt/pangolin_license/[postgres@srv ~]$ echo $PG_LICENSE_PATH /opt/pangolin_license/При необходимости исправьте:
export PG_LICENSE_PATH=/opt/pangolin_license/Доступность файла лицензии:
[postgres@srv ~]$ ls -la $PG_LICENSE_PATH total 12 drwxr-xr-x 2 postgres postgres 4096 Apr 12 12:17 . drwxr-xr-x. 5 root root 4096 Apr 12 12:14 .. -rw-r--r-- 1 postgres postgres 500 Apr 12 12:17 license_trial_202407.json
Скопированы некорректные символы в конфигурационный файл. После запуска в логе появляется запись об ошибках чтения конфигурационного файла в
$PGDATA/log/*. Например:2024-04-12 12:25:50.689 MSK [60403] КОНТЕКСТ: строка 100 файла конфигурации "/pgdata/06/data/pg_hba.conf" 2024-04-12 12:25:50.689 MSK [60403] СООБЩЕНИЕ: неверный метод проверки подлинности " "Решение:
Скорее всего привнесены лишние символы при копировании строк из инструкции. Необходимо либо скорректировать, либо удалить проблемные строки и ввести их с клавиатуры например через vi.
Выполните команду
psql:postgres@srv-64-44:~$ psql psql (15.5) Type "help" for help. postgres=#
Установка на ОС «Альт СП 10»#
Примечание:
При выполнении нижеперечисленных команд необходимо отредактировать пути к файлам.
Создайте директорию с дистрибутивом Pangolin (в каталоге, который доступен для чтения для всех пользователей ОС, например в каталоге
/tmp):mkdir distribПоместите дистрибутив Pangolin в директорию
distrib(отредактируйте команду в соответствии с местонахождением директорииdistribи дистрибутиваinstaller_altlinux92-D-<версия Pangolin>-distrib.zip):mv /путь к дистрибутиву/installer_altlinux10-D-<версия Pangolin>-distrib.zip /путь к директории/distrib/Перейдите в директорию
distribи распакуйте дистрибутив Pangolin:cd /путь к директории/distrib/ unzip docker_6_3_0_alt10-D-<версия Pangolin>-69-distrib.zip unzip owned-distrib.zip tar -xvf owned-distrib.tar.gzЛибо найдите пакеты
pangolin-dbms-<версия dbms>-<version>-altlinuxp8.4.x86_64.rpm,pangolin-dbms-<версия dbms client>-client-<version>-altlinuxp8.4.x86_64.rpmв архиве самостоятельно:docker_6_3_0_alt10-D-<версия Pangolin>-69-distrib.zip/owned-distrib.zip/owned-distrib.tar.gz/pangolin-dbms-<версия dbms>-<версия Pangolin>-altlinuxp10.x86_64.rpm docker_6_3_0_alt10-D-<версия Pangolin>-69-distrib.zip/owned-distrib.zip/owned-distrib.tar.gz/pangolin-dbms-<версия dbms client>-client-<версия Pangolin>-altlinuxp10.x86_64.rpmПримечание:
Если на текущем шаге возникла ошибка
-bash: unzip: command not found– необходимо установить утилитуunzipи вернуться к шагу с распаковкой. Установкаunzip:sudo apt-get install unzipУстановите пакеты
pangolin-dbms-<версия dbms>-<версия Pangolin>-altlinuxp10.x86_64.rpm,pangolin-dbms-<версия dbms client>-client-<версия Pangolin>-altlinuxp10.x86_64.rpm:sudo apt-get install /полный_путь_до_пакета/distrib/pangolin-dbms-<версия dbms>-<версия Pangolin>-altlinuxp10.x86_64.rpm sudo apt-get install /полный_путь_до_пакета/distrib/pangolin-dbms-<версия dbms client>-client-<версия Pangolin>-altlinuxp10.x86_64.rpmСоздайте директорию
$PGDATA,/pgerrorlogsи/opt/pangolin_license:sudo mkdir -p /pgdata/06/ sudo chown -R postgres:postgres /pgdata/06/ sudo mkdir -p /pgerrorlogs/06/ sudo chown postgres:postgres /pgerrorlogs/06/ sudo mkdir -p /opt/pangolin_license/ sudo chown postgres:postgres /opt/pangolin_license/Добавьте файл с лицензией
license.jsonв папку/opt/pangolin_license/с правамиpostgres:postgres:sudo mv /путь_до_файла/license.json /opt/pangolin_license/ sudo chown postgres:postgres /opt/pangolin_license/license.jsonПереключитесь на пользователя
postgres:sudo su - postgresОткройте файл
.bash_profileпри помощи текстового редактора и добавьте строку окружения (в примерах используются текстовые редакторы vi и nano, вы можете повторить все действия, описанные ниже, либо можете использовать удобный вам текстовый редактор):Открытие файла
.bash_profileпри помощи текстового редактора vi:vim ~/.bash_profileДля редактирования файла в текстовом редакторе vi опуститесь в конец файла и нажмите клавишу i для перехода в режим редактирования, затем вставьте (правой кнопкой мыши) команды:
umask 022 export LD_LIBRARY_PATH=/usr/pangolin-<версия Pangolin>/lib export PATH=$PATH:/usr/pangolin-<версия Pangolin>/bin export PG_PLUGINS_PATH=/usr/pangolin-<версия Pangolin>/lib export PGHOME=/usr/pangolin-<версия Pangolin> export PGDATABASE=postgres export PGUSER=postgres export PGHOST=127.0.0.1 export PGPORT=5432 export PGCLIENTENCODING=UTF8 export CLNAME=clustername export PGDATA=/pgdata/06/data export MANPATH=$MANPATH:$PGHOME/share/manПосле выполнения вышеперечисленных действий, сохраните изменения:
Нажмите клавишу Esc для выхода из режима редактирования.
Нажмите сочетание клавиш Ctrl + :.
Введите wq для сохранения файла и выхода из него.
При возникновении проблем с редактором vi, можно использовать текстовый редактор nano:
Откройте файл:
nano ~/.bash_profileВставьте команды:
umask 022 export LD_LIBRARY_PATH=/usr/pangolin-<версия Pangolin>/lib export PATH=$PATH:/usr/pangolin-<версия Pangolin>/bin export PG_PLUGINS_PATH=/usr/pangolin-<версия Pangolin>/lib export PGHOME=/usr/pangolin-<версия Pangolin> export PGDATABASE=postgres export PGUSER=postgres export PGHOST=127.0.0.1 export PGPORT=5432 export PGCLIENTENCODING=UTF8 export CLNAME=clustername export PGDATA=/pgdata/06/data export MANPATH=$MANPATH:$PGHOME/share/manСохраните изменения:
Нажмите сочетание клавиш Ctrl + O.
Нажмите клавишу Enter.
Нажмите сочетание клавиш Ctrl + X.
Перечитайте переменные окружения для
bash_profile:. ~/.bash_profileРазверните СУБД:
обычное окружение:
initdb -k -D /pgdata/06/data/окружение 1С:
initdb --data-checksums --locale ru_RU.UTF-8 --username postgres --pgdata $PGDATA # для 1С крайне важно указывать локаль, в будущем она будет использоваться для инициализации БД, что создает 1С
Отредактируйте конфигурационный файл
$PGDATA/postgresql.confс помощью текстового редактора (добавьте в конец файла).Откройте файл
postgresql.confпри помощи текстового редактора vi:vi $PGDATA/postgresql.confРабота в текстовом редакторе vi была описана в п.8, на данном шаге при помощи тех же команд добавьте следующие параметры в конец файла:
обычное окружение:
listen_addresses = '*' port = 5432 max_connections = 100 superuser_reserved_connections = 3 enabled_extra_auth_methods = 'peer, trust'для окружения 1С рекомендуются следующие параметры:
listen_addresses = '*' port = 5432 max_connections = 200 # с учетом ожидаемого количества superuser_reserved_connections = 3 optimize_for_1c = 'on' shared_preload_libraries = 'pg_stat_statements, plantuner' # Параметры памяти имеет смысл скорректировать с учетом ваших КТС # huge_pages = on # shared_buffers = 96GB # от 1/4 до 2/5 RAM, если не используются HugePages - не более 128GB # effective_cache_size = 288GB # 3/4 RAM temp_buffers = 256MB maintenance_work_mem = 256MB wal_buffers = 64MB work_mem = 128MB max_worker_processes = 8 # равно количеству ядер max_parallel_workers_per_gather = 4 max_parallel_workers = 8 # равно количеству ядер max_parallel_maintenance_workers = 4 fsync = 'on' checkpoint_completion_target = 0.9 checkpoint_timeout = 30min wal_level = 'minimal' max_wal_senders = 0 wal_compression = 'off' wal_sync_method = 'fdatasync' synchronous_commit = 'off' commit_delay = 1000 commit_siblings = 5 # min_wal_size = 100GB # max_wal_size = 100GB bgwriter_delay = 20ms bgwriter_lru_maxpages = 400 bgwriter_lru_multiplier = 4.0 autovacuum = 'on' track_counts = 'on' autovacuum_max_workers = 4 # 1/4 количества ядер autovacuum_naptime = 20s max_locks_per_transaction = 1000 max_prepared_transactions = 1000 max_files_per_process = 8000 effective_io_concurrency = 200 from_collapse_limit = 11 join_collapse_limit = 11 random_page_cost = 1.1 geqo = 'on' geqo_threshold = 12 password_encryption = 'md5' logging_collector = 'on' log_min_messages = 'log' log_statement = 'none' pgaudit.log = 'none' performance_insights.enable = 'off' password_policies_enable = 'off' pg_outline.enable = 'off' enable_monitor_object_modification_date = 'off' object_modification_date_keep_interval = '1 week' enabled_sec_admin_extra_auth_methods = 'md5,trust,peer,cert' enabled_extra_auth_methods = 'md5,trust,peer,cert' ssl = 'off' track_io_timing = 'off' row_security = 'off' standard_conforming_strings = 'off' escape_string_warning = 'off' plantuner.fix_empty_table = on
По аналогии с редактированием предыдущего файла отредактируйте конфигурационный файл
pg_hba.conf:Откройте файл
pg_hba.confпри помощи текстового редактора vi:vi $PGDATA/pg_hba.confВставьте строки:
local all all peer host all all 0.0.0.0/0 trust
Запустите экземпляр Pangolin:
pg_ctl -D /pgdata/06/data/ -l /pgerrorlogs/06/postgresql.log startПримечание:
Возможные ошибки:
Не читается файл лицензий:
Check license file "/opt/pangolin_license/license.json" : file is not foundРешение:
Проверьте доступность под пользователем операционной системы
postgresфайла лицензии:Указание в переменной
PG_LICENSE_PATH=/opt/pangolin_license/[postgres@srv ~]$ echo $PG_LICENSE_PATH /opt/pangolin_license/При необходимости исправьте:
export PG_LICENSE_PATH=/opt/pangolin_license/Доступность файла лицензии:
[postgres@srv ~]$ ls -la $PG_LICENSE_PATH total 12 drwxr-xr-x 2 postgres postgres 4096 Apr 12 12:17 . drwxr-xr-x. 5 root root 4096 Apr 12 12:14 .. -rw-r--r-- 1 postgres postgres 500 Apr 12 12:17 license_trial_202407.json
Скопированы некорректные символы в конфигурационный файл. После запуска в логе появляется запись об ошибках чтения конфигурационного файла в
$PGDATA/log/*. Например:2024-04-12 12:25:50.689 MSK [60403] КОНТЕКСТ: строка 100 файла конфигурации "/pgdata/06/data/pg_hba.conf" 2024-04-12 12:25:50.689 MSK [60403] СООБЩЕНИЕ: неверный метод проверки подлинности " "Решение:
Скорее всего привнесены лишние символы при копировании строк из инструкции. Необходимо либо скорректировать, либо удалить проблемные строки и ввести их с клавиатуры например через vi.
Выполните команду
psql:postgres@srv-64-44:~$ psql psql (15.5) Type "help" for help. postgres=#
Установка на ОС «Red Hat Enterprise Linux 8.7»#
Примечание:
При выполнении нижеперечисленных команд необходимо отредактировать пути к файлам.
Создайте директорию с дистрибутивом Pangolin (в каталоге, который доступен для чтения для всех пользователей ОС, например в каталоге
/tmp):mkdir distribПоместите дистрибутив Pangolin в директорию
distrib(отредактируйте команду в соответствии с местонахождением директорииdistribи дистрибутиваinstaller_rhel87-D-<версия Pangolin>-distrib.zip):mv /путь к дистрибутиву/installer_rhel87-D-<версия Pangolin>-distrib.zip /путь к директории/distrib/Перейдите в директорию
distribи распакуйте дистрибутив Pangolin:cd /путь к директории/distrib/ unzip installer_rhel87-D-<версия Pangolin>-distrib.zip unzip owned-distrib.zip tar -xvf owned-distrib.tar.gzЛибо найдите пакеты
pangolin-dbms-<версия dbms>-<version>-rhel8.7.x86_64.rpm,pangolin-dbms-<версия dbms client>-client-<version>-rhel8.7.x86_64.rpmв архиве самостоятельно:installer_rhel87-D-<версия Pangolin>-distrib.zip/owned-distrib.zip/owned-distrib.tar.gz/pangolin-dbms-<версия dbms>-<версия Pangolin>-rhel8.7.x86_64.rpm installer_rhel87-D-<версия Pangolin>-distrib.zip/owned-distrib.zip/owned-distrib.tar.gz/pangolin-dbms-<версия dbms client>-client-<версия Pangolin>-rhel8.7.x86_64.rpmУстановите пакеты
pangolin-dbms-<версия dbms>-<версия Pangolin>-rhel8.7.x86_64.rpm,pangolin-dbms-<версия dbms client>-client-<версия Pangolin>-rhel8.7.x86_64.rpm:sudo yum install /полный_путь_до_пакета/distrib/pangolin-dbms-<версия dbms>-<версия Pangolin>-rhel8.7.x86_64.rpm sudo yum install /полный_путь_до_пакета/distrib/pangolin-dbms-<версия dbms client>-client-<версия Pangolin>-rhel8.7.x86_64.rpmСоздайте директорию
$PGDATA,/pgerrorlogsи/opt/pangolin_license:sudo mkdir -p /pgdata/06/ sudo chown -R postgres:postgres /pgdata/06/ sudo mkdir -p /pgerrorlogs/06/ sudo chown postgres:postgres /pgerrorlogs/06/ sudo mkdir -p /opt/pangolin_license/ sudo chown postgres:postgres /opt/pangolin_license/Добавьте файл с лицензией
license.jsonв папку/opt/pangolin_license/с правамиpostgres:postgres:sudo mv /путь_до_файла/license.json /opt/pangolin_license/ sudo chown postgres:postgres /opt/pangolin_license/license.jsonПереключитесь на пользователя
postgres:sudo su - postgresОткройте файл
.bash_profileпри помощи текстового редактора и добавьте строку окружения (в примерах используются текстовые редакторы vi и nano, вы можете повторить все действия, описанные ниже, либо можете использовать удобный вам текстовый редактор):Открытие файла
.bash_profileпри помощи текстового редактора vi:vim ~/.bash_profileДля редактирования файла в текстовом редакторе vi опуститесь в конец файла и нажмите клавишу i для перехода в режим редактирования, затем вставьте (правой кнопкой мыши) команды:
umask 022 export LD_LIBRARY_PATH=/usr/pangolin-<версия Pangolin>/lib export PATH=$PATH:/usr/pangolin-<версия Pangolin>/bin export PG_PLUGINS_PATH=/usr/pangolin-<версия Pangolin>/lib export PGHOME=/usr/pangolin-<версия Pangolin> export PGDATABASE=postgres export PGUSER=postgres export PGHOST=127.0.0.1 export PGPORT=5432 export PGCLIENTENCODING=UTF8 export CLNAME=clustername export PGDATA=/pgdata/06/data export MANPATH=$MANPATH:$PGHOME/share/manПосле выполнения вышеперечисленных действий, сохраните изменения:
Нажмите клавишу Esc для выхода из режима редактирования.
Нажмите сочетание клавиш Ctrl + :.
Введите wq для сохранения файла и выхода из него.
При возникновении проблем с редактором vi, можно использовать текстовый редактор nano:
Откройте файл:
nano ~/.bash_profileВставьте команды:
umask 022 export LD_LIBRARY_PATH=/usr/pangolin-<версия Pangolin>/lib export PATH=$PATH:/usr/pangolin-<версия Pangolin>/bin export PG_PLUGINS_PATH=/usr/pangolin-<версия Pangolin>/lib export PGHOME=/usr/pangolin-<версия Pangolin> export PGDATABASE=postgres export PGUSER=postgres export PGHOST=127.0.0.1 export PGPORT=5432 export PGCLIENTENCODING=UTF8 export CLNAME=clustername export PGDATA=/pgdata/06/data export MANPATH=$MANPATH:$PGHOME/share/manСохраните изменения:
Нажмите сочетание клавиш Ctrl + O.
Нажмите клавишу Enter.
Нажмите сочетание клавиш Ctrl + X.
Перечитайте переменные окружения для
bash_profile:. ~/.bash_profileРазверните СУБД:
обычное окружение:
initdb -k -D /pgdata/06/data/окружение 1С:
initdb --data-checksums --locale ru_RU.UTF-8 --username postgres --pgdata $PGDATA # для 1С крайне важно указывать локаль, в будущем она будет использоваться для инициализации БД, что создает 1С
Отредактируйте конфигурационный файл
$PGDATA/postgresql.confс помощью текстового редактора (добавьте в конец файла).Откройте файл
postgresql.confпри помощи текстового редактора vi:vi $PGDATA/postgresql.confРабота в текстовом редакторе vi была описана в п.8, на данном шаге при помощи тех же команд добавьте следующие параметры в конец файла:
обычное окружение:
listen_addresses = '*' port = 5432 max_connections = 100 superuser_reserved_connections = 3 enabled_extra_auth_methods = 'peer, trust'для окружения 1С рекомендуются следующие параметры:
listen_addresses = '*' port = 5432 max_connections = 200 # с учетом ожидаемого количества superuser_reserved_connections = 3 optimize_for_1c = 'on' shared_preload_libraries = 'pg_stat_statements, plantuner' # Параметры памяти имеет смысл скорректировать с учетом ваших КТС # huge_pages = on # shared_buffers = 96GB # от 1/4 до 2/5 RAM, если не используются HugePages - не более 128GB # effective_cache_size = 288GB # 3/4 RAM temp_buffers = 256MB maintenance_work_mem = 256MB wal_buffers = 64MB work_mem = 128MB max_worker_processes = 8 # равно количеству ядер max_parallel_workers_per_gather = 4 max_parallel_workers = 8 # равно количеству ядер max_parallel_maintenance_workers = 4 fsync = 'on' checkpoint_completion_target = 0.9 checkpoint_timeout = 30min wal_level = 'minimal' max_wal_senders = 0 wal_compression = 'off' wal_sync_method = 'fdatasync' synchronous_commit = 'off' commit_delay = 1000 commit_siblings = 5 # min_wal_size = 100GB # max_wal_size = 100GB bgwriter_delay = 20ms bgwriter_lru_maxpages = 400 bgwriter_lru_multiplier = 4.0 autovacuum = 'on' track_counts = 'on' autovacuum_max_workers = 4 # 1/4 количества ядер autovacuum_naptime = 20s max_locks_per_transaction = 1000 max_prepared_transactions = 1000 max_files_per_process = 8000 effective_io_concurrency = 200 from_collapse_limit = 11 join_collapse_limit = 11 random_page_cost = 1.1 geqo = 'on' geqo_threshold = 12 password_encryption = 'md5' logging_collector = 'on' log_min_messages = 'log' log_statement = 'none' pgaudit.log = 'none' performance_insights.enable = 'off' password_policies_enable = 'off' pg_outline.enable = 'off' enable_monitor_object_modification_date = 'off' object_modification_date_keep_interval = '1 week' enabled_sec_admin_extra_auth_methods = 'md5,trust,peer,cert' enabled_extra_auth_methods = 'md5,trust,peer,cert' ssl = 'off' track_io_timing = 'off' row_security = 'off' standard_conforming_strings = 'off' escape_string_warning = 'off' plantuner.fix_empty_table = on
По аналогии с редактированием предыдущего файла отредактируйте конфигурационный файл
pg_hba.conf:Откройте файл
pg_hba.confпри помощи текстового редактора vi:vi $PGDATA/pg_hba.confВставьте строки:
local all all peer host all all 0.0.0.0/0 trust
Запустите экземпляр Pangolin:
pg_ctl -D /pgdata/06/data/ -l /pgerrorlogs/06/postgresql.log startПримечание:
Возможные ошибки:
Не читается файл лицензий:
Check license file "/opt/pangolin_license/license.json" : file is not foundРешение:
Проверьте доступность под пользователем операционной системы
postgresфайла лицензии:Указание в переменной
PG_LICENSE_PATH=/opt/pangolin_license/[postgres@srv ~]$ echo $PG_LICENSE_PATH /opt/pangolin_license/При необходимости исправьте:
export PG_LICENSE_PATH=/opt/pangolin_license/Доступность файла лицензии:
[postgres@srv ~]$ ls -la $PG_LICENSE_PATH total 12 drwxr-xr-x 2 postgres postgres 4096 Apr 12 12:17 . drwxr-xr-x. 5 root root 4096 Apr 12 12:14 .. -rw-r--r-- 1 postgres postgres 500 Apr 12 12:17 license_trial_202407.json
Скопированы некорректные символы в конфигурационный файл. После запуска в логе появляется запись об ошибках чтения конфигурационного файла в
$PGDATA/log/*. Например:2024-04-12 12:25:50.689 MSK [60403] КОНТЕКСТ: строка 100 файла конфигурации "/pgdata/06/data/pg_hba.conf" 2024-04-12 12:25:50.689 MSK [60403] СООБЩЕНИЕ: неверный метод проверки подлинности " "Решение:
Скорее всего привнесены лишние символы при копировании строк из инструкции. Необходимо либо скорректировать, либо удалить проблемные строки и ввести их с клавиатуры например через vi.
Выполните команду
psql:postgres@srv-64-44:~$ psql psql (15.5) Type "help" for help. postgres=#
Автоматизированная установка Pangolin#
В составе дистрибутива поставляется инсталлятор, установка возможна как с отдельного хоста, так и с master/replica планируемого кластера. Поддерживается установка cluster и standalone конфигурации.
Примечание:
Конфигурационные файлы и сценарии, приведенные в данном руководстве, являются примерами. Значение приведенных параметров и переменных зависит от конкретного случая установки.
Для осуществления автоматизированной установки Pangolin, выполните последовательно шаги, описанные в подразделах ниже.
Подготовка виртуального окружения#
Выполните шаги:
Установите виртуальное окружение:
python3 -m venv install_venvПримечание:
install_venvздесь и далее - имяvenv. Может быть любым.Активируйте виртуальное окружение:
source /opt/pangolin-ansible-venv-controller/bin/activateСкачайте дистрибутив из Nexus, распакуйте его и перейдите в каталог
distrib:wget --user <username> --ask-password <distribuitive_url> && \ mkdir distrib && \ tar -xvf <distriburive.tar.gz> -C ./distrib/
Подготовка rpm/deb-пакетов#
Скрипты автоматизации установки Pangolin поддерживают два варианта развертывания rpm/deb-пакетов:
rpm/deb-пакеты находятся в репозитории (по умолчанию);
rpm/deb-пакеты находятся непосредственно на серверах, на которые будет производиться установка.
rpm/deb-пакеты находятся в репозитории#
Пользователь может как создать локальный репозиторий, так и поместить rpm/deb-пакеты Pangolin в свой репозиторий.
Действия по настройке локального репозитория (это действие нужно сделать для всех хостов, на которых будет производиться установка):
Выполните команду:
dnf install -y createrepoПримечание:
При установке на ОС Altlinux используйте пакетный менеджер -
apt-get. При установке на ОС Astra - пакетный менеджерapt. На других ОС используйтеdnfилиyum.Создайте файл
/etc/yum.repos.d/local_repo.repoс содержимым:[local_repo] name=local_repo baseurl=file:///components_repo/local_repo/RPMS.local/ gpgcheck=0 enabled=1Создайте директорию, где будут храниться rpm-пакеты:
mkdir -p /components_repo/local_repo/RPMS.local/Перенесите все rpm-пакеты в данную директорию.
Произведите инициализацию локального репозитория:
createrepo /components_repo/local_repo/RPMS.
rpm/deb-пакеты находятся непосредственно на серверах#
Для подготовки к установке Pangolin:
Перенесите на все целевые хосты все rpm/deb-пакеты в дистрибутиве. Например в директорию
/path/to/dir/rpm.Внимание!
Нужно перенести именно rpm/deb-пакеты, а не весь дистрибутив на целевые хосты.
Чтобы скрипты ориентировались на директорию с rpm/deb-пакетами, добавьте и настройте параметр в конфигурационном файле (
custom_config_initial.yml):pangolin_rpms_path: /path/to/dir/rpmПереместите rpm-пакет
pangolin-ansible-venv-controlled*.rpmна целевой хост, данный пакет находится в дистрибутиве3rdparty.
Подготовка конфигурационных файлов#
Заполнение inventory-файлов#
Заполните inventory-файл в зависимости от конфигурации установки.
Файл hosts.ini заполняется в соответствии с шаблоном:
для standalone находится по пути:
installer/inventories/standalone/hosts.ini;для cluster находится по пути:
installer/inventories/cluster/hosts.ini.
Файл hosts.ini состоит из нескольких групп (имена определены в скобках), которые используются для классификации и определения того, какие хосты будут использоваться. Для установки необходимо заполнить переменные группы postgres_nodes и arbiter_nodes (для кластерной конфигурации):
ansible_host— в случае установки по IP-адресу, укажитеip_address, в случае установки по имени DNS укажитеhostname;ansible_user— имя пользователя для использования при подключении к хосту. Должен иметь права для эскалации доroot, то есть должен иметь возможность выполнять все команды от имениroot;переменная
ansible_passwordдолжна содержать пароль пользователя в чистом виде или имя переменной, которая будет содержать зашифрованный с помощьюansible-vaultпароль.
Внимание!
Пароль пользователя следует указывать в кавычках для того, чтобы избежать конфликтов при цитировании специальных символов. Пользователь, указанный в файле
hosts.ini, должен обладать правамиsudo+nologin.
Ниже представлены примеры файла hosts.ini для standalone и cluster архитектур.
hosts.ini для standalone-конфигурации:
[standalone:children]
postgres_group
[postgres_group:children]
postgres_nodes
[postgres_group:vars]
ansible_connection=ssh
[postgres_nodes]
master ansible_host=<IP-адрес> ansible_user=<Имя пользователя> ansible_password="<Пароль>"
hosts.ini для кластерной конфигурации:
[cluster:children]
postgres_group
arbiter_group
[postgres_group:children]
postgres_nodes
[arbiter_group:children]
arbiter_nodes
[postgres_group:vars]
ansible_connection=ssh
[arbiter_group:vars]
ansible_connection=ssh
[postgres_nodes]
master ansible_host=<IP-адрес> ansible_user=<Имя пользователя> ansible_password="<Пароль>"
replica ansible_host=<IP-адрес> ansible_user=<Имя пользователя> ansible_password="<Пароль>"
[arbiter_nodes]
arbiter ansible_host=<IP-адрес> ansible_user=<Имя пользователя> ansible_password="<Пароль>"
Внимание!
Если в файле
hosts.iniпеременнаяansible_passwordсодержитansible-vault, то пароль необходимо зашифровать. Ниже приведен пример шифрования текстаpasswordtestс помощьюansible-vault:ansible-vault encrypt_string passwordtest New Vault password: Confirm New Vault password: !vault | $ANSIBLE_VAULT;1.1;AES256 {зашифрованный пароль} Encryption successful
В случае, когда пароли для хостов групп postgres_group и arbiter_group совпадают, достаточно вывод команды ansible-vault поместить в inventory-файл сluster.yml/standalone.yml, расположенный в каталоге inventories/(standalone/cluster)/group_vars. Аналогичным образом необходимо перешифровать пароли в файле custom_file_sample.yml пример файла тем же ключом, которым был зашифрован пароль для учетной записи в текущем шаге.
Примечание:
Узнать подробнее о Ansible inventory можно в документации Ansible.
Заполнение файла конфигурации custom_config_sample.yml#
Пример конфигурационного файла custom_config_sample.yml, который можно использовать для развертывания продукта со значениями по умолчанию или с минимальными корректировками, находится в каталоге installer/templates/custom_config_sample.yml.
Поскольку custom_config_sample.yml является примером и вариантом готового решения, некоторые секции и параметры были перенесены в custom_config_initial.yml - конфигурационный файл, содержащий все динамически настраиваемые параметры СУБД Pangolin. При необходимости их можно переопределить в файле custom_config_sample.yml.
Пример заполнения custom_config_sample.yml:
# для конфигурации с применением хранилища ETCD
patroni_yml:
etcd:
hosts: [ <IP-адрес-1>, <IP-адрес-2>, <IP-адрес-3>] # укажите IP-адреса хостов кластера. Обычно это master, replica, arbiter.
port: 2379 # укажите порт.
# для всех конфигураций
pip_repository:
index_url: http://<hostname>/altlinux_trusted_repo/mirror/pypi_2/simple/
trusted_host: <hostname>
Внимание!
Для etcd по умолчанию рекомендовано использовать порт 2379.
Сгенерируйте сертификаты, в случае, если в настраиваемом конфигурационном файле выше было выставлено значение для параметра: mtls_support: true и/или pkcs12_plugin_enable: true.
На текущий момент кластер можно развернуть с включенной аутентификацией SSL и без нее. Целью включения аутентификации является обеспечение безопасного взаимодействия компонентов внутри кластера.
Если активирован параметр pkcs12_plugin_enable: true, то сертификаты должны быть сгенерированы в формате PKCS#12 или будут получены из Secret Management System (далее – SecMan), в зависимости от заполненных значений в пользовательском конфигурационном файле. Подробнее читайте в документе «Руководстве по системному администрированию», раздел «Использование сертификатов PKCS#12 в кластере Pangolin».
Для поиска или генерации сертификата в SecMan необходимо активировать параметр use_remote_pki: true и заполнить атрибуты в разделе p12_secman: для каждого сертификата.
При включенном параметре (mtls_support: true) скрипты развертывания и обновления продукта определяют расположение сертификатов по путям из параметров соответствующего компонента (параметры из секции «3.2. НАСТРОЙКИ БЕЗОПАСНОГО ПОДКЛЮЧЕНИЯ (SSL)» (custom_config_initial.yml) – pg_certs_pwd) и проверяют их наличие.
Если сертификат отсутствует по указанному пути, то будет выведена блокирующая ошибка. Примеры ошибок:
"{{ control_name }}.FAIL__Файл сертификата 'root.crt' не найден на хосте. Проверьте наличие файла и значение в пользовательском конфигурационном файле - 'custom_config_sample.yml'__{{ control_name }}.FAIL"
Ниже приведен пример скрипта для генерации сертификатов и распространения их на указанные виртуальные машины:
#!/bin/sh
# IP/DNS-записи хостов.
hosts_list=(127.0.0.1 127.0.0.2 127.0.0.3)
# Пароль пользователя с root правами.
ssh_password=(TestPassword!)
# Пользователь с root-правами.
ssh_user=(admin_dev)
mkdir ssl
cd ssl
openssl req -new -nodes -text -out ./root.csr -keyout ./root.key -subj "/CN=PGSEdevCA"
openssl x509 -req -in ./root.csr -text -days 3650 -extfile /etc/pki/tls/openssl.cnf -extensions v3_ca -signkey ./root.key -out ./root.crt
openssl req -new -nodes -text -out ./client.csr -keyout ./client.key -subj "/CN=postgres"
openssl x509 -req -in ./client.csr -text -days 3650 -CA ./root.crt -CAkey ./root.key -CAcreateserial -out ./client.crt
openssl req -new -nodes -text -out ./patroni.csr -keyout ./patroni.key -subj "/CN=patroni"
openssl x509 -req -in ./patroni.csr -text -days 3650 -CA ./root.crt -CAkey ./root.key -CAcreateserial -out ./patroni.crt
openssl req -new -nodes -text -out ./patronietcd.csr -keyout ./patronietcd.key -subj "/CN=patronietcd"
openssl x509 -req -in ./patronietcd.csr -text -days 3650 -CA ./root.crt -CAkey ./root.key -CAcreateserial -out ./patronietcd.crt
openssl req -new -nodes -text -out ./pgbouncer.csr -keyout ./pgbouncer.key -subj "/CN=pgbouncer"
openssl x509 -req -in ./pgbouncer.csr -text -days 3650 -CA ./root.crt -CAkey ./root.key -CAcreateserial -out ./pgbouncer.crt
rm *.csr
######Copy_certs_on_nodes_and_generate_server_cert
for host in ${hosts_list[@]}
do
sshpass -p ${ssh_password} ssh -o StrictHostKeyChecking=no -p 22 ${ssh_user}@${host} 'sudo rm -rf /pg_ssl && sudo mkdir /pg_ssl && sudo chown $(whoami):$(whoami) /pg_ssl'
sshpass -p ${ssh_password} scp ./* ${ssh_user}@${host}:/pg_ssl
sshpass -p ${ssh_password} ssh -o StrictHostKeyChecking=no -p 22 ${ssh_user}@${host} 'cat << EOT >> /pg_ssl/server.conf
[req]
req_extensions = v3_req
distinguished_name = req_distinguished_name
[req_distinguished_name]
[ v3_req ]
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName = @alt_names
[ ssl_client ]
extendedKeyUsage = clientAuth, serverAuth
basicConstraints = CA:FALSE
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid,issuer
subjectAltName = @alt_names
[ v3_ca ]
basicConstraints = CA:TRUE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName = @alt_names
authorityKeyIdentifier=keyid:always,issuer
[alt_names]
EOT'
sshpass -p ${ssh_password} ssh -o StrictHostKeyChecking=no -p 22 ${ssh_user}@${host} 'cd /pg_ssl && echo DNS.1 = $(hostname -f) >> server.conf && echo IP.1 = $(hostname -i) >> server.conf && openssl req -new -nodes -text -out ./server.csr -keyout ./server.key -subj "/CN=$(hostname -f)" -config $(echo ./server.conf)'
sshpass -p ${ssh_password} ssh -o StrictHostKeyChecking=no -p 22 ${ssh_user}@${host} 'cd /pg_ssl && openssl x509 -req -in ./server.csr -text -days 3650 -CA ./root.crt -CAkey ./root.key -CAcreateserial -out ./server.crt -extensions ssl_client -extfile $(echo ./server.conf)'
sshpass -p ${ssh_password} ssh -o StrictHostKeyChecking=no -p 22 ${ssh_user}@${host} 'sudo chmod 0600 /pg_ssl/*.key && sudo chmod 0644 /pg_ssl/*.crt'
###/etc/pki/ca-trust/source/anchors/ - 'RedHat' /etc/pki/tls/openssl.cnf\ - 'Altlinux' ###
sshpass -p ${ssh_password} ssh -o StrictHostKeyChecking=no -p 22 ${ssh_user}@${host} 'sudo cp /pg_ssl/root.crt /etc/pki/ca-trust/source/anchors/ && sudo update-ca-trust'
done
Данные сертификаты не будут подписаны, но будут являться минимальными требуемыми для установки. После установки продукта Pangolin необходимо подписать данные сертификаты в удостоверяющем центре (подробная информация о генерации сертификатов в документе «Руководство администратора», раздел «Генерация сертификатов»).
Примечание:
Скрипты развертывания не осуществляют проверку валидности сертификатов.
Установка с фиксированным UID/GID для пользователей#
Начиная с версии 6.3.0 была добавлена возможность установки с фиксированным UID/GID для пользователей. Для этого добавлены параметры:
kmadmin_user_group.is_enabled: переменная типа boolean, служащая для включения функциональности. ЗначениеTrueпринимается как флаг активации - в этом случае пользователь будет создан с указанными значениямиUID/GID. По умолчанию используется значениеFalse;pangolin_users_group.is_enabled: переменная типа boolean, включение функциональности для группыpangolin_users_group;pangolin_users_group.group_gid: переменная типа int, определяющая GID для группыpangolin_users_group. Значение по умолчанию: 226;kmadmin_user_group.group_gid: целочисленная переменная, содержащая значениеGIDдля пользователя гр. По умолчанию используется значение 126.kmadmin_user_group.user_uid: целочисленная переменная, содержащая значениеUIDдля пользователя. По умолчанию используется значение 126.
При развертывании из RPM/DEB-пакетов функциональность активируется через объявление соответствующих переменных окружения.
Например, для пользователя kmadmin_pg перед установкой из пакета задаются $KMADMIN_PG_USER_GUID и $KMADMIN_PG_GROUP_GUID для UID/GID. Объявление (наличии в пространстве имен) этих переменных включает функциональность, при этом UID/GID берутся из заданных значений.
Если переменные не определены, значение для UID/GID выбираются из доступных.
Установка без наличия DNS сервера на устанавливаемых узлах#
Начиная с версии 6.4.2, был добавлен параметр used_fqdn_host, отвечающий за установку СУБД Pangolin в средах, где не предусмотрен DNS-сервер. По умолчанию данный параметр включен, и скрипты автоматизации будут использовать DNS-сервер для установки продукта.
В случае наличия A-записи, равной DNS-имени hostname проверить работоспособность DNS-сервера можно командой dig hostname с узла, на котором будет запускаться ansible.
Пример:
➜ ~ dig srv-0-190.db.dev.sbt
; <<>> DiG 9.10.6 <<>> srv-0-190.db.dev.sbt
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 27230
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;srv-0-190.db.dev.sbt. IN A
;; ANSWER SECTION:
srv-0-190.db.dev.sbt. 3600 IN A {IP-адрес}
В случае отсутствия А-записи или наличия записи, не соответствующей имени hostname, нужно выключить параметр used_fqdn_host (установить в значение false). Далее запустить установку СУБД Pangolin. Результатом данных действий будет установленный продукт в кластерной или standalone-конфигурации с использованием IP-адресов вместо DNS-записи.
При установке параметр следует отключить в конфигурационном файле, установив его значение в false:
used_fqdn_host: false
Примечание:
Для корректной работы скриптов автоматизации необходимо, чтобы у пользователя был предварительно корректно настроен DNS-сервер, так как скрипты используют доменное имя в своей работе.
Запуск сценария установки#
Выполните шаги:
Заполните параметры, заключенные в
< >, запуститеplaybook_install.yamlиз директорииinstaller:ansible-playbook -vvv playbook_install.yaml \ -i inventories/<cluster||standalone>/hosts.ini \ -t <configuration> \ -e '{"as_TUZ":['tuz_1']}' \ --flush-cache \ --extra-vars 'local_distr_path=<path_to_distributive> \ installation_type=<cluster||standalone> \ PGPORT=5433 \ PGDATA=/pgdata/<major_version>/data \ PGLOGS=/pgerrorlogs/<major_version> \ clustername=clustername \ custom_config=templates/custom_config_sample.yml \ pangolin_license_path=/home/sbt_user/license_trial.json \ nolog=true'Пример заполненной команды для запуска
playbook_install.yamlв случае cluster-установки Pangolin:ansible-playbook -vvv playbook_install.yaml \ -i inventories/cluster/hosts.ini \ -t cluster-patroni-etcd-pgbouncer \ -e '{"as_admins":['admin_1', 'admin_2']}' \ -e '{"as_TUZ":['tuz_1']}' \ --flush-cache \ --extra-vars 'local_distr_path=/home/pprb_dev/distrib \ #каталог, в который распакован дистрибутив. installation_type=cluster \ PGPORT=5433 \ PGDATA=/pgdata/06/data \ PGLOGS=/pgerrorlogs/06 \ tablespace_name=tbl_name \ tablespace_location=/pgdata/06/tablespaces \ schema_name=shema \ db_name=first_db \ clustername=clustername \ custom_config=templates/custom_config_sample.yml \ nolog=true \ pangolin_license_path=/home/sbt_user/license_trial.json' #путь к файлу лицензииДождитесь окончания установки и деактивируйте виртуальное окружение:
deactivate
Если необходимо передать лог установки для анализа — перенаправьте stdout в файл, добавив > filename в конце команды ansible_playbook:
ansible_playbook -vvv playbook_install.yaml ... > ~/ansible_log.txt
Примечание:
pangolin_license_path- полный путь к файлу лицензии, например,pangolin_license_path=/home/admin/license_trial.json. Имя файла значения не имеет.Инсталлятор будет проверять валидность лицензии пяти основных типов:
license_standard_1C;
license_standard;
license_enterprise_1C;
license_enterprise;
license_trial.
Возможные варианты развертывания Pangolin описаны в разделе «Варианты развертывания Pangolin».
Примеры сценариев возможных вариантов установки#
В разделе приведены примеры сценариев возможных вариантов установки Pangolin.
Сценарий установки кластерного решения Pangolin с Pangolin Manager, etcd, Pangolin Pooler#
Команда запуска сценария:
ansible-playbook playbook_install.yaml \
-i inventories/cluster/hosts.ini \
-t cluster-patroni-etcd-pgbouncer \
-vv \
-e '{"as_admins":['admin_1', 'admin_2']}' \
-e '{"as_TUZ":['tuz_1']}' \
--extra-vars 'local_distr_path=${} \
installation_type=cluster \
pangolin_license_path=/home/admin/license_trial.json \
custom_config=templates/custom_config_sample.yml' \
--ask-vault-pass
Внимание!
После установки будут созданы символические ссылки для следующих директорий:
/pgdata/data -> /pgdata/0{major_version}
/usr/pangolin -> /usr/pangolin-<version>
/usr/pgsql-se-0{major_version} -> /usr/pangolin-<version>
Значения используемых в команде запуска сценария ключей:
-i— путь к inventory-файлу;-t— теги для запуска;-vv— уровень логирования Ansible. Может быть, как пустым, так и-vvvvvv, где запуск безv- минимальное логирование;-e,--extra-vars— переменные, которые по приоритету важнее переменных из inventory;--ask-vault-passили--vault-password-file— расшифровка зашифрованных файлов во время выполнения.
Внимание!
Для зашифровки паролей в примерах выше, использовался следующий ansible-vault пароль:
postgreSQL_SE_654321.
Используемые переменные:
as_admins— Active Directory логин или логины будущих администраторов АС. Если логинов несколько, то они указываются через запятую, без пробелов. Например,-e '{"as_admins":['admin, test_admin]}';as_TUZ— логины ТУЗ, которые будут созданы в результате установки. Если логинов несколько, то они указываются через запятую, без пробелов. Например,-e '{"as_TUZ":['tuz, test_tuz]}';local_distr_path— абсолютный путь к загруженному и распакованному дистрибутиву Pangolin;segment— сегмент сети;custom_config— абсолютный путь к файлу конфигурацииcustom_config_sample.yml.
Внимание!
Параметр инсталлятора
stand, ранее отвечавший за настройку DEV-стенда, с версии 5.5.0 исключен. Настройка DEV-стендов инсталлятором не производится.
Внимание!
В случае, если все пароли указывались в открытом виде, параметр
--ask-vault-passи--vault-password-file=название_файла_с_ключемдобавлять не нужно!
Внимание!
В случае, если вам необходимо развернуть стенд с дополнительными настройками ролевой модели, пользовательской БД, схемами и расширениями необходимо отдельно запустить
playbook_configure_roles.yamlили sh-скриптrun_configure.shразвертывания ролевой модели, который располагается в компонентеinstallerпо путиscripts_external/configure_roles/configure_roles/templates/role_BASIC/run_configure.sh. Ролевая модель и скрипты ее настройки описаны в документе «Руководство администратора», раздел «Ролевая модель и права доступа».
Сценарий развертывания дополнительных настроек ролевой модели, пользовательской БД и расширений с помощью ansible-роли#
Команда запуска сценария:
ansible-playbook playbook_configure_roles.yaml \
-i inventories/cluster/hosts.ini \
-t cluster-patroni-etcd-pgbouncer \
-vv \
-e '{"as_admins":['test_admin']}' \
-e '{"as_TUZ":['test_tuz']}' \
--extra-vars 'local_distr_path=${} \
PGPORT=${} \
PGDATA=${} \
PGLOGS=${} \
tablespace_name=${} \
tablespace_location=${} \
schema_name=${} \
db_name=${} \
custom_config=${}' \
--ask-vault-pass
Используемые переменные:
as_admins— Active Directory логин или логины будущих администраторов АС. Если логинов несколько, то они указываются через запятую, без пробелов. Например,-e '{"as_admins":['admin, test_admin]}';as_TUZ— логины ТУЗ, которые будут созданы в результате установки. Если логинов несколько, то они указываются через запятую, без пробелов. Например,-e '{"as_TUZ":['tuz, test_tuz]}';local_distr_path— абсолютный путь к загруженному и распакованному дистрибутиву Pangolin;PGPORT— порт для взаимодействия с базой данных Pangolin;PGDATA— полный путь к каталогу, где будет расположена инициализированная база данных;PGLOGS— полный путь к каталогу, где будут расположены логирующие файлы;pangolin_license_path— задает путь к директории, которая содержит лицензии или путь к конкретному файлу лицензии. Данная переменная окружения используется самим сервером и его утилитами для получения данных об используемой лицензии. По умолчанию используется директория/opt/pangolin_license;tablespace_name— имя табличного пространства, которое будет создано в результате установки;tablespace_location— полный путь к каталогу, где будет расположено созданное табличное пространство;schema_name— имя схемы, которая будет создана в результате установки;db_name— имя базы данных, которая будет создана в результате установки;custom_config— абсолютный путь к файлу конфигурацииcustom_config_sample.yml;
Внимание!
В случае, если не планируется использовать
custom_config, есть возможность настройки параметров запуска через файлvariables.yml, расположенный в ролиconfigure_roles(scripts_external/configure_roles/group_vars/variables.yml).
Cценарий развертывания дополнительных настроек ролевой модели, пользовательской БД и расширений с помощью запускаемого bash-скрипта#
Команда запуска скрипта:
sh ./role_BASIC/run_configure.sh -d First_db -s Sch1 -t Tbl_t -l /pgdata/06/tablespaces -m <IP-адрес> -r <IP-адрес> -p <Порт> -a 'user1 user2' -u 'user3 user4' -w /home/postgres/role_BASIC -c "0,30 * * * *" -g "'as_admin_pass':SCRAM-SHA-256$4096:2H6ypfV3DJP0LUZLrSnPsA==$yOIhGySEsNiY9p91PkJ5a2/kUQhxAwzUAQcjwCHov3A=:gd7X+KDJ+4GY44H9Xelan5dkhLwLLyDZLrhw4LhmDo8= 'as_tuz_pass':SCRAM-SHA-256$4096:TTysuRbQcMM3tOQAoR7LWg==$t89DzT7Y92HXMQxolmGXxG8AGQPvu/yDWV4leOAXiO0=:0vZGdq40uKFLLzfzB2JJ9SD1Ei8rxSObHUlPUcdHByM=" -f "'pg_profile':True 'rotate_password':True 'psql_lockmon_is_enable':True" -e 'infinity' -v 'TEMPORARY' -k 'backup_user' -z false -o 'en_US.UTF-8' -n 'postgres'
Используемые параметры:
d,dbname– имя пользовательской БД;s,schname– имя пользовательской схемы;t,tsname– имя пользовательского табличного пространства;l,tsloc- путь к табличному пространству;m,mhost- ip-адрес хоста мастера (данный параметр является обязательным, так как используется для настройки расписания pg_cron);r,rhostip-адрес хоста реплики (данный параметр является обязательным, так как используется для настройки расписания pg_cron);p,port- порт PostgreSQL;a,asadm– список ТУЗ as_admin;u,astuz- список ТУЗ as_TUZ;w,way- путь к папке со скриптами конфигурирования (данный параметр является обязательным);c,cronp- период времени для cron job pg_profile;g,grpas- список паролей для УЗ (передается в виде словаря, например:as_admin_pass':passwd1 'zabbix_pass':passwd2);f,fchlst- список включаемой функциональности при развертывании (передается в виде словаря, например:'pg_profile':True 'rotate_password':False);e,expdt- параметр времени жизни УЗ (expire date);v,vrpas- флаг, указывающий на использование временных паролей;k,backusname- имя пользователя для резервного копирования (по умолчанию backup_user);z,tdeadm- включить/выключить TDE;o,locale- параметр для определения locale при создании пользовательской БД (должен совпадать с параметром, установленным при развертывании);n,prdbname- имя пользовательской БД, где будет создан pg_profile.
Действия, которые необходимо выполнить, в случае неудачной установки#
В случае, если установка прошла неудачно:
Перед началом новой установки необходимо очистить КТС. Для этого выполните команду приведенную в разделе «Удаление» текущего документа.
Очистите файл
./installer/cache.json, а также добавьте ключ--flush-cacheпри повторном запуске установки.
Разделение клиентской и серверной частей 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-{version}-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.
etcd#
В кластере Pangolin для хранения информации о состоянии Pangolin Manager используется хранилище etcd (устанавливается инсталлятором). Поддерживаема версия пакета под разных ОС указана на странице «Системные требования».
sudo systemctl yum install etcd
Настройка etcd#
Для настройки сервиса откройте файл параметров etcd.service и укажите в нем следующие параметры:
Sudo vi /etc/systemd/system/etcd.service
[Unit]
Description=etcd Server
After=network.target
After=network-online.target
Wants=network-online.target
[Service]
Type=notify
WorkingDirectory=/var/lib/etcd/
EnvironmentFile=-/etc/etcd/etcd.conf
User=etcd
### set GOMAXPROCS to number of processors
ExecStart=/bin/bash -c "GOMAXPROCS=$(nproc) /usr/bin/etcd"
Restart=on-failure
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
node-1 /etc/etcd/etcd.conf
[pprb_dev@tkle-pprb0100 ~]$ sudo cat /etc/etcd/etcd.conf | grep -v ^#
ETCD_DATA_DIR="/var/lib/etcd"
ETCD_LISTEN_PEER_URLS="http://<IP-адрес>:<Порт>"
ETCD_LISTEN_CLIENT_URLS="http://<IP-адрес>:<Порт>"
ETCD_NAME="node-01"
ETCD_HEARTBEAT_INTERVAL="1000"
ETCD_ELECTION_TIMEOUT="5000"
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://${HOST_VM1}:<Порт>"
ETCD_ADVERTISE_CLIENT_URLS="http://${HOST_VM1}:<Порт>"
ETCD_INITIAL_CLUSTER="node-01=http://${HOST_VM1}:<Порт>,node-02=http://${HOST_VM2}:<Порт>,node-03=http://${HOST_VM3}:<Порт>"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_INITIAL_CLUSTER_STATE="new"
node-02 /etc/etcd/etcd.conf
[pprb_dev@tkle-pprb0095 ~]$ sudo cat /etc/etcd/etcd.conf | grep -v ^#
ETCD_DATA_DIR="/var/lib/etcd"
ETCD_LISTEN_PEER_URLS="http://<IP-адрес>:<Порт>"
ETCD_LISTEN_CLIENT_URLS="http://<IP-адрес>:<Порт>"
ETCD_NAME="node-02"
`ETCD_HEARTBEAT_INTERVAL`="1000"
ETCD_ELECTION_TIMEOUT="5000"
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://${HOST_VM2}:<Порт>"
ETCD_ADVERTISE_CLIENT_URLS="http://${HOST_VM2}:<Порт>"
ETCD_INITIAL_CLUSTER="node-01=http://${HOST_VM1}:<Порт>,node-02=http://${HOST_VM2}:<Порт>,node-03=http://${HOST_VM3}:<Порт>"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_INITIAL_CLUSTER_STATE="new"
node-03 /etc/etcd/etcd.conf
[pprb_dev@tkle-pprb0081 ~]$ sudo cat /etc/etcd/etcd.conf | grep -v ^#
ETCD_DATA_DIR="/var/lib/etcd"
ETCD_LISTEN_PEER_URLS="http://<IP-адрес>:<Порт>"
ETCD_LISTEN_CLIENT_URLS="http://<IP-адрес>:<Порт>"
ETCD_NAME="node-03"
ETCD_HEARTBEAT_INTERVAL="1000"
ETCD_ELECTION_TIMEOUT="5000"
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://${HOST_VM3}:<Порт>"
ETCD_ADVERTISE_CLIENT_URLS="http://${HOST_VM3}:<Порт>"
ETCD_INITIAL_CLUSTER="node-01=http://${HOST_VM1}:<Порт>,node-02=http://${HOST_VM2}:<Порт>,node-03=http://${HOST_VM3}:<Порт>"
ETCD_INITIAL_CLUSTER_TOKEN="etcd-cluster"
ETCD_INITIAL_CLUSTER_STATE="new"
Описание параметров etcd.service:
ETCD_LISTEN_PEER_URLS— список ссылок, с которых собирается трафик одноранговых узлов;ETCD_LISTEN_CLIENT_URLS— список ссылок, с которых собирается трафик клиентов;ETCD_HEARTBEAT_INTERVAL— время (мс) периода проверки (heartbeat);ETCD_ELECTION_TIMEOUT— время (в мс) таймаута алгоритма выбора;ETCD_INITIAL_ADVERTISE_PEER_URLS— список ссылок пиров этого элемента кластера для передачи другим элемента кластера;ETCD_ADVERTISE_CLIENT_URLS— список ссылок клиентов этого элемента кластера для публичной передачи. Передаваемые ссылки клиентов будут доступны системам, взаимодействующим с кластером etcd. Клиентские библиотеки обрабатывают эти ссылки для подключения к кластеру etcd;ETCD_INITIAL_CLUSTER— исходная конфигурация кластера для начальной загрузки;ETCD_INITIAL_CLUSTER_STATE— исходное состояние кластера (newилиexisting);ETCD_INITIAL_CLUSTER_TOKEN— исходный токен кластера etcd во время начальной загрузки. При использовании нескольких кластеров позволяет избежать непреднамеренного взаимодействия между ними.
Обязательно рекурсивно смените владельца директории. Для этого выполните:
sudo chown -R etcd:etcd /var/lib/etcd/
Затем запустите на каждом узле кластера:
sudo systemctl daemon-reload
sudo systemctl start etcd.service
sudo systemctl status etcd.service
sudo journalctl -xe
Полезные функции#
Для быстрого просмотра проблем с кластером:
etcdctl cluster-health
Для просмотра структуры хранилища:
etcdctl ls --recursive --sort -p /service/clustername
где clustername - имя кластера базы.
Для просмотра всей структуры:
etcdctl ls --recursive /
Пример:
[pprb_dev@tkle-pprb0066 ~]$ etcdctl ls -r /
[pprb_dev ~]$ etcdctl ls -r /
/service
/service/clus
/service/clus/members
/service/clus/members/pg02
/service/clus/members/pg01
/service/clus/initialize
/service/clus/config
/service/clus/optime
/service/clus/optime/leader
/service/clus/history
/service/clus/leader
Для получения значения из параметра:
etcdctl -o extended get /service/clustername/leader
etcdctl -o extended get /service/clustername/members/
Автоматическое подключение СЗИ с помощью external-скрипта#
Общий механизм подключения вынесен в независимый external-скрипт внутри общих скриптов развертывания/обновления, к которым относятся:
playbook_configure_ist.yaml- осуществляет запуск сценария подключения СЗИ;custom_configure_ist.yml- пользовательский конфигурационный слой для настройки входных параметров.
Ansible-роль (configure_ist) для запуска процесса подключения СЗИ выглядит следующим образом:
tasks:
check.yml- файл с задачами для проверки состояния стенда, влияющими на успешное подключение СЗИ, проверка входных параметров;common_check.yml- файл с задачами для общей проверки состояния стенда. Проверки путей до конфигурационных файлов, путей до сертификатов;define_current_master.yml- файл с задачами для определения текущей конфигурации. В случае со стендом с Pangolin Manager, определение текущего master;install.yml- файл с задачами по подключению СЗИ;main.yml- файл с задачами, включает в себя вызов всех файлов в текущем каталоге;switch.yml- файл с задачами по остановке/запуску БД;
group_vars:
all.yml- переменные, используемые в данной роли по умолчанию;message.yml- переменные для вывода информации (INFO)/ошибок (FAIL);
cluster:
hosts.ini- обеспечивает возможность передачи параметров подключения к хостам. Содержит файлы для кластерной конфигурации;inventory.py- скрипт, обеспечивающий возможность заполнять inventory-файлы в автоматическом режиме;
standalone:
hosts.ini- обеспечивает возможность передачи параметров подключения к хостам. Содержит файлы для конфигурации standalone;inventory.py- скрипт, обеспечивающий возможность заполнять inventory-файлы в автоматическом режиме;
filter_plugins:
common_filters.py- скрипт для обработки входных данных;
library:
yedit- скрипт для работы с конфигурационным файлом Pangolin Manager. Поставляется в скомпилированном виде;pangolin_protect_init.py- скрипт для работы с утилитами setup_kms_credentials, initprotection.
Особенности логики работы некоторых параметров пользовательского конфигурационного файла:
параметр
secure_configконтролирует включение защиты конфигурации. Значение по умолчаниюtrue;параметр
admin_protectionподразумевает подключение только защиты от привилегированных пользователей. Значение по умолчаниюtrue.
Вышеупомянутые параметры располагаются в блоке TYPE IST.
Примечание:
Утилиты
initprotection/setup_kms_credentialsв external-скрипте обернуты в python-модуль. Это позволяет исключить возможные зависания при передаче некорректного значения и организацией вызова утилитыinitprotectionот linux-пользователя администратора безопасности.
Организована возможность передать имя пользователя с привилегиями на запуск инициализации механизма защиты данных и запуск инициализации подключения к защищенному хранилищу; контролируется параметром target_linux_user, значение по умолчанию: kmadmin_pg. Располагается в блоке SETTINGS INIT PROCESS. Скрипты по подключению СЗИ не вносят изменения в файл sudoers для данного пользователя и не корректируют права владельца на запуск утилит initprotection и setup_kms_credentials. Все необходимые права на запуск должны быть выданы до старта скриптов по подключению СЗИ.
Тип объединенного параметра адреса узла и порта VAULT VAULT_HOST_PORT соответствует list. Ограничений в количестве элементов списка нет. Располагаются в блоке CONNECTION VAULT PARAMETERS.
Параметр add_connection_string_to_hba отвечает за добавление строк подключения для созданных в процессе инициализации механизма защиты данных пользователей. Значение по умолчанию true. Располагается в блоке ADMIN PROTECTION SETTINGS. В случае, если параметр будет принимать значение false, в конфигурационный файл pg_hba.conf будет добавлен следующий комментарий:
# The connection string for security administrators is formed implicitly
Внимание!
С версии 5.5.0 параметры, которые в более ранних версиях задавали правила подключения для
admin_protection_users.sec_admin(sec_admin_hba_rule.connection,sec_admin_hba_rule.databases,sec_admin_hba_rule.network,sec_admin_hba_rule.auth) и параметрsec_admin_backup_networks(список хостов к подключениюadmin_protection_users.sec_admin_backup) были исключены.Тип параметра
sec_admin_hba_rule.networkизменен сstrнаlist.
Для каждой УЗ администратора безопасности можно задать индивидуальные правила подключения в параметре admin_protection_users. Параметры настройки располагаются в блоке ADMIN PROTECTION SETTINGS.
Параметр pg_encryption_keys_capacity задает настройку БД при подключении TDE; располагается в блоке CONFIGURATION PARAMETERS. Параметры dynamic_shared_memory_type и mkeychecker_delay в локальную конфигурацию не включены.
Запуск скрипта для подключения СЗИ#
Выполните шаги:
Активируйте виртуальное окружение для запуска скрипта:
source /opt/pangolin-ansible-venv-controller/bin/activateЗапустите external-скрипт подключения СЗИ, для этого выполните ansible-playbook
playbook_configure_ist.yaml.пример запуска для конфигурации standalone:
ansible-playbook playbook_configure_ist.yaml -i inventories/standalone/hosts.ini --extra-vars "custom_config=<Путь к пользовательскому конфигурационному файлу> utility_path=<Путь к каталогу с утилитами; входит в состав дистрибутива>" --flush-cache -vvпример запуска для кластерной конфигурации:
ansible-playbook playbook_configure_ist.yaml -i inventories/cluster/hosts.ini --flush-cache -vv
Проверки и информационные сообщения процесса подключения СЗИ#
Проверка работоспособности с Хранилищем секретов#
Чтобы убедиться в том, что при запуске СУБД Pangolin происходит запрос сертификатов, выполните следующие действия:
Запустите перехват сетевого трафика порту, где работает эмулятор SecMan:
tshark -PV -C Custom -w outfile -i ens192 -f "tcp port <Порт>" 2>&1 | lessЗапустите СУБД Pangolin вручную посредством
pg_ctl:pg_ctl -D /pgdata/0{major_version}/data startПроверьте в лог-файле сообщения о подключении к SecMan и получении сертификатов.
Ожидаемый результат:
Лог содержит сообщения:
LOG: Fetch certificate from SecMan. LOG: certificate, private key and certificate chain are loaded from PKCS#12 specified in fileОстановите перехват трафика, и проверьте наличие пакетов обмена данными с эмулятором SecMan.
Ожидаемый результат:
Также в сетевом трафике присутствуют пакеты обмена данными с эмулятором SecMan:
Transmission Control Protocol, Src Port: 8201, Dst Port: ... "certificate": "MIIJgQIBAzCCCUcGCSqGSIb3DQ... "expires": "2023-12-02T11:50:57Z",\n ...
Проверка корректной передачи в строку запуска ansible обязательных параметров#
Для корректной работы скрипта по подключению СЗИ необходимо передать в строку запуска два обязательных параметра:
custom_config- путь к пользовательскому конфигурационному файлу инсталлятора;utility_path- путь к каталогу utilities/, входящего в состав дистрибутива.
В случае ошибки выводится следующее сообщение:
"FAIL__Один из обязательных входных параметров: custom_config, utility_path не был задан при старте. Скорректируйте строку запуска ansible и произведите повторный запуск скрипта по подключению СЗИ.__FAIL"
Проверка пользователей#
Если пользователи для успешного сценария подключения СЗИ на стенде отсутствуют, то выводится блокирующая дальнейшее выполнение сценария ошибка:
"FAIL__На хосте {{ ansible_fqdn }} не был обнаружен пользователь {}. На текущий момент подключение СЗИ невозможно, необходимо выполнить проверку корректного заполнения параметра target_linux_user в пользовательском конфигурационном файле '{}' или произвести создание пользователя. После произведите повторный запуск скрипта по подключению СЗИ.__FAIL"
Проверка актуального master-узла#
На вход скрипту передается ряд параметров, в числе которых адреса master и replica-узлов. Информация может быть неактуальной, поэтому реализована проверка актуального master-узла. В случае, если адрес master-узла отличается от переданного на вход, то выводится ошибка, блокирующая дальнейшее выполнение сценария:
"FAIL__Текущий мастер в СУБД не соответствует значению, полученному из SM. На текущий момент подключение СЗИ невозможно, необходимо выполнить switchover__.FAIL"
Проверка файлов сертификатов#
Если файлы сертификатов отсутствуют, то выводится ошибка, блокирующая дальнейшее выполнение сценария:
"FAIL__Файл сертификата {} не найден на хосте {{ ansible_fqdn }}. Проверьте наличие файла.__FAIL"
Проверка переданного пути к конфигурационному файлу инсталлятора на корректность#
В случае ошибки выводится следующее сообщение:
"FAIL__Путь к конфигурации '{}' не должен зависеть от текущего каталога. Скорректируйте значение для параметра custom_file в строке запуска ansible и произведите повторный запуск скрипта по подключению СЗИ__FAIL"
Проверка наличия конфигурационного файла на управляющем узле#
При наличии файла выводится подсказка с информацией о расположении файла:
"INFO__Файл конфигурации '{}' найден.__INFO"
В случае, когда файл не найден, выводится сообщение вида:
"FAIL__Файл конфигурации '{}' не найден. Строка запуска ansible должна содержать параметр custom_file с корректным путем к пользовательскому конфигурационному файлу custom_file. Скорректируйте строку запуска ansible и произведите повторный запуск скрипта по подключению СЗИ.__FAIL"
Роль получает текущее значение следующих переменных:
Проверка наличия переменных окружения#
Переменные окружения, которые необходимо проверить:
PGDATA;PGHOME;CLNAME;PGPORT.
Если нет одного из параметров, то выводится ошибка, блокирующая дальнейшее выполнение сценария:
"FAIL__{PARAM} на хосте {{ ansible_fqdn }} отсутствует. Актуализируйте значение '{PARAM}' в файле /home/postgres/.bash_profile.__FAIL"
Проверка запуска СУБД#
Если СУБД Pangolin не запущена, то выводится ошибка, блокирующая дальнейшее выполнение сценария:
"FAIL__СУБД Pangolin не запущена. Произведите проверку состояния СУБД Pangolin на сервере.__FAIL"
Проверка запуска Pangolin Manager#
Если служба Pangolin Manager не запущена, то выводится ошибка, блокирующая дальнейшее выполнение сценария:
"FAIL__Служба Patroni не запущен. Произведите проверку состояния службы Pangolin Manager на сервере.__FAIL"
Проверка установки параметров в true#
Если ни один из параметров, которые контролируют подключение СЗИ, не выставлен в true, то выводится ошибка, блокирующая дальнейшее выполнение сценария:
"FAIL__Не удалось сформировать список СЗИ к подключению. Скорректируйте значения в пользовательском конфигурационном слое.__FAIL"
Проверка символьных ссылок#
Если символьная ссылка до плагина, контролирующего подключение к серверу VAULT, на стенде выставлена некорректно, то выводится ошибка, блокирующая дальнейшее выполнение сценария:
"FAIL__Подключение СЗИ на стенде возможно только с физическим(ими) сервером(ами) VAULT. Произведите проверку символьной ссылки до плагина: {}.__FAIL"
Проверка плагинов setup_kms_credentials/initprotection#
Если на стенде не был обнаружен плагин setup_kms_credentials или initprotection, то выводится ошибка, блокирующая дальнейшее выполнение сценария:
"FAIL__Плагин '{}' на стенде не обнаружен.__FAIL"
Проверка доступности серверов#
Если ни один сервер из заданного списка недоступен, то выводится ошибка, блокирующая дальнейшее выполнение сценария:
"Не удалось установить успешное подключение ни к одному из сервера(ов) VAULT. Проверьте корректность переданных параметров подключения к защищенному(ым) хранилищу(щам) VAULT в конфигурационном файле' {}'. После произведите повторный запуск скрипта по подключению СЗИ.__FAIL"
Проверка списка УЗ администраторов#
Если список УЗ администраторов безопасности был передан не в полном объеме, то выводится ошибка, блокирующая дальнейшее выполнение сценария:
"FAIL__Проверка входных параметров для инициализации механизма защиты данных не дала ожидаемый результат. Параметры УЗ администраторов безопасности были переданы неверно или не в полном объеме. Скорректируйте параметры в пользовательском конфигурационном файле '{}', относящиеся к конфигурированию УЗ администраторов безопасности и произведите повторный запуск скрипта по подключению СЗИ.__FAIL"
Проверка метода шифрования паролей УЗ администраторов безопасности#
Если пароли для УЗ администраторов безопасности были заданы не методом SCRAM-SHA-256, то выводится ошибка, блокирующая дальнейшее выполнение сценария:
"FAIL__Проверка входных параметров для инициализации механизма защиты данных не дала ожидаемый результат. Пароли УЗ администраторов безопасности не были переданы в виде SCRAM-SHA-256. Скорректируйте параметры паролей для УЗ администраторов безопасности в пользовательском конфигурационном файле '{}' и произведите повторный запуск скрипта по подключению СЗИ. __FAIL"
Проверка получения параметров VAULT_CLUSTER_ID, VAULT_LOGIN, VAULT_PASSWORD#
Роль получает на вход параметры:
VAULT_CLUSTER_ID;VAULT_LOGIN;VAULT_PASSWORD;VAULT_HOST_PORT.
Если для одного из них было передано пустое значение, то выводится ошибка, блокирующая дальнейшее выполнение сценария:
"FAIL__Проверка входных параметров для инициализации подключения к защищенному(ым) хранилищу(ам) VAULT не дала ожидаемый результат. Значение для параметра '{}' не должно быть пустым. Скорректируйте параметры '{}' в пользовательском конфигурационном файле '{}' и произведите повторный запуск скрипта по подключению СЗИ.__FAIL"
Проверка значение параметра VAULT_HOST_PORT#
Если значение для параметра VAULT_HOST_PORT было передано в некорректном формате, то выводится ошибка, блокирующая дальнейшее выполнение сценария:
"FAIL__Проверка входных параметров для инициализации подключения к защищенному(ым) хранилищу(ам) VAULT не дала ожидаемый результат. Значение для параметра '{}' указано в неверном формате. Скорректируйте параметры '{}' в пользовательском конфигурационном файле '{}' и произведите повторный запуск скрипта по подключению СЗИ.__FAIL"
Проверка наличия VAULT_CLUSTER_ID на защищенном хранилище VAULT#
В случае отсутствия выводится ошибка вида:
"FAIL__cluster id - '{}' в защищенном хранилище VAULT '{}' не обнаружен. Дальнейшее подключение невозможно. Произведите проверку на предмет корректно сконфигурированого id на сервере VAULT и произведите повторный запуск скрипта по подключению СЗИ.__FAIL"
Проверка значение параметра VAULT_CLUSTER_ID#
Если значение для параметра VAULT_CLUSTER_ID было передано в некорректном формате, то выводится ошибка, блокирующая дальнейшее выполнение сценария:
"FAIL__Проверка входных параметров для инициализации подключения к защищенному(ым) хранилищу(ам) VAULT не дала ожидаемый результат. Значение для параметра '{}' не должно начинаться или заканчиваться кавычками. Скорректируйте параметры '{}' в пользовательском конфигурационном файле '{}' и произведите повторный запуск скрипта по подключению СЗИ.__FAIL"
Получение общего списка параметров из защищенного хранилища VAULT#
При возникновении ошибок в ходе получения общего списка параметров защищенного хранилища выводится ошибка вида:
"FAIL__В процессе получения списка параметров из защищенного хранилища VAULT возникли ошибки: {}. Произведите проверку состояния VAULT сервера(ов) и произведите повторный запуск скрипта по подключению СЗИ.__FAIL"
Проверка корректного значения для параметра secure_config на защищенном хранилище VAULT#
Значение on устанавливается, если планируется подключение защиты параметров конфигурации; значение off используется, если подключение защиты параметров конфигурации не планируется.
В случае возникновения проблем выводится ошибка вида:
"FAIL__Для подключения выбранных СЗИ значение для параметра secure_config должен быть выставлено в {} на защищенном хранилище VAULT. Скорректируйте значение для параметра на защищенном хранилище VAULT и произведите повторный запуск скрипта по подключению СЗИ.__FAIL"
Проверка корректного значения для параметра is_tde_on на защищенном хранилище VAULT#
Если планируется подключение TDE, ожидается значение on/true. В случае, когда подключение TDE не планируется, устанавливается значение off/false.
При некорректном значении параметра выводится следующая ошибка:
"FAIL__Для подключения выбранных СЗИ значение для параметра is_tde_on должен быть выставлено в {} на защищенном хранилище VAULT. Скорректируйте значение для параметра на защищенном хранилище VAULT и произведите повторный запуск скрипта по подключению СЗИ.__FAIL"
Проверка идентичности значений pg_ident на защищенном хранилище VAULT и в локальном конфигурационном файле#
В случае неидентичности значений выводится ошибка вида:
"FAIL__Для подключения выбранных СЗИ значение для параметра pg_ident на защищенном хранилище VAULT должно соответствовать значению в локальном конфигурационном файле '{}/pg_ident.conf'. Синхронизируйте значения и произведите повторный запуск скрипта по подключению СЗИ.__FAIL"
Проверка готовности защищенного хранилища VAULT к последующему подключению выбранных СЗИ посредством secret_storage_client#
Утилита secret_storage_client входит в состав дистрибутива и располагается в папке installer/utilities/secret_storage_client_bundle/bin/. На вход скрипты, использующие данную утилиту для проверки, ожидают корректно переданный путь к каталогу с утилитами utilities/ в переменную utility_path в строку запуска ansible. При отсутствии утилиты по переданному пути в лог будет выведено предупреждающее сообщение. Процесс подключения при этом не останавливается.
В случае когда по переданному пути утилита не будет найдена, выведется предупреждение:
"WARNING__По преданному пути '{}' утилита secret_storage_client не обнаружена. Проверки готовности защищенного хранилища VAULT к подключению выбранных СЗИ будет пропущена.__WARNING"
Сообщения об успешном прохождении проверок#
"INFO__Список СЗИ к подключению успешно сформирован. В процессе работы скрипта будет подключено: {}.__INFO"
"INFO__Проверка плагина подключения к защищенному(ым) хранилищу(ам) VAULT завершилась успешно.__INFO"
"INFO__Проверка доступности VAULT сервера(ов) прошла успешно.__INFO"
Проверки и информационные сообщения после подключения выбранного списка СЗИ#
Проверка наличия конфигурационного файла VAULT после работы утилиты setup_kms_credentials#
В случае, когда файл не был найден, будет выведена ошибка:
"FAIL__Конфигурационный файл VAULT '{}' не был обнаружен. Причина может быть в некорректной работе утилиты setup_kms_credentials. Лог работы утилиты: {}__FAIL"
Проверка успешного подключения#
Если после работы утилиты setup_kms_credentials не удалось установить ни одного успешного подключения, то выводится следующее сообщение в лог:
"FAIL__Не удалось установить ни одного успешного подключения. Проверьте доступность сервера(ов) VAULT и корректность переданных параметров в пользовательском конфигурационном файле.__FAIL"
Проверка работа утилиты initprotection#
Если работа утилиты initprotection завершилась неудачей, то выводится следующее сообщение в лог:
"FAIL__В процессе инициализация механизма защиты данных возникли ошибки: '{}'.__FAIL"
Проверка состояния стенда#
Если проверка состояния стенда после работы скриптов не дала ожидаемый результат, то выводятся следующие сообщения в лог:
"FAIL__В процессе работы скриптов что-то пошло не так. TDE на текущем стенде не включено. Произведите проверку параметра по включению TDE в конфигурационном файле или на сервере(ах) VAULT.__FAIL"
"FAIL__В процессе работы скриптов что-то пошло не так. Защита конфигурации на текущем стенде не включена. Произведите проверку параметра secire_config на сервере(ах) VAULT.__FAIL"
"FAIL__В процессе работы скриптов что-то пошло не так. Защита от привилегированных пользователей на текущем стенде не включена.__FAIL"
Сообщения об успешном прохождении проверок#
"INFO__Проверка наличия конфигурации VAULT прошла успешно.__INFO"
"INFO__Инициализация механизма защиты данных выполнена успешно.__INFO"
"INFO__Итоговая проверка подключения TDE завершилась успешно.__INFO"
"INFO__Итоговая проверка подключения защиты конфигурации завершилась успешно.__INFO"
"INFO__Итоговая проверка подключения защиты от привилегированных пользователей завершилась успешно.__INFO"
Ручное подключение СЗИ#
В Pangolin реализована интеграция с KMS HashiCorp Vault и с локальным файловым хранением секретов. В данном разделе рассматривается ручное подключение таких функциональностей, как защита от привилегированных пользователей, TDE и защита конфигурации.
Внимание!
Подключение СЗИ осуществляется от пользователя с правами sudo, пользователя
postgresи пользователя администратора безопасности (в качестве примера взят kmadmin_pg).
Инструкция рассчитана на подключение СЗИ в СУБД Pangolin, начиная с версии 5.4.0.
Ручное подключение СЗИ с локальным файловым хранением секретов#
Общие подготовительные действия#
Выключите БД на время ручного подключения СЗИ:
Если конфигурация standalone:
sudo su - postgres /usr/pangolin/bin/pg_ctl stop -D /pgdata/0{major_version}/dataОжидаемый результат:
waiting for server to shut down.... done server stoppedЕсли конфигурация кластерная:
sudo su - postgres sudo systemctl stop pangolin-managerДействие сначала производится на реплике, затем на мастере.
Ожидаемый результат:
sudo su - postgres list + Cluster: clustername (7258206222218039502) ----+---------+---------+----+-----------+ | Member | Host | Role | State | TL | Lag in MB | +---------------------+--------------------------+---------+---------+----+-----------+ | <Адрес> | <Адрес>:<Порт> | Replica | stopped | | unknown | | <Адрес> | <Адрес>:<Порт> | Replica | stopped | | unknown | +---------------------+--------------------------+---------+---------+----+-----------+
Локальное конфигурирование#
Примечание:
Пропустите этот раздел, если требуется подключение только защиты от привилегированных пользователей.
Выполните шаги:
Создайте каталог для расширенной конфигурации, если такого нет. В кластерной конфигурации повторите это действие на реплике:
sudo su mkdir /etc/postgres chown postgres:kmadmin_pg /etc/postgres chmod 0731 /etc/postgresОжидаемый результат:
ls -la /etc | grep postgres drwx-wx--x 2 postgres kmadmin_pg 4096 Jul 21 18:00 postgresСоздайте файлы для хранения статических и динамических параметров. В кластерной конфигурации повторите это действие на реплике:
sudo su touch /etc/postgres/kms_dynamic_params.cfg touch /etc/postgres/kms_static_params.cfg chown kmadmin_pg:postgres /etc/postgres/kms_dynamic_params.cfg chown kmadmin_pg:postgres /etc/postgres/kms_static_params.cfg chmod 0640 /etc/postgres/kms_dynamic_params.cfg chmod 0640 /etc/postgres/kms_static_params.cfgОжидаемый результат:
ls -la /etc/postgres -rw-r----- 1 kmadmin_pg postgres 0 Jul 21 18:05 kms_dynamic_params.cfg -rw-r----- 1 kmadmin_pg postgres 0 Jul 21 18:06 kms_static_params.cfgФайл со статическими параметрами имеет простой текстовый формат, каждая строка содержит пару: <имя ключа> = <значение для данного ключа>. Файл может содержать следующие параметры:
ключ
actual_master_key– метка актуального мастер-ключа;wal_key– значение ключа шифрования WAL кластера;master_key_value_<timestamp>– значение мастер-ключа,<timestamp>– дата и время в формате ГГГГММДД_ЧЧммСС, где ГГГГ – год, ММ – месяц, ДД – день, ЧЧ – час в формате 24 часа, мм – минута, СС – секунда.
Сгенерируйте ключи с помощью утилиты
generate_encryption_key. В кластерной конфигурации повторите это действие на реплике:sudo su - kmadmin_pg /usr/pangolin/bin/generate_encryption_keyОжидаемый результат:
Key was generated successfully. Key: {хеш}Key was generated successfully. Key: {хеш}Заполните файл со статическими параметрами. В кластерной конфигурации повторите это действие на реплике:
sudo su - kmadmin_pg vim /etc/postgres/kms_static_params.cfgОжидаемый результат:
ls -la /etc/postgres/kms_static_params.cfg actual_master_key = master_key_value_00000000_000000_000 master_key_value_00000000_000000_000 = {хеш} wal_key = {хеш}Зашифруйте файл со статическими параметрами. В кластерной конфигурации повторите это действие на реплике:
sudo su - kmadmin_pg /usr/pangolin/bin/encrypt_params_fileОжидаемый результат:
Start to encrypt file: /etc/postgres/kms_static_params.cfg File /etc/postgres/kms_static_params.cfg was encrypted successfullyСоздайте файл с динамическими параметрами. В кластерной конфигурации повторите это действие на реплике:
sudo su - kmadmin_pg vim /etc/postgres/kms_dynamic_params.cfgОжидаемый результат:
ls -la /etc/postgres/kms_dynamic_params.cfg secure_config = off is_tde_on = off allowed_servers = enabled_sec_admin_extra_auth_methods = cert encrypt_new_tablespaces = ddl masking_mode = disabled password_encryption = scram-sha-256 password_policies_enable = on password_policy.allow_hashed_password = on password_policy.alpha_numeric = 3 password_policy.check_syntax = on password_policy.custom_function = password_policy.deny_default = off password_policy.expire_warning = 7 days password_policy.failure_count_interval = 0 password_policy.grace_login_limit = 0 password_policy.grace_login_time_limit = 3 days password_policy.illegal_values = on password_policy.in_history = 4 password_policy.lockout = on password_policy.lockout_duration = 24 hours password_policy.max_age = 0 password_policy.max_failure = 6 password_policy.max_inactivity = 0 password_policy.max_rpt_chars = 0 password_policy.min_age = 0 password_policy.min_alpha_chars = 0 password_policy.min_length = 16 password_policy.min_lowercase = 0 password_policy.min_special_chars = 1 password_policy.min_uppercase = 1 password_policy.password_strength_estimator_score = 3 password_policy.reuse_time = 365 days password_policy.track_login = 0 password_policy.transport_password_life_time = 0 password_policy.transport_password_mark_automatic = off password_policy.use_password_strength_estimator = on performance_insights.masking = on psql_encrypt_password = on ssl = on pg_ident_conf +=Переопределите символьную ссылку плагина на заменитель. В кластерной конфигурации повторите это действие на реплике.
sudo su - postgres ln -s /usr/pangolin/lib/plugins/libkms_substitute_plugin.so /usr/pangolin/lib/libconnection_plugin.so
Подключение защиты от привилегированных пользователей#
Инициализируйте механизм защиты от привилегированных пользователей только на мастер-ветке. Пароль передайте в открытом виде:
sudo su - kmadmin_pg
sudo -iu postgres -g kmadmin_pg /usr/pangolin/bin/initprotection
Enter PGDATA directory [/pgdata/0{major_version}/data]: /pgdata/0{major_version}/data
Enter security administrator names (comma-separated):sec_admin,sec_admin_backup
Enter new security admin password for user "sec_admin":
Enter it again:
Enter new security admin password for user "sec_admin_backup":
Enter it again:
Ожидаемый результат:
Protection mechanism is initialized.
syncing data to disk
Подключение TDE#
Внимание!
Пропустите действия в этом разделе, если не планируется подключение защиты конфигурации.
Выполните шаги:
Измените значение параметра
is_tde_onнаonв файле динамических параметров. В кластерной конфигурации действие повторите на реплике:sudo su - kmadmin_pg vim /etc/postgres/kms_dynamic_params.cfgОжидаемый результат:
ls -la /etc/postgres/kms_dynamic_params.cfg is_tde_on = onИзмените значение параметра
is_tde_onнаonв локальной конфигурации. В кластерной конфигурации действие повторите на реплике:sudo su - postgres # Для конфигурации standalone vim /pgdata/0{major_version}/data/postgresql.conf # Для кластерной конфигурации vim /etc/pangolin-manager/postgres.ymlОжидаемый результат:
Для standalone-конфигурации:
sudo su - postgres vim /pgdata/0{major_version}/data/postgresql.confДля cluster-конфигурации:
cat /pgdata/0{major_version}/data/postgresql.conf | grep is_tde_on is_tde_on = 'on'
Подключение защиты конфигурации#
Чтобы подключить защиту конфигурации, измените значение параметра secure_config на on в файле динамических параметров. В кластерной конфигурации действие повторите на реплике:
sudo su - kmadmin_pg
vim /etc/postgres/kms_dynamic_params.cfg
Ожидаемый результат:
ls -la /etc/postgres/kms_dynamic_params.cfg
secure_config = on
Общие завершающие действия#
Включите БД:
Если конфигурация standalone:
sudo su - postgres /usr/pangolin/bin/pg_ctl start -D /pgdata/0{major_version}/dataОжидаемый результат:
done server startedЕсли конфигурация кластерная. Действие сначала производится на мастере, затем на реплике:
sudo su - postgres sudo systemctl start pangolin-managerОжидаемый результат:
sudo su - postgres list + Cluster: clustername (7258206222218039502) ----+--------------+---------+----+-----------+ | Member | Host | Role | State | TL | Lag in MB | +---------------------+--------------------------+--------------+---------+----+-----------+ | <IP-адрес> t | <IP-адрес>:<Порт> | Sync Standby | running | 2 | 0 | | <IP-адрес> | <IP-адрес>:<Порт> | Leader | running | 2 | | +---------------------+--------------------------+--------------+---------+----+-----------+Ожидаемый результат в логе БД:
LOG: The initialization of KMS substitute completed successfully.
Ручное подключение СЗИ с KMS HashiCorp Vault#
Примечание:
В скриптах развертывания/обновления также реализован внешний скрипт по автоматическому подключению СЗИ.
Общие подготовительные действия#
Выключите БД на время ручного подключения СЗИ:
Если конфигурация standalone:
sudo su - postgres /usr/pangolin/bin/pg_ctl stop -D /pgdata/0{major_version}/dataОжидаемый результат:
waiting for server to shut down.... done server stoppedЕсли конфигурация кластерная, действие сначала производится на реплике, затем на мастере:
sudo su - postgres sudo systemctl stop pangolin-managerОжидаемый результат:
sudo su - postgres list + Cluster: clustername (7258206222218039502) ----+---------+---------+----+-----------+ | Member | Host | Role | State | TL | Lag in MB | +---------------------+--------------------------+---------+---------+----+-----------+ | <IP-адрес> | <IP-адрес>:<Порт> | Replica | stopped | | unknown | | <IP-адрес> | <IP-адрес>:<Порт> | Replica | stopped | | unknown | +---------------------+--------------------------+---------+---------+----+-----------+
Конфигурирование KMS HashiCorp Vault#
Выполните шаги:
Выполните аутентификацию пользователя на сервере Vault. Для аутентификации используйте клиентский токен:

Зайдите в хранилище kv и нажмите Create secret (1) для создания уникального CLUSTER_ID.

Выполните следующие действия:
В поле Path for this secret (2) укажите путь к параметру:
postgresql/<CLUSTER_ID>/postgresql/<param>, где:CLUSTER_ID- имя кластера. Должно быть уникальным для каждого кластера;param- наименование параметра, например,secure_config.
В поле Version data (3, 4) укажите имя параметра -
value, значение -off.Сохраните, нажав кнопку Save (5).

Повторите действие по созданию остальных параметров из списка:
is_tde_on = off allowed_servers = enabled_sec_admin_extra_auth_methods = cert encrypt_new_tablespaces = ddl masking_mode = disabled password_encryption = scram-sha-256 password_policies_enable = on password_policy.allow_hashed_password = on password_policy.alpha_numeric = 3 password_policy.check_syntax = on password_policy.custom_function = password_policy.deny_default = off password_policy.expire_warning = 7 days password_policy.failure_count_interval = 0 password_policy.grace_login_limit = 0 password_policy.grace_login_time_limit = 3 days password_policy.illegal_values = on password_policy.in_history = 4 password_policy.lockout = on password_policy.lockout_duration = 24 hours password_policy.max_age = 0 password_policy.max_failure = 6 password_policy.max_inactivity = 0 password_policy.max_rpt_chars = 0 password_policy.min_age = 0 password_policy.min_alpha_chars = 0 password_policy.min_length = 16 password_policy.min_lowercase = 0 password_policy.min_special_chars = 1 password_policy.min_uppercase = 1 password_policy.password_strength_estimator_score = 3 password_policy.reuse_time = 365 days password_policy.track_login = 0 password_policy.transport_password_life_time = 0 password_policy.transport_password_mark_automatic = off password_policy.use_password_strength_estimator = on performance_insights.masking = on psql_encrypt_password = on ssl = on pg_ident_conf +=
Подключение защиты от привилегированных пользователей#
Выполните команды инициализации механизма защиты от привилегированных пользователей (только на мастере). Пароль передайте в открытом виде:
sudo su - kmadmin_pg
sudo -iu postgres -g kmadmin_pg /usr/pangolin/bin/initprotection
Enter PGDATA directory [/pgdata/{major_version}/data]: /pgdata/0{major_version}/data
Enter security administrator names (comma-separated):sec_admin,sec_admin_backup
Enter new security admin password for user "sec_admin":
Enter it again:
Enter new security admin password for user "sec_admin_backup":
Enter it again:
Ожидаемый результат:
Protection mechanism is initialized.
syncing data to disk
Подключение TDE#
Выполните шаги:
Действие необходимо пропустить, если не планируется подключение защиты конфигурации. Измените значение параметра
is_tde_onнаonна сервере VAULT, нажав кнопку Create new version:
Действие необходимо пропустить, если планируется подключение защиты конфигурации. Измените значение параметра
is_tde_onнаonв локальной конфигурации:Для конфигурации standalone:
sudo su - postgres vim /pgdata/{major_version}/data/postgresql.confДля кластерной конфигурации:
sudo su - postgres vim /etc/pangolin-manager/postgres.yml
Ожидаемый результат:
Для конфигурации standalone:
cat /pgdata/0{major_version}/data/postgresql.conf | grep is_tde_on is_tde_on = 'on'Для кластерной конфигурации:
cat /etc/pangolin-manager/postgres.yml | grep is_tde_on is_tde_on: on
Подключение защиты конфигурации#
Для подключения защиты конфигурации измените значение параметра secure_config на on на сервере VAULT, нажав кнопку Create new version:

Общие завершающие действия#
Включите БД:
Если конфигурация standalone:
sudo su - postgres /usr/pangolin/bin/pg_ctl start -D /pgdata/0{major_version}/dataОжидаемый результат:
done server startedЕсли конфигурация кластерная, действие сначала производится на мастере, затем на реплике:
sudo su - postgres sudo systemctl start pangolin-managerОжидаемый результат:
sudo su - postgres list + Cluster: clustername (7258206222218039502) ----+--------------+---------+----+-----------+ | Member | Host | Role | State | TL | Lag in MB | +---------------------+--------------------------+--------------+---------+----+-----------+ | <IP-адрес> | <IP-адрес>:<Порт> | Sync Standby | running | 2 | 0 | | <IP-адрес> | <IP-адрес>:<Порт> | Leader | running | 2 | | +---------------------+--------------------------+--------------+---------+----+-----------+
Реализация функциональности лицензирования в продукте#
Для целей соблюдения лицензионных условий применяется файл, содержащий параметры лицензии и подписанный цифровой подписью с использованием приватного ключа, хранимого в закрытом репозитории СУБД Pangolin. Реализация цифровой подписи основана на RSA-шифровании, предоставляемом библиотекой OpenSSL:
openssl genrsa -out private.pem 2048
openssl rsa -in private.pem -outform PEM -pubout -out public.pem
Примечание:
Для смены типа лицензии на установленном кластере необходимо заменить файл лицензии в директории с другими лицензиями, после чего перезагрузить кластер и его компоненты. Если директория с лицензиями содержит несколько файлов, автоматически будет выбрана лицензия наиболее широкая по составу доступной функциональности.
Для работы с лицензиями реализуется библиотека, предоставляющая возможность проверки наличия лицензии, ее тип и срок действия. Данная библиотека статически подключается к продукту и его утилитам для проверки доступности лицензируемой функциональности. Файл лицензии хранится и обрабатывается в формате JSON. Электронная цифровая подпись хранится в самом файле. Подписывается секция license, содержащая следующие поля:
end_date- дата окончания в формате<year>-<month>-<day> <hour>:<minute>:<second>;licensee- лицо, имеющее право использования лицензией;type- тип лицензии в строковом представлении, отображающемся в перечислениеLicenseType:typedef enum { LICTYPE_EnterpriseWith1C, LICTYPE_Trial, LICTYPE_Enterprise, LICTYPE_StandardWith1C, LICTYPE_Standard, LICTYPE_Undefined } LicenseType;features- список дополнительной функциональности в строковом представлении, отображающемся в перечислениеLicensedFeature:typedef enum { LIC_TDE, LIC_AuthEncryption, LIC_Protection, LIC_SecuredConfig, LIC_Masking, LIC_CertPKCS12, LIC_PerformanceInsights, LIC_RelBlock, LIC_DateMotidification, LIC_ConnectionQuota, LIC_OutlineQuery, LIC_Support1C, LIC_PreparedStatements, LIC_NativePartitioning, LIC_DiagnosticTool, LIC_GraceAuth, LIC_ResourceConsumptionLimits, LIC_JsonTable, LIC_GI, LIC_Tracing, LIC_COUNT } LicensedFeature;total_CPUs- количество ядер процессора, которые может использовать запущенный продукт СУБД Pangolin (в случае отсутствия поля процессам доступны все ядра);total_mem- объем доступной памяти в байтах, которую могут использовать процессы запущенного продукта СУБД Pangolin (в случае отсутствия поля процессам доступна вся память).
Пример файла лицензии:
{
"license" : {
"end_date" : "2023-07-01 12:00:00",
"features" : [ ],
"licensee" : "Pangolin internal tests",
"total_CPUs" : 6,
"total_mem": 3221225472,
"type" : "EnterpriseWith1C"
},
"sign" : "{хеш}"
}
Внимание!
На данный момент возможность расширения типа лицензии дополнительной функциональностью отключена макросом
SUPPORT_FEATURE_LICENSING. Поэтому перечисление дополнительной функциональности в секцииfeaturesне влияет на содержание лицензии.
Ограничение по использованию ресурсов делается на базе механизма контрольных групп (cgroup). Проверка заключается в сопоставлении данных в файле лицензии с ограничениями, используемыми в контрольной группе, где запущен главный процесс postmaster.
Особенности при смене лицензии Enterprise (Trial) на Standard#
При изменении типа лицензии:
В случае ранее настроенного шифрования данных зашифрованные данные остаются доступны, но дальнейшее шифрование не осуществляется.
При настроенной защите данных от привилегированных пользователей механизм защиты отключается, функции администратора безопасности становятся недоступны, а внутренние каталоги безопасности не очищаются.
В рамках обновления продукта с использованием утилиты
pg_upgradeкаталоги безопасности обновлены не будут.Активная лицензия задается в виде пути к конкретному файлу, и для ее обновления необходимо заменить файл, расположенный по пути, указанному при запуске СУБД.
Обновление с версий до 5.3.1 возможно двумя способами:
обновление кластера до версии 6.X.X с использованием лицензии Trial -> отключение шифрования -> переход на регулярную версию Standard;
обновление кластера до версии 5.3.1 -> отключение шифрования -> обновление до 6.X.X с лицензией Standard.
В ОС РЕД ОС использование механизма контрольных групп для приведения сервера к условиям лицензии в части доступных ресурсов не поддерживается.
Добавляемые утилиты#
Помимо описанных выше, реализована утилита, подписывающая лицензии, а также утилита, осуществляющая проверку ранее подписанной лицензии - psql_rsa_sign и psql_rsa_verify соответственно.
Утилита подписания в качестве входных параметров принимает файл с приватным ключом для формирования ЭЦП, а также файл, содержащий данные лицензии. Данные на корректность утилитой не проверяются. Дополнительно может быть указан путь для сохранения подписанной лицензии. Если этот параметр не указан, то подпись добавляется во входной файл.
Параметры запуска утилиты подписания:
--key,-k <path>- расположение файла, содержащего приватный RSA-ключ (обязательный параметр);--out,-o <path>- расположение подписанного файла лицензии (опциональный параметр, в случае отсутствия подпись будет добавлена ко входному файлу);--version,-V- версия продукта, в составе которой была собрана данная утилита;--help,-?- вывод справки о способах запуска утилиты.
Утилита не входит в состав продукта, хранится в виде исполняемого файла в закрытом репозитории команды СУБД Pangolin.
Утилита проверки подписанной лицензии в качестве входных параметров принимает подписанный файл лицензии. Во время работы утилита проверяет корректность подписанного содержимого лицензии и производит верификацию подписи с прекомпилированным публичным ключом (если ключ не задан явно через параметры запуска). Также производится печать данных файла лицензии в человекочитаемом варианте.
Параметры запуска утилиты верификации:
--json,-j- флаг, указывающий о необходимости вывода данных о верификации, а также параметров лицензии в формате JSON (используется для автоматизации установки);--key,-k <path>- расположение файла, содержащего публичный RSA-ключ (в случае отсутствия данного параметра для верификации используется прекомпилированный ключ продукта);--version,-V- версия продукта, в составе которой была собрана данная утилита;--help,-?- вывод справки о способах запуска утилиты.
Утилита верификации входит в состав продукта (RPM) в месте расположения всех исполняемых файлов, а также отдельно дублируется в utilities для возможности проверки типа лицензии перед началом установки с помощью атоматизированных скриптов.
Использование подписанного файла лицензии сервером#
Загрузка лицензии#
Файл подписанной лицензии располагается на машине установки экземпляра продукта. Переменная окружения pangolin_license_path задает путь к директории, которая содержит лицензии или путь к конкретному файлу лицензии. Данная переменная окружения используется самим сервером и его утилитами для получения данных об используемой лицензии. По умолчанию используется директория /opt/pangolin_license. В директории единовременно могут находиться несколько лицензий. Модуль загрузки лицензий выбирает лицензию с валидным сроком действия, руководствуясь следующей системой приоритетов по доступной функциональности (от высокого к низкому):
EnterpriseWith1C;
Trial;
Enterprise;
StandardWith1C;
Standard.
При запуске сервера происходит загрузка лицензии и ее верификация. Если в директории с лицензиями не нашлось ни одной актуальной лицензии, то сервер не будет запущен, а соответствующее сообщение появится в логе. Актуальность определяется соответствием валидному сроку действия лицензии, а так же наличием подписи, проходящей верификацию предскомпилированным публичным ключом.
Ограничение лицензируемой функциональности под управлением конфигурационного параметра#
После успешной загрузки лицензии осуществляется проверка ограничений функциональности, сконфигурированной для запуска, на соответствие типу загруженной лицензии. Функциональность, ограниченная типом лицензии, отключается через параметры конфигурации (если это предусматривает функциональность). В этом случае используется источник параметра PGC_S_OVERRIDE, чтобы параметры не могли быть переопределены после запуска. В логе указывается форсированное отключение такой функциональности, если она была предусмотрена к включению в конфигурации запуска. Предупреждение об отключении функциональности защиты параметров через защищенное хранилище пишется в лог вне зависимости от значения параметра, так как при лицензии типа Standard параметры из защищенного хранилища не считываются, даже при наличии конфигурации подключения.
Ограничение лицензируемой функциональности, не имеющей управляющих параметров#
Если функциональность не может быть выключена при запуске СУБД, то проверка возможности исполнения данной функциональности осуществляется в момент исполнения. К такому типу функциональности относятся:
нативное интервальное партиционирование;
маскирование паролей;
квотирование подключений;
шифрование пользовательских данных.
Функциональность шифрования данных после включения не может быть отключена через параметр конфигурации is_tde_on из-за наличия шифрования не только пользовательских данных, но и служебной информации WAL и CHECKPOINT. Поэтому данная лицензируемая функциональность при лицензии Standard и включенном параметре is_tde_on осуществляет шифрование служебной информации, но не пользовательских данных. Параметр конфигурации сервера не переопределяется на старте, однако, в лог пишется предупреждение о невозможности использования шифрованных табличных пространств. На работающем экземпляре продукта проверка доступности данной функциональности должна проверяться с помощью функции мониторинга check_tde_is_on(), а не через прямое чтение параметра конфигурации.
Проверка времени действия лицензии#
При запуске основного процесса СУБД создается процесс, контролирующий время жизни лицензии. Данный процесс осуществляет мониторинг текущего времени на предмет соответствия времени действия лицензии. Если время действия лицензии закончилось, производится попытка перечитать лицензию, чтобы загрузить новые данные при обновлении лицензии, после чего процесс мониторинга продолжает штатное функционирование с новыми данными. В противном случае серверу посылается сигнал SIGINT для завершения работы продукта.
Лицензия может быть перезагружена без ожидания окончания времени действия текущей лицензии. Для этого необходимо выполнить перезагрузку (reload) СУБД. Если при обновлении лицензии ее тип изменился на более широкую по функциональности лицензию, то процесс контролирующий время действия лицензии будет использовать новое время для проверки актуальности. Ограничения функциональности будут определяться первоначальной лицензией. Это связано с тем, что большинство параметров конфигурации лицензируемой функциональности могут быть изменены только при запуске продукта. При этом в логе после загрузки новой лицензии будет получено предупреждение о том, что для использования новой лицензии в полном объеме необходима перезагрузка СУБД. В случае, если при обновлении лицензии загружена лицензия с меньшим набором функциональности, продукт будет остановлен автоматически, так как при конфигурации продукта СУБД Pangolin с оркестратором patroni последний автоматически перезапустит СУБД с новой лицензией.
Для предотвращения попытки остановить процесс проверки лицензии сигналом SIGSTOP основной процесс отслеживает состояние процесса данной проверки и в случае остановки самостоятельно посылает ему сигнал SIGCONT для возобновления процесса.
Периодическая проверка данным процессом также позволяет отследить ситуацию изменения времени на машине после запуска сервера.
Проверка лицензии в утилитах#
Утилиты, подлежащие лицензированию, проверяют данные лицензии при запуске и в случае ограничений выводят соответствующие сообщения.
Агент ротации сертификатов помимо проверки лицензии осуществляет проверку времени действия лицензии в процессе функционирования, по аналогии с процессом проверки в СУБД. Попытка перезагрузки лицензии будет осуществлена при окончании текущей лицензии либо при обработке сигнала SIGHUP.
Докер-образ (docker-образ) Pangolin DBMS#
По требованию клиента имеется возможность запросить докер-образ Pangolin DBMS на одной из двух ОС - SberLinux OS Server 9 или РЕД ОС 7.3.2 и 8.
Докер-образ может использоваться:
разработчиком АС для ускорения и упрощения процесса разработки;
пользователями, которые хотят познакомиться с Platform V Pangolin SE;
пользователями других облачных провайдеров.
Запуск докер-образ#
Докер образ имеет стандартные значения для переменных окружения:
PGDATA=/pgdata/data;PG_LICENSE_PATH=/opt/pangolin/license.json;POSTGRES_PASSWORD=;PANGOLIN_LIC_DATA=.
И следующие предустановленные параметры в файле postgresql.conf:
# Default settings in postgresql.conf template
port = '5433'
listen_addresses = '*'
enabled_extra_auth_methods ='trust,scram-sha-256'
psql_encrypt_password = 'on'
password_encryption = 'scram-sha-256'
pgaudit.log = 'ddl, role, connection, misc_set, protection'
autovacuum_work_mem = '-1'
effective_cache_size = '4GB'
maintenance_work_mem = '64MB'
max_connections = '300'
max_parallel_workers = '8'
max_parallel_workers_per_gather = '2'
max_prepared_transactions = '0'
max_worker_processes = '10'
timezone = 'Europe/Moscow'
autovacuum_max_workers = '3'
shared_buffers = '128MB'
work_mem = '4MB'
pg_plugins_path = '/usr/pangolin/lib'
# Features to enable
shared_preload_libraries = 'auto_explain,pg_stat_statements,pg_cron,pg_hint_plan,pg_outline'
# Included user configuration files
include_dir '/user_conf.d'
Файл pg_hba.conf имеет следующую стандартную настройку для внешних подключений:
host all all all scram-sha-256
Внимание!
Для запуска контейнера с образом Pangolin DBMS укажите переменные окружения - пароль
POSTGRES_PASSWORDи данные лицензии.
Лицензию можно передать двумя способами:
Через переменную
PANGOLIN_LIC_DATA, в json-формате, например:
'{ "license" : { "end_date" : "xxx", "licensee" : "xxx", "type" : "xx" }, "sign" : "...{хеш}…"}'
Через значение
volume. Для этого необходимо файл лицензии в json-формате передать по пути стандартного расположения этого файла внутри контейнера (например,-v /path/to/license.json:/opt/pangolin/license.json).
Пример команды запуска:
docker run --name pangolin -e POSTGRES_PASSWORD=12345678 -v /path/to/license.json:/opt/pangolin/license.json -d pangolin-dbms-sberlinux9:6.4.0
Активация функциональностей Platform V Pangolin SE#
Наинчая с версии 6.4.0, в докер-образе включены следующие функциональности, не требующие конфигурирования:
маскирования парольной информации в запросах с указанием паролей;
очистка высвобождаемого дискового пространства в процессе работы СУБД;
контроль целостности конфигурации и объектов БД;
контроль загрузки динамических библиотек с проверкой контрольных сумм;
контроль использования процедурных языков;
глобальные индексы и глобальные констрейнты на партиционированные таблицы;
64-битные идентификаторы транзакции;
параметры управления быстрыми блокировками;
нативное интервальное партиционирование.
Пользователю доступны преднастроенные функциональные возможности, которые активируются специальным ключом (2 столбец) при старте контейнера:
Наименование функциональности |
Ключ активации |
Применяемые конфигурационные параметры |
Применяемые sql-скрипты |
|---|---|---|---|
Включение оптимизации под работу с 1с (функциональность может быть активирована только при первом запуске образа с первичной инициализацией каталога базы данных для установки русской локали) |
|
autovacuum = „on“ |
CREATE EXTENSION IF NOT |
Включение расширения |
|
pg_stat_kcache.linux_hz = „-1“ |
|
Включение маскирования запросов |
|
masking_mode = „full“ |
|
Включение автообъединения глобальных индексов |
|
autounite = „True“; |
|
Включение трассировки сессий (Инструменты диагностики и анализа) |
|
session_tracing_enable = „True“; |
|
Включение анализа производительности (Инструменты диагностики и анализа) |
|
performance_insights.enable = „True“; |
|
Включение расширения |
|
pg_profile.topn = „20“; |
DO |
Включение ротации паролей |
|
|
CREATE EXTENSION IF NOT EXISTS «psql_rotate_password» WITH SCHEMA «public»; |
Пример:
docker run --name pangolin -e enable_1c_support=true -e POSTGRES_PASSWORD={Пароль} -v /path/to/license.json:/opt/pangolin/license.json -d pangolin-dbms-sberlinux9:6.4.0
Дополнительно можно самостоятельно активировать и настроить следующие функциональности:
управление парольными политиками;
использование транспортных паролей;
расширенные возможностей аудита действий пользователя;
набор дополнительных представлений для анализа (psql_diagpack);
аварийное завершение СУБД при отключении СХД;
очистка не используемых файлов в табличных пространствах;
корректировка, фиксация и подмена плана запроса;
резервирование подключений для служебных ролей;
контроль потребления ресурсов (оперативная память и CPU);
планировщик заданий;
дефрагментация таблиц;
Использование пользовательских скриптов и параметров#
Работа с директориями /user_scripts.d и /user_conf.d возможна только при запуске контейнера, поэтому, если содержимое примонтированных директорий на ОС узла изменилось, необходимо перезапустить контейнер.
При запуске контейнера поддерживается возможность использования собственных sql и sh-скрипты. Для этого необходимо директорию со скриптами смонтировать к контейнеру в директорию /user_scripts.d. Поддерживаются скрипты в формате *.sh, *.sql, *.sql.gz. Например:
docker run --name pangolin -v "/path/to/scripts:/user_scripts.d" -e POSTGRES_PASSWORD=1314124141 -v /path/to/license.json:/opt/pangolin/license.json -d pangolin-dbms-sberlinux9:6.4.0
Для передачи файла (файлов) с параметрами для postgresql можно использовать точку монтирования /user_conf.d. Если пользователь самостоятельно передает параметры, то значения в пользовательских файлах будет иметь более высокий приоритет. Например:
docker run --name pangolin -v "/path/to/configs:/user_conf.d" -e POSTGRES_PASSWORD=1314124141 -v /path/to/license.json:/opt/pangolin/license.json -d pangolin-dbms-sberlinux9:6.4.0
Поддерживаются файлы в формате *.conf.
Если необходимо изменить стандартные правила в конфигурации pg_hba, нужно перезаписать файл pg_hba.conf в контейнере, который по умолчанию расположен по пути /pgdata/data/pg_hba.conf, либо воспользоваться sh-скриптом и передать его точку монтирования /user_scripts.d. Пример sh-скрипта:
#!/usr/bin/env sh
echo "local all postgres trust" > $PGDATA/pg_hba.conf
echo "host all postgres ::1/128 trust" >> $PGDATA/pg_hba.conf
echo "host all postgres localhost trust" >> $PGDATA/pg_hba.conf
echo "hostssl all postgres localhost trust" >> $PGDATA/pg_hba.conf
echo "hostssl all test_user_ssl 0.0.0.0/0 cert clientcert=verify-full" >> $PGDATA/pg_hba.conf
echo "host all all 0.0.0.0/0 scram-sha-256" >> $PGDATA/pg_hba.conf
echo "hostssl all postgres 0.0.0.0/0 cert clientcert=verify-full" >> $PGDATA/pg_hba.conf
Пример запуска с использованием собственного файла pg_hba:
docker run --name pangolin -v "/path/to/pg_hba.conf:/pgdata/data/pg_hba.conf" -e POSTGRES_PASSWORD=1314124141 -v /path/to/license.json:/opt/pangolin/license.json -d pangolin-dbms-sberlinux9:6.4.0
Для использования docker-образа в Kubernetes или DropApp можно воспользоваться примером манифеста:
apiVersion: apps/v1
kind: Deployment
metadata:
namespace: da-dp01-db-pangolin-dev
name: pangolin-image-demo
spec:
selector:
matchLabels:
app: Pangolin-DB
replicas: 1
template:
metadata:
labels:
app: Pangolin-DB
spec:
containers:
- image: sberworks.ru/sbt/ci90000013_pangolin/release/pangolin-dbms-sberlinux9:6.4.0
name: pangolin-dbms
ports:
- containerPort: 5433
protocol: TCP
env:
- name: POSTGRES_PASSWORD
value: '...'
- name: PANGOLIN_LIC_DATA
value: '{ "license" : { "end_date" : "...", "licensee" : "...", "type" : "..." }, "sign" : "lPNh...C4Xc" }'
- name: enable_1c_support
value: "false"
- name: pg_stat_kcache_is_enable
value: "false"
- name: masking_mode
value: "false"
- name: autounite
value: "false"
- name: session_tracing
value: "false"
- name: performance_insights
value: "false"
- name: pg_profile
value: "false"
- name: rotate_password
value: "false"
livenessProbe:
exec:
command:
- pg_isready
initialDelaySeconds: 15
periodSeconds: 60
resources:
requests:
memory: "2048Mi"
cpu: 1
limits:
memory: "4096Mi"
cpu: 4
volumeMounts:
- name: postgresql-data
mountPath: /pgdata
securityContext:
capabilities: {}
privileged: false
volumes:
- name: postgresql-data
emptyDir: {}
imagePullSecrets:
- name: image-pull-secret
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 25%
maxUnavailable: 25%
Ограничения#
Образ предназначен для использования только в DEV-средах - доработка функциональности обновления, резервного копирования и мониторинга не предусматривается.
В виду технологических ограничений образы для podman и doсker могут не иметь совместимости и будут поставляться раздельно.
Работа docker-образа в кластерной схеме установки не поддерживается в версии 6.4.0.
Некоторые инфраструктурно зависимые функциональности, например, работа с СЗИ, могут быть недоступны в рамках версии 6.4.0.