Ручная пошаговая установка по инструкции#
При переходе к данному разделу предполагается, что процесс подготовки к установке уже пройден.
Данный раздел рассматривает процесс ручной пошаговой установки СУБД Pangolin по инструкции. Пошаговая установка выполняется на конечных узлах кластера СУБД.
Порядок установки#
Шаги процесса ручной пошаговой установки:
Подсказка
Все блоки подготовки и процесса установки являются обязательными.
При ручной установке будут отсутствовать компоненты Pangolin (etcd, Pangolin Manager, Pangolin Pooler и другие) не будут настроены различные параметры, в том числе присущие только Pangolin:
настройки конфигурационных файлов (
postgresql.conf,pg_hba.conf);настройки кластерной конфигурации;
настройки ролевой модели;
настройки расширений;
настройки ротации журналов;
и другие.
Для автоматизированной настройки данных параметров при развертывании СУБД Pangolin используйте автоматизированный сценарий.
Подсказка
Для развертывания СУБД Pangolin на окружении 1С выполните шаги с пометкой «для окружения 1С», вместо «обычное окружение».
Предусловия#
Выполните распаковку дистрибутива с помощью вспомогательного скрипта unpacker-distrib.sh (с ключом --not-pack) и скопируйте полученный каталог дистрибутива на конечный хост СУБД.
Подготовка к ручной установке#
Проверьте что порт для работы СУБД (по умолчанию
5432) не заблокирован на уровне сети или виртуальной машины.Проверьте отсутствие системного пользователя postgres:
getent passwd | grep postgresПо умолчанию в семействе ОС Альт СП \ ОС Альт Сервер пользователь postgres установлен в системе по умолчанию. Для корректной установки требуется удалить данного пользователя:
sudo userdel --force --remove postgresУдаление необходимо для отсутствия конфликтов при установке rpm-пакетов СУБД Pangolin.
Проверьте занятость
uid/gid. Для установки экземпляра СУБД Pangolin по умолчанию используется:uid/gid: 26для postgres иuid/gid: 126для kmadmin_pg. Пример команды проверки:getent passwd | grep 26 getent passwd | grep 126В случае занятости данных
uid/gidпереопределите переменные через изменение значений. Пример измененияuid/gidдля пользователя postgres:sudo POSTGRES_USER_GUID=111 POSTGRES_GROUP_GUID=111 dnf install pangolin-dbms-7.1Важно
Изменение актуально для ОС Astra Linux, в связи с занятостью
gid: 126группой tape и для ОС Альт СП 10 версии 2 (занятостьguid=26):error: group with gid=126 already existsСписок переменных окружения, использующих
uid/gid:POSTGRES_USER_GUID # изменение uid пользователя postgres (по умолчанию 26) POSTGRES_GROUP_GUID # изменение guid группы postgres (по умолчанию 26) KMADMIN_PG_USER_GUID # изменение uid пользователя kmadmin_pg (по умолчанию 126) KMADMIN_PG_GROUP_GUID # изменение guid группы kmadmin_pg (по умолчанию 126) PANGOLIN_USERS_GROUP_GUID # изменение guid группы pangolin_users (по умолчанию 226)Проверьте, что виртуальные машины, которые будут использоваться для установки СУБД, находятся в области видимости. Воспользуйтесь командой
ping.Выполните данный пункт в случае установки кластерной конфигурации (cluster).
Замените переменные на значения DNS\IP-адресов хостов и выполните команды:
ping <dns/ip-address master> ping <dns/ip-address replica> ping <dns/ip-address arbiter>
Процесс установки СУБД Pangolin#
Данный раздел предназначен для описания сценария процесса ручной установки standalone конфигурации СУБД Pangolin на операционные системы (ОС), такие как:
Platform V SberLinux OS Server;
РЕД ОС;
CentOS;
Astra Linux;
Альт СП \ ОС Альт Сервер.
Для уточнения поддерживаемых версий указанных ОС обратитесь к списку в разделе «Системные требования».
Обозначения
Далее в разделе, в приведенных блоках кода, будут указаны следующие обозначения:
{OS}- операционная система;{version_OS}- версия операционной системы;{path}- путь к директории или путь к дистрибутиву;{product_version}- версия продукта (текущая версия: 7.1.0);{short_version}- короткая версия продукта (текущая: 7.1);{base_version}- основная версия продукта (текущая: 7);{version_component}- версия компонента.
Скорректируйте переменные относительно реализуемого сценария установки.
Шаг 1. Установка rpm/deb-пакетов#
Установите пакеты серверной и клиентской части СУБД, а также пакет утилиты Pangolin Tuner:
Использование мета-пакетов может упростить данный шаг. Особенно в случае, когда в дальнейшем потребуется дополнительная установка каких-либо компонентов.
sudo dnf install ./pangolin-dbms-{short_version}-{product_version}-{OS}.x86_64.rpm
sudo dnf install ./pangolin-dbms-{short_version}-client-{product_version}-{OS}.x86_64.rpm
sudo dnf install ./utilities/pangolin-tuner-{version_component}-{OS}.x86_64.rpm
sudo apt install ./pangolin-dbms-{short_version}-{product_version}_amd64.deb
sudo apt install ./pangolin-dbms-{short_version}-client_{product_version}_amd64.deb
sudo apt install ./utilities/pangolin-tuner-{version_component}_amd64.deb
sudo apt-get install ./pangolin-dbms-{short_version}-{product_version}-altlinux{version_OS}.x86_64.rpm
sudo apt-get install ./pangolin-dbms-{short_version}-{product_version}-altlinux{version_OS}.x86_64.rpm
sudo apt-get install ./utilities/pangolin-tuner-{version_component}-altlinux{version_OS}.x86_64.rpm
Пример заполненной команды:
cd distributive
sudo dnf -y install ./pangolin-dbms-7.1-7.1.0-sberlinux9.x86_64.rpm
sudo dnf -y install ./pangolin-dbms-7.1-client-7.1.0-sberlinux9.x86_64.rpm
sudo dnf -y install ./utilities/pangolin-tuner-1.0.0-sberlinux9.x86_64.rpm
Шаг 2. Создание системных директорий, необходимых для работы СУБД#
Создайте директории $PGDATA(/pgdata), /pangolinlogs и /opt/pangolin_license:
sudo mkdir -p /pgdata/
sudo chown -R postgres:postgres /pgdata/
sudo mkdir -p /pangolinlogs/pangolin-dbms
sudo chown -R postgres:postgres /pangolinlogs/
sudo mkdir -p /opt/pangolin-license/
sudo chown postgres:pangolin_users /opt/pangolin-license/
Шаг 3. Импорт лицензии#
Для целей соблюдения лицензионных условий продукта применяется файл, содержащий параметры лицензии и подписанный цифровой подписью с использованием приватного ключа.
Лицензия поставляется вместе с дистрибутивом в личном кабинете клиента. В случае ее отсутствия, обратитесь к менеджеру.
Добавьте файл с лицензией license.json в папку /opt/pangolin-license/ с правами postgres:pangolin_users:
sudo mv /{path}/license.json /opt/pangolin-license/
sudo chown postgres:pangolin_users /opt/pangolin-license/license.json
Шаг 4. Подготовка переменных окружения#
Переключитесь на пользователя
postgres:sudo iu - postgresИзмените файл
.bash_profile(в случае ОС Astra Linux -.profile) при помощи текстового редактора, добавив следующие строки с переменными окружения (замените переменные в скобках{ }на актуальные значения):umask 022 export PG_LICENSE_PATH=/opt/pangolin-license export PG_PLUGINS_PATH=/usr/pangolin-{short_version}/lib export PGHOME=/opt/pangolin-dbms-server-7 export PGHOME_CLIENT=/opt/pangolin-dbms-client-7 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{base_version}/data export MANPATH=$MANPATH:$PGHOME/share/manПеречитайте переменные окружения для
.bash_profile/.profile. Пример команды:. ~/.bash_profile
Шаг 5. Развертывание экземпляра СУБД#
Разверните СУБД:
обычное окружение:
initdb --locale en_US.UTF-8 -k -D /pgdata/0{base_version}/data/окружение с 1С:
initdb --locale ru_RU.UTF-8 -k -D /pgdata/0{base_version}/data/Для окружения с 1С крайне важно указать локаль, в будущем она будет использоваться для инициализации БД, которая создает 1С.
Ошибка initdb: error loading libraries: libjsoncpp.so.1
В случае возникновения ошибки:
initdb: error while loading shared libraries: libjsoncpp.so.1: cannot open shared object file: No such file or directory
Необходимо установить пакет:
sudo <package_manager> install libjsoncpp1
Шаг 6. Корректировка конфигурационных файлов#
Отредактируйте конфигурационный файл
$PGDATA/postgresql.conf:Запустите утилиту Pangolin Tuner с необходимыми настройками и сконфигурируйте файл под нужный профиль:
Примечание
Выберите профиль рабочей нагрузки, соответствующий конкретным потребностям для использования оптимальных значений параметров.
Для корректного расчета значений запуск утилиты Pangolin Tuner в Docker должен выполняться с опциональными параметрами, определяющими количество CPU и памяти. Это связано с особенностью вычисления утилитой значений этих характеристик. Формируемое значение соответствует общей памяти сервера и CPU, на котором развернут контейнер, а не значениям конкретного контейнера.
Профиль OLTP:
/opt/pangolin-tuner/bin/pangolin-tuner --config /pgdata/0{base_version}/data/postgresql.conf --profile oltp --output-file /pgdata/0{base_version}/data/postgresql.conf.oltpПрофиль OLAP:
/opt/pangolin-tuner/bin/pangolin-tuner --config /pgdata/0{base_version}/data/postgresql.conf --profile olap --output-file /pgdata/0{base_version}/data/postgresql.conf.oltpПрофиль 1C (для окружения 1С):
/opt/pangolin-tuner/bin/pangolin-tuner --config /pgdata/0{base_version}/data/postgresql.conf --profile 1c --output-file /pgdata/0{base_version}/data/postgresql.conf.oltp
Примените созданный конфигурационный файл:
mv /pgdata/0{base_version}/data/postgresql.conf.oltp /pgdata/0{base_version}/data/postgresql.confPangolin Tuner не конфигурирует индивидуальные настройки, связанные с количеством подключений либо с активацией расширений. Данные параметры необходимо настроить самостоятельно.
Описание параметров, по которым утилита Pangolin Tuner формирует значение, расположено в разделе «Тюнинг параметров» документа «Руководство администратора».
Измените значение конфигурационного параметра
enabled_extra_auth_methodsс указанием методов аутентификации (эти же методы нужно будет указать вpg_hba.confв следующем пункте) к использованию:обычное окружение:
enabled_extra_auth_methods = 'peer, trust'окружение с 1С:
enabled_sec_admin_extra_auth_methods = 'md5,trust,peer,cert' enabled_extra_auth_methods = 'md5,trust,peer,cert'
Параметр
enabled_sec_admin_extra_auth_methodsотвечает за список дополнительно разрешенных к использованию методов аутентификации для ролей администраторов безопасности, тогда как вenabled_extra_auth_methodsпередается список для всех остальных ролей.
Отредактируйте конфигурационный файл
$PGDATA/pg_hba.confс помощью текстового редактора (добавьте в конец файла):local all all peer host all all 0.0.0.0/0 trust
Шаг 7. Запуск СУБД#
Запустите экземпляр СУБД Pangolin:
pg_ctl -D /pgdata/0{base_version}/data/ -l /pangolinlogs/pangolin-dbms/postgresql.log start
Проверка результата#
После завершения процесса установки рекомендуется ознакомиться с информацией в разделе «Чек-лист проверки корректности работы».
Результат#
В результате выполнения пошаговой установки по инструкции формируется:
Готовый к работе экземпляр СУБД в конфигурации standalone.
Настроенный файл конфигурации (
postgresql.conf), адаптированный под нужный профиль использования (OLAP/OLTP/1C).Возможность самостоятельно адаптировать СУБД под индивидуальные требования (настройка расширений, функциональностей и пр.).
Дальнейшие шаги#
После завершения ручной установки доступно:
установить необходимые компоненты Pangolin (etcd, Pangolin Manager, Pangolin Pooler, и другие);
настроить кластерную конфигурацию;
настроить ролевую модель;
установить расширения;
подключить и настроить доступные функциональности безопасности продукта СУБД Pangolin и установить другие требуемые функциональности.
Установка компонентов продукта СУБД Pangolin#
Установка Pangolin Pooler#
Компонент Pangolin Pooler – это доработанная версия PgBouncer, а именно программа, управляющая пулом соединений Pangolin DBMS. Любое клиентское приложение может подключиться к Pangolin Pooler, как если бы это был непосредственно сервер DBMS, и Pangolin Pooler создаст подключение к реальному серверу, либо задействует одно из ранее установленных подключений. Предназначение Pangolin Pooler — минимизировать издержки, связанные с установлением новых подключений к Pangolin DBMS.
Шаг 1. Установка пакета pangolin-pooler#
Выполните установку компонента Pangolin Pooler:
sudo dnf install pangolin-pooler-{version_component}-{OS}.x86_64.rpm
sudo apt install pangolin-pooler-{version_component}-{OS}_amd64.deb
sudo apt-get install pangolin-pooler-{version_component}-{OS}.x86_64.rpm
Пример заполненной команды:
sudo yum install pangolin-pooler-1.1.0-sberlinux9.x86_64.rpm
Шаг 2. Конфигурирование Pangolin Pooler#
Отредактируйте файл pangolin-pooler.ini:
sudo -iu postgres
vi /etc/pangolin-pooler/pangolin-pooler.ini
Если файл со стандартным конфигурационным файлом не создался во время установки, в качестве суперпользователя создайте его самостоятельно и отредактируйте:
sudo -iu postgres
sudo mkdir -p /etc/pangolin-pooler
sudo chown postgres:postgres /etc/pangolin-pooler
sudo chmod 0700 /etc/pangolin-pooler
# вставить конфигурационные параметры (пример файла pangolin-pooler.ini)
sudo vi /etc/pangolin-pooler/pangolin-pooler.ini
sudo chown postgres:postgres /etc/pangolin-pooler/pangolin-pooler.ini
sudo chmod 0600 /etc/pangolin-pooler/pangolin-pooler.ini
Пример файла pangolin-pooler.ini
[databases]
* = host=<ip адрес хоста> port=5432
[pgbouncer]
listen_port = 6544
listen_addr = *
auth_type = scram-sha-256
auth_file = /etc/pangolin-pooler/userlist.txt
logfile = /pangolinlogs/pangolin-pooler/pangolin-pooler.log
pidfile = /var/run/user/986/pangolin-pooler/pangolin-pooler.pid
admin_users = pgbouncer
max_client_conn = 400
pool_mode = transaction
min_pool_size = 0
default_pool_size = 105
max_db_connections = 105
max_user_connections = 105
ignore_startup_parameters = extra_float_digits
unix_socket_dir =
ndc_suspending_timeout = 0
client_tls_crl_path = /pg_ssl/crl
server_tls_crl_path = /pg_ssl/crl
client_tls_crl_file = /pg_ssl/crl/intermediate.crl
server_tls_crl_file = /pg_ssl/crl/intermediate.crl
# TLS settings
server_tls_protocols = secure
server_tls_ciphers = secure
server_tls_sslmode = verify-full
client_tls_protocols = secure
client_tls_ciphers = secure
client_tls_sslmode = prefer
server_tls_pkcs12_config_path = /pg_ssl/intermediate/pgbouncer.p12.cfg
client_tls_pkcs12_config_path = /pg_ssl/intermediate/server.p12.cfg
Шаг 3. Конфигурирование userlist.txt#
Измените файл
userlist.txt(путь до файла/etc/pangolin-pooler/userlist.txt) при помощи текстового редактора, добавив следующие строки:"<user>" "<password>"Пример файла
userlist.txt:"user" "qwerty"Или в засекреченном виде:
"user" "md5175c641eaed0b6c05ae8444b73d789f0"Измените права и владельца файла:
sudo chown postgres:postgres /etc/pangolin-pooler/userlist.txt sudo chmod 0600 /etc/pangolin-pooler/userlist.txt
Шаг 4. Настройка ротации журналов#
Выполните конфигурирование ротации журналов. Содержимое файла
pangolin-poolerперенесите из аналогичного файла на мастере:sudo -iu postgres sudo cp /opt/pangolin-pooler/share/doc/logrotate/pangolin-pooler /etc/logrotate.d/pangolin-pooler sudo vi /etc/logrotate.d/pangolin-poolerПример файла
pangolin-pooler:/pangolinlogs/pangolin-pooler/pangolin-pooler.log { rotate 10 su postgres postgres missingok sharedscripts notifempty compress daily create 0600 postgres postgres postrotate /bin/kill -HUP `cat /var/run/user/986/pangolin-pooler/pangolin-pooler.pid 2> /dev/null` 2>/dev/null ||true endscript }Назначьте права:
sudo chown postgres:postgres /etc/logrotate.d/pangolin-pooler sudo chmod 0644 /etc/logrotate.d/pangolin-pooler
Шаг 5. Запуск Pangolin Pooler#
Перезапустите службу Pangolin Pooler:
sudo systemctl restart pangolin-pooler
Установка Pangolin Manager#
Компонент Pangolin Manager – это доработанная версия Patroni, python-приложения для создания и управления Pangolin DBMS-кластерами, работающими на основе потоковой репликации.
Pangolin Manager - это оркестратор кластера Pangolin, который преобразует систему из двух и более узлов Pangolin в высокодоступный кластер с поддержкой контролируемого и аварийного переключения. Также он автоматизирует добавление, обновление и удаление реплик, и реализует одновременное изменение конфигурации Pangolin на всех узлах кластера.
Далее представлены шаги для установки Pangolin Manager. Предполагается, что выбран тип конфигурации cluster, так как данный компонент используется в кластерной конфигурации.
Подсказка
Все шаги процесса установки являются обязательными, кроме шагов с указанием признака в заголовке: опциональный.
Шаг 1. Установка пакета pangolin-manager#
Установите пакет
pangolin-manager-venv, который является обязательной зависимостью для пакетаpangolin-manager. Предварительно распакуйте3rdparty.tar.gz:cd distributive tar -xzf 3rdparty/3rdparty.tar.gz -C 3rdparty/sudo dnf install pangolin-manager-venv-{version_component}-{OS}.x86_64.rpmsudo apt install pangolin-manager-venv-{version_component}_amd64.debsudo apt-get install pangolin-manager-venv-{version_component}-{OS}.x86_64.rpmПример заполненной команды:
cd distributive tar -xzf 3rdparty/3rdparty.tar.gz -C 3rdparty/ sudo dnf install -y 3rdparty/pangolin-manager-venv-1.1.0-sberlinux9.x86_64.rpmУстановите пакет
pangolin-manager:sudo dnf install pangolin-manager-{version_component}-{OS}.x86_64.rpmsudo apt install pangolin-manager-{version_component}_amd64.debsudo apt-get install pangolin-manager-{version_component}-{OS}.x86_64.rpmПример заполненной команды:
cd distributive sudo dnf install pangolin-manager-2.1.4-sberlinux9.x86_64.rpmДальнейшие действия удобнее выполнять под системным пользователем
postgres. Переключитесь на него командой:su -iu postgres
Шаг 2. Настройка перезагрузки компонентов (опциональный)#
Важно
Выполните данный шаг в случае конфигурации с Pangolin Pooler.
Перейдите в каталог
/etc/pangolin-manager:postgres ~ % cd /etc/pangolin-managerСоздайте скрипт
reload_pangolin_pooler.sh, который будет использоваться Pangolin Manager при перезагрузке кластера для перезагрузки Pangolin Pooler (reload):#!/bin/sh sudo systemctl restart pangolin-pooler
Шаг 3. Оформление конфигурационного файла postgres.yml#
При установке пакета pangolin-manager создается конфигурационный файл Pangolin Manager - /etc/pangolin-manager/postgres.yml, содержащий значения переменных по умолчанию.
Отредактируйте конфигурационный файл Pangolin Manager /etc/pangolin-manager/postgres.yml или используйте скрипт генерации postgres.yml на основе уже существующих переменных окружения ($HOSTNAME; $CLNAME; $PGHOME; $PGDATA) системного пользователя postgres.
Параметры СУБД необходимо перенести в конфигурационный файл postgres.yml вручную из уже существующих pg_hba.conf и postgresql.conf (которые расположены в $PGDATA) в соответствии с назначением секций конфигурационного файла postgres.yml.
Файл postgres.yml состоит из следующих блоков:
restapi– укажите настройки для доступа к API самого Pangolin Manager (hash пароля можно создать через командуpg_auth_password enc -t);etcd– укажите данные для доступа к etcd, пользователь:patronietcd(был создан при настройке etcd) и пароль (захешировать можно черезpg_auth_password enc -t);bootstrap– параметры из данного блока записываются в etcd/<namespace>/<scope>/configтолько при первом старте кластера, поэтому их так же необходимо заполнить на основе текущих конфигурационных файлов PostgreSQL;postgresql– исправьте записи на основе конфигурационного файлаpostgresql.conf;pg_hba– исправьте записи на основе конфигурационного файлаpg_hba.conf;tags– оставьте без изменения, как в скрипте генерации, для обычного использования достаточно выставить все параметры блокаtagsвfalse;scope– необходимо указать имя кластера (cluster), вnameимя текущего сервера (hostname).
Подсказка
Заполнение конфигурационного файла postgres.yml требуется на всех узлах экземпляра СУБД (мастере, реплике, арбитре).
Шаг 4. Создание пользователя для репликации#
Создайте пользователя для работы репликации в СУБД Pangolin с паролем согласно парольной политике:
CREATE USER patroni WITH ENCRYPTED PASSWORD '<password>';Отключите срок действия пароля и выставьте лимит подключений:
ALTER ROLE patroni LOGIN SUPERUSER REPLICATION VALID UNTIL 'infinity' CONNECTION LIMIT 5;
Шаг 5. Добавление пользователя в засекреченное хранилище паролей (опциональный)#
Важно
Выполните данный шаг при использовании функциональности засекречивания паролей.
Добавьте пользователя, созданного на предыдущем шаге, в криптохранилище Pangolin:
postgres ~ % pg_auth_config add -h $HOSTNAME -p 5432 -U patroni -d postgres
postgres ~ % pg_auth_config add -h $HOSTNAME -p 5432 -U patroni -d replication
postgres ~ % pg_auth_config add -h localhost -p 5432 -U patroni -d postgres
postgres ~ % pg_auth_config add -h localhost -p 5432 -U patroni -d replication
Шаг 6. Настройка правил в pg_hba.conf для репликации#
Для репликации и корректной работы Pangolin Manager добавьте дополнительные правила в pg_hba.conf:
host all patroni 127.0.0.1/32 scram-sha-256
host all patroni $PGHOST/32 scram-sha-256
host replication patroni 127.0.0.1/32 scram-sha-256
host replication patroni $PGHOST/32 scram-sha-256
Шаг 7. Завершающие действия#
Остановите PostgreSQL:
systemctl stop postgresqlПеречитайте обновленную конфигурацию Pangolin (reload):
sudo -iu postgres psql -c 'SELECT pg_reload_conf();' exitАктивируйте сервис Pangolin Manager (под системным пользователем, например, root) для автоматического запуска после перезагрузки ОС:
sudo systemctl enable pangolin-managerЗапустите сервис (сначала на узле мастер, затем на реплике и после на арбитре):
sudo systemctl start pangolin-managerПроверьте корректность запуска и состояние сервиса. Пример статуса:
sudo systemctl status pangolin-manager # stdout: pangolin-manager.service - Runners to orchestrate a high-availability PostgreSQL Loaded: loaded (/usr/lib/systemd/system/pangolin-manager.service; disabled; vendor preset: disabled) Active: active (running) since Tue 2023-12-12 01:00:31 MSK; 1 day 11h ago Process: 521932 ExecStartPre=/bin/chown -R postgres:postgres /var/run/pangolin-dbms (code=exited, status=0/SUCCESS) Process: 521930 ExecStartPre=/bin/mkdir -p /var/run/pangolin-dbms (code=exited, status=0/SUCCESS) Process: 521929 ExecStartPre=/bin/chown -R postgres:postgres /var/run/postgresql (code=exited, status=0/SUCCESS) Process: 521927 ExecStartPre=/bin/mkdir -p /var/run/postgresql (code=exited, status=0/SUCCESS) Main PID: 521935 (pangolin-manage) Tasks: 47 (limit: 50662) Memory: 2.8G CGroup: /system.slice/pangolin-manager.service ├─521935 /opt/pangolin-manager/bin/pangolin-manager-bin/pangolin-manager.bin /etc/pangolin-manager/postgres.yml ├─521956 /opt/pangolin-dbms-server-7/bin/postgres -D /pgdata/07/data/ --config-file=/pgdata/07/data/postgresql.conf --listen_addresses=<IP-address> --port=5432 --cluster_name=clustername --wal_level=replica --hot_standby=on --max_connections=110 --max_wal_sen> ├─521962 postgres: clustername: logger ├─521963 postgres: clustername: checkpointer ├─521964 postgres: clustername: background writer ├─521966 postgres: clustername: idle sessions terminator ├─521967 postgres: clustername: password policy cache ├─521968 postgres: clustername: performance insights ├─521970 postgres: clustername: authproc ├─521971 postgres: clustername: license checker ├─521982 postgres: clustername: patroni postgres 127.0.0.1(51650) idle ├─523949 postgres: clustername: walwriter ├─523950 postgres: clustername: autovacuum launcher ├─523951 postgres: clustername: autounite launcher ├─523952 postgres: clustername: pg_cron launcher ├─523953 postgres: clustername: file system checker ├─523954 postgres: clustername: logical replication launcher └─558349 postgres: clustername: walsender patroni <IP-address>(52080) streaming 0/D4000000
Шаг 8. Выбор распределенного хранилища конфигурации#
Для установки распределенного хранилища конфигурации выберите одну из инструкций:
Установка модуля Pangolin DCS#
Pangolin DCS — это модуль распределенного хранилища конфигурации внутри компонента Pangolin Manager, который реализует Raft-алгоритм.
Pangolin DCS является частью Pangolin Manager и может заменить сторонний компонент etcd. Развертывание Pangolin DCS происходит поэтапно.
Шаг 1. Настройка конфигурационных файлов#
Настройка Pangolin DCS осуществляется параметрами в конфигурационном файле
postgres.yml, находящейся в директории/etc/pangolin-manager/. Ниже приведен пример настройки параметров секцииpangolin_dcs. В конфигурационном файле этой секцией замените секциюetcd:pangolin_dcs: self_addr: srv-0-141:2481 partner_addrs: srv-0-134:2481,srv-0-137:2481 data_dir: /pgdata/07/raft_data journal_max_size: 10485760 journal_wait_timeout: 10 memory_journal_size: 10000 journal_force_read_wait: true dump_dir: /pgdata/07/raft_dump dump_interval: 300 dump_wait_timeout: 10 logfile: /pangolinlogs/pangolin-manager/raft/raft.log log_max_size: 20971520 log_rotation_period: 1d heartbeat_interval: 1000 election_timeout: 5000 certfile: '/pg_ssl/patroni_server.crt' keyfile: '/pg_ssl/patroni_server.key' cafile: '/pg_ssl/root.crt' capath: '/pg_ssl' crlfile: /pg_ssl/crl/intermediate.crl crlpath: /pg_ssl/crl pkcs12_config_path: /pg_ssl/intermediate/patroni_server.p12.cfg verify_client: optional verify_server: true no_tls1_3: falseОбозначение параметров
Параметры:
обязательные параметры:
self_addr— адрес текущего узла в форматеip:port;partner_addrs— список адресов остальных узлов в форматеip1:port1,ip2:port2;data_dir— путь к директории для хранения журнала операций и текущих значений ключей;
необязательные параметры:
journal_max_size— максимальный размер в байтах для файла с журналом операций, по умолчанию 10 МБ;journal_wait_timeout— время тайм-аута, по истечении которого операция записи/чтения журнала считается неуспешной, по умолчанию равен параметруloop_waitили 10с;memory_journal_size— число максимально содержащихся в памяти последних записей журнала, по умолчанию10000;journal_force_read_wait— если равенtrue, то при рестарте службыpangolin-managerвыполняется перечитывание журнала операций, по умолчаниюtrue;dump_dir— путь к директории для хранения дампа, по умолчанию равенdata_dir;dump_interval— интервал создания дампа, в секундах, по умолчанию равен300;dump_wait_timeout— время тайм-аута, по истечении которого операция записи/чтения дампа считается неуспешной, по умолчанию равен параметруloop_waitили 10 (секундам);logfile— путь к файлу с логом отpangolin_dcs, по умолчанию равенdata_dir/raft.log;log_max_size— максимальный размер в байтах для файла с логомpangolin_dcs, по умолчанию равен 20мб, минимальное значение 8192 байт;log_rotation_period— интервал ротации файла с логомpangolin_dcs, по умолчанию раз в сутки, формат<число><{одно из: s, m, h, d}>, соответственно: секунда, месяц, час, день;heartbeat_interval— время в миллисекундах, раз в которое мастер DCS-кластера будет сообщать о себе остальным узлам;election_timeout— время в миллисекундах, по прошествии которого при неполучении heartbeat от мастера узел инициирует новое голосование;certfile— серверный сертификат Pangolin DCS для установления SSL-подключений;keyfile— закрытый ключ Pangolin DCS, соответствующий серверному сертификату;keyfile_password— пароль для рассекречивание закрытого ключа (если защищен паролем);cafile— корневой сертификат УЦ (CA);capath— директория, содержащая файлы с доверенными сертификатами УЦ (CA);crlfile— файл со списком отозванных сертификатов (CRL);crlpath— директория, содержащая файлы со списком отозванных сертификатов (CRL);pkcs12_config_path— файл в формате JSON, содержащий данные для запроса сертификата из SecMan или парольную фразу для доступа к контейнеру PKCS#12 и путь к контейнеру;verify_client— определяет, требуется ли запрашивать и проверять клиентский сертификат DCS. Возможные значения:none— клиентский сертификат не запрашивается, проверка сертификата не выполняется;optional— клиентский сертификат запрашивается и, если клиент отправляет сертификат, подвергается проверке;required— клиентский сертификат запрашивается и, если клиент не отправляет сертификат, установка SSL-соединения завершается с ошибкой;
verify_server— определяет, требуется ли запрашивать и проверять серверный сертификат DCS (возможные значения:true/false);no_tls1_3— на серверах с установленным OpenSSL 1.1.0 и выше позволяет переключиться с протокола TLSv1.3 на TLSv1.2 (возможные значения:true/false, по умолчаниюfalse).
При старте кластера с Pangolin Manager с таким конфигурационным файлом, инициализируется Raft-кластер, который между своими узлами передает информацию по защищенному SSL-каналу.
Заполните секции
restapiиsslкак указано в примере:restapi: # секция заполняется как и для кластера с etcd listen: 0.0.0.0:8008 connect_address: srv-1-0:8008 allowlist: [] allowlist_include_members: true pkcs12_config_path: /pg_ssl/intermediate/server.p12.cfg crlpath: /pg_ssl/crl crlfile: /pg_ssl/crl/intermediate.crl authentication: username: patroniyml password: $enc$.... pangolin_dcs: # параметры описанные выше, self_addr и пр. # параметры для rest api pangolin_dcs restapi: listen: 0.0.0.0:0000 connect_address: srv-0-1:0000 allowlist: [] #allowlist_include_members: true ciphers: DEFAULT:!SSLv1:!SSLv2:!SSLv3:!TLSv1:!TLSv1.1 verify_client: optional cafile: /pg_ssl/root.crt capath: /pg_ssl/root_dir certfile: /pg_ssl/patroni_server.crt keyfile: /pg_ssl/patroni_server.key crlpath: /pg_ssl/crl crlfile: /pg_ssl/crl/intermediate.crl # параметры для аутентификации на Pangolin DCS через pangolin-manager-ctl authentication: username: pangolindcs password: $enc$.... # параметры для команд к Pangolin DCS через pangolin-manager-ctl и pangolin-dcs-ctl ctl: retry_timeout: 10 # тайм-аут на выполнение запроса к Pangolin DCS
Шаг 2. Настройка авторизации внутри DCS при включенном SSL и pem-сертификатах (опциональный)#
Выполните настройку авторизации внутри DCS:
Добавьте пользователя
root:curl -iS -XPUT --cert /pg_ssl/client.crt --key /pg_ssl/client.key https://srv-0-1:0000/v2/auth/users/root -d '{"password":"<Пароль root>"}'Добавьте «обычного» пользователя:
curl -iS -XPUT --cert /pg_ssl/client.crt --key /pg_ssl/client.key https://srv-0-1:0000/v2/auth/users/test_user -d '{"password":"<Пароль пользователя>"}'Добавьте роль с правами на чтение и запись:
curl -iS -XPUT --cert /pg_ssl/client.crt --key /pg_ssl/client.key https://srv-0-1:0000/v2/auth/roles/test_role -d '{"permissions": {"kv": {"read": ["/service/clustername/*"], "write": ["/service/clustername/*"]}}}'Назначьте роль «обычному» пользователю:
curl -iS -XPUT --cert /pg_ssl/client.crt --key /pg_ssl/client.key https://srv-0-1:0000/v2/auth/users/test_user -d '{"grant":["test_role"]}'Проверьте статус авторизации пользователя
root:curl -iS -XGET --cert /pg_ssl/client.crt --key /pg_ssl/client.key -u root:<Пароль root> https://srv-0-1:0000/v2/auth/enableВключите авторизацию:
curl -iS -XPUT --cert /pg_ssl/client.crt --key /pg_ssl/client.key https://srv-0-1:0000/v2/auth/enableПри включенной авторизации все запросы на изменение/просмотр ключей будут доступны только тому пользователю, у которого есть права на это.
Шаг 3. Настройка параметров доступа#
В связи с добавлением утилит безопасности (setup_kms_credentials, pangolin-auth-password, pangolin-certs-rotate) в основной пакет Pangolin Manager, на узле арбитра необходима установка файла лицензии. Утилита pangolin-auth-reencrypt копируется из дистрибутива Pangolin, на узле арбитра производится настройка аналогично узлам с DBMS — создание пользователя безопасности kmadmin_pg и настройка каталогов с утилитами.
Ниже приведены каталоги с настроенными правами доступа:
drwxrwxr-x. 5 postgres pangolin_users 4096 Jul 26 10:30 pangolin-ansible-venv-controlled
drwx------. 4 postgres postgres 4096 Jul 26 10:37 pangolin-auth-password
drwxrwx---. 6 postgres pangolin_users 4096 Jul 26 10:39 pangolin-auth-reencrypt
drwx------. 6 postgres postgres 4096 Jul 26 10:31 pangolin-certs-rotate
drwxrwx---. 2 postgres pangolin_users 4096 Jul 26 10:31 pangolin-license
drwxrwx---. 6 postgres pangolin_users 4096 Jul 26 10:37 pangolin-manager
drwx------. 4 kmadmin_pg kmadmin_pg 4096 Jul 26 10:33 pangolin-security-utilities
Шаг 4. Состав кластера#
На узле арбитра находится служба pangolin-manager, работающая в упрощенном режиме и принимающая только запросы, связанные с DCS-модулем. Конфигурационный файл postgres.yml в таком случае выглядит так (без секции postgresql и других значений в секции tags):
scope: clustername
name: srv-0-141
restapi:
# обычное заполнение секции
pangolin_dcs:
self_addr: srv-0-141:2480
partner_addrs: ['srv-0-134:2480', 'srv-0-137:2480']
data_dir: /home/postgres/raft_data_dir
heartbeat_interval: 1000
election_timeout: 5000
bootstrap:
dcs:
# обычное заполнение секции
tags:
nofailover: true # так как здесь нет pangolin, на этот узел нельзя совершить failover
nosync: true # так как этот узел не может стать репликой
Пример файла конфигурации службы pangolin-manager.service:
[Unit]
Description=Runners to orchestrate a high-availability PostgreSQL
After=syslog.target network.target
[Service]
Type=simple
# Read in configuration file if it exists, otherwise proceed
Environment="PG_LICENSE_PATH=/opt/pangolin-license"
Environment="PG_LD_LIBRARY_PATH=/opt/pangolin-dbms-server/lib"
Environment="PG_PLUGINS_PATH=/opt/pangolin-dbms-server/lib"
Environment="PG_CLIENT_PLUGINS_PATH=/opt/pangolin-dbms-client/lib"
Environment="LD_LIBRARY_PATH=/opt/pangolin-manager/lib"
Environment="PATRONI_PLUGINS_PATH=/opt/pangolin-manager/lib"
Environment="PYTHONPATH=/opt/pangolin-manager/lib/python3/site-packages:/opt/pangolin-manager/lib64/python3/site-packages"
LimitNOFILE=65536
# Pre-commands to start watchdog device
# Uncomment if watchdog is part of your patroni setup
PermissionsStartOnly=true
ExecStartPre=-/bin/mkdir -p /var/run/user/986/pangolin-dbms
ExecStartPre=/bin/chown -R postgres:postgres /var/run/user/986/pangolin-dbms
ExecReload=/bin/kill -HUP $MAINPID
WorkingDirectory=/opt/pangolin-manager
ExecStart=/opt/pangolin-manager/bin/pangolin-manager-bin/pangolin-manager.bin /etc/pangolin-manager/postgres.yml
Restart=on-failure
KillMode=process
# Disable restart limits
StartLimitInterval=0
[Install]
WantedBy=default.target
Шаг 5. Добавление ролевой модели#
После настройки конфигурационных файлов Pangolin Manager и запуска службы pangolin-manager.service, на узле арбитр выполнить следующие команды для добавления ролевой модели:
/opt/pangolin-manager/bin/pangolin-dcs-ctl user add root:'<password>'
/opt/pangolin-manager/bin/pangolin-dcs-ctl user add patronietcd:'dev_etcd_password'
/opt/pangolin-manager/bin/pangolin-dcs-ctl --user root --password '<password>' role add pangolindcsapi
/opt/pangolin-manager/bin/pangolin-dcs-ctl role grant-permission pangolindcsapi readwrite --prefix /service/
/opt/pangolin-manager/bin/pangolin-dcs-ctl --user root --password '<password>' user grant-role patronietcd pangolindcsapi
/opt/pangolin-manager/bin/pangolin-dcs-ctl --user root --password '<password>' auth enable
Установка etcd#
В кластере Pangolin для хранения информации о состоянии Pangolin Manager используется хранилище etcd. Поддерживаема версия пакета под разных ОС указана на странице «Системные требования».
Etcd - это строго согласованное, распределенное хранилище информации в формате ключ-значение.
Существует модуль Pangolin DCS, который является частью Pangolin Manager и может заменить компонент etcd.
В кластерной конфигурации (Pangolin Manager+etcd) etcd устанавливается из стандартных репозиториев ОС. Все действия по установке etcd выполняются под системным пользователем root.
Далее представлены шаги для установки компонента etcd.
Подсказка
Все шаги процесса установки являются обязательными, кроме шагов с указанием признака в заголовке: опциональный.
Шаг 1. Установка пакета etcd#
Важно чтобы версия etcd на всех устанавливаемых машинах была одинаковая.
Установите пакет etcd:
sudo dnf install etcd
sudo apt install etcd
sudo apt-get install etcd
Шаг 2. Заполнение конфигурационного файла etcd.conf#
С помощью текстового редактора установите следующие параметры в файл конфигурации по пути /etc/etcd/etcd.conf:
ETCD_NAME="$(hostname -s)"
ETCD_LISTEN_CLIENT_URLS="http://<IP-address>:2379"
ETCD_ADVERTISE_CLIENT_URLS="http://$(hostname):2379"
ETCD_LISTEN_PEER_URLS="http://<IP-address>:2380"
ETCD_INITIAL_ADVERTISE_PEER_URLS="http://$(hostname):2380"
ETCD_INITIAL_CLUSTER_TOKEN="single"
ETCD_INITIAL_CLUSTER="$(hostname -s)=http://$(hostname):2380"
ETCD_INITIAL_CLUSTER_STATE="new"
ETCD_DATA_DIR="/var/lib/etcd"
ETCD_ELECTION_TIMEOUT="5000"
ETCD_HEARTBEAT_INTERVAL="1000"
ETCD_ENABLE_V2="true"
Обозначения
Описание параметров etcd.conf:
ETCD_LISTEN_CLIENT_URLS— список ссылок, с которых собирается трафик клиентов;ETCD_ADVERTISE_CLIENT_URLS— список ссылок клиентов этого элемента кластера для публичной передачи. Передаваемые ссылки клиентов будут доступны системам, взаимодействующим с кластером etcd. Клиентские библиотеки обрабатывают эти ссылки для подключения к кластеру etcd;ETCD_LISTEN_PEER_URLS— список ссылок, с которых собирается трафик одноранговых узлов;ETCD_INITIAL_ADVERTISE_PEER_URLS— список ссылок пиров этого элемента кластера для передачи другим элемента кластера;ETCD_INITIAL_CLUSTER— исходная конфигурация кластера для начальной загрузки. Т.е все узлы и их url (конструкция выглядит следующим образом «host_name_1=http://ip_iddress:2379,host_name_2=http://ip_iddress:2379,host_name_3=http://ip_iddress:2379);ETCD_INITIAL_CLUSTER_STATE— исходное состояние кластера (newилиexisting);ETCD_INITIAL_CLUSTER_TOKEN— исходный токен кластера etcd во время начальной загрузки. При использовании нескольких кластеров позволяет избежать непреднамеренного взаимодействия между ними;ETCD_DATA_DIR- каталог, в котором находится база данных etcd, wal-ы и снепшоты Etcd;ETCD_HEARTBEAT_INTERVAL— время (мс) периода проверки (heartbeat);ETCD_ELECTION_TIMEOUT— время (в мс) тайм-аута алгоритма выбора;ETCD_ENABLE_V2- поддержка версии API v2.
Шаг 3. Создание service-файла etcd#
Отредактируйте файл
etcd.serviceпо пути/usr/lib/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=postgres ## set GOMAXPROCS to number of processors ExecStart=/bin/bash -c "GOMAXPROCS=$(nproc) ionice -c2 -n0 /usr/bin/etcd" Restart=on-failure LimitNOFILE=65536 [Install] WantedBy=multi-user.target'Перечитайте конфигурацию systemd после изменения сервиса:
systemctl daemon-reload
Шаг 4. Активация автоматического запуска компонента#
Включите сервис для автоматического запуска etcd после перезагрузки ОС:
systemctl enable etcd
Шаг 5. Завершающие действия#
Запустите etcd:
systemctl start etcdПроверьте корректность запуска и состояния сервиса:
systemctl status etcd etcd.service - Etcd Server Loaded: loaded (/usr/lib/systemd/system/etcd.service; enabled; vendor preset: disabled) Active: active (running) since Fri 2023-06-16 13:51:25 MSK; 1 months 3 days ago Main PID: 7723 (etcd) CGroup: /system.slice/etcd.service └─7723 /usr/bin/etcdПроверьте узлы кластера:
etcdctl member listБолее информативный вариант:
etcdctl endpoint status --write-out=table --endpoints https://{{ replica_host }}:{Порт},https://{{ arbiter_host }}:{Порт},https://{{ master_host }}:{Порт}Проверьте состояние кластера etcd:
# для доступа к api v2 используйте ETCDCTL_API=2 перед командой etcdctl, либо экспортируйте данный параметр в env etcdctl --endpoints https://{{ replica_host }}:{Порт},https://{{ arbiter_host }}:{Порт},https://{{ master_host }}:{Порт} endpoint healt http://{{ replica_host }}:{Порт} http://{{ arbiter_host }}:{Порт} http://{{ master_host }}:{Порт} cluster is healthy
Шаг 6. Дополнительные действия#
Включите аутентификацию в etcd и добавьте необходимых пользователей и роли для работы Pangolin Manager:
# для доступа к api v2 используйте ETCDCTL_API=2 перед командой etcdctl, либо экспортируйте данный параметр в env
etcdctl user add root
etcdctl user add patronietcd
etcdctl role add patroni
etcdctl role grant-permission patroni readwrite '/service/*'
etcdctl user grant-role patronietcd patroni
etcdctl auth enable
Шаг 7. Проверка конфигурации etcd#
При первом запуске Pangolin Manager должен определить запущенный экземпляр СУБД Pangolin и создать конфигурацию в etcd. Пример конфигурации в etcd:
root ~ % etcdctl --user root:ENTER_PASSWORD_HERE get /
Password:
/service
/service/clustername
/service/clustername/config
/service/clustername/status
/service/clustername/members
/service/clustername/members/srv-0-1
/service/clustername/initialize
/service/clustername/leader
Полезные функции etcd#
Список полезных команд для использования функций etcd:
Для быстрого просмотра проблем с кластером:
etcdctl --cluster=true endpoint healthДля просмотра всей структуры хранилища
etcdctl get / --prefix --keys-onlyДля получения значения из параметра:
etcdctl get --write-out=json /service/clustername/leader etcdctl get --write-out=json /service/clustername/members/