Пошаговая установка по инструкции#
При переходе к данному разделу предполагается, что процесс подготовки к установке уже пройден. Пошаговая установка выполняется на конечных узлах кластера СУБД.
Данный раздел рассматривает процесс ручной пошаговой установки СУБД Pangolin по инструкции. Пошаговая установка выполняется на конечных узлах кластера СУБД.
Порядок установки#
Шаги процесса ручной пошаговой установки:
Проверить готовность к ручной установке.
Подсказка
Все блоки подготовки и самого процесса установки являются обязательными.
При ручной установке не будут настроены различные параметры, в том числе присущие только Pangolin:
настройки конфигурационных файлов (
postgresql.conf,pg_hba.conf);настройки кластерной конфигурации;
будут отсутствовать компоненты Pangolin (etcd, Pangolin Manager, Pangolin Pooler, и другие);
настройки ролевой модели;
настройки расширений;
настройки ротации журналов;
и другие.
Для автоматизированной настройки данных параметров при развертывании СУБД Pangolin используйте автоматизированный сценарий.
Подсказка
Для развертывания СУБД Pangolin на окружении 1С выполните шаги с пометкой «для окружения 1С», вместо «обычное окружение».
Предусловия#
Выполните распаковку дистрибутива с помощью вспомогательного скрипта unpacker-distrib.sh (с ключом --not-pack) и скопируйте полученный каталог дистрибутива на конечный хост СУБД.
Подготовка к ручной установке#
Проверьте что порт для работы СУБД (по умолчанию
5432) не заблокирован на уровне сети или виртуальной машины.Проверьте существование системного пользователя postgres:
getent passwd | grep postgresНеобходимо, чтобы postgres имел возможность фиксацию логов и имел свою home-директорию.
Проверьте занятость
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:POSTGRES_USER_GUID=111 POSTGRES_GROUP_GUID=111 dnf install pangolin-dbms-6.5Список переменных использующий
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#
Данный раздел предназначен для описания сценария процесса ручной установки СУБД Pangolin на операционные системы (ОС), такие как:
Platform V SberLinux OS Server;
РЕД ОС;
Red Hat Enterprise Linux;
CentOS;
Astra Linux;
Альт СП.
Для уточнения поддерживаемых версий указанных ОС обратитесь к списку в разделе «Подготовка окружения».
Обозначения
Далее в разделе, в приведенных блоках кода, будут указаны следующие обозначения:
{OS}- операционная система;{version_OS}- версия операционной системы;{path}- путь к директории или путь к дистрибутиву;{product_version}- версия продукта (текущая версия: 6.5.1);{short_version}- короткая версия продукта (текущая: 6.5);{base_version}- основная версия продукта (текущая: 6);{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}-{product_version}-client-{OS}.x86_64.rpm
sudo dnf install utilities/pangolin-tuner-{version_component}-{OS}.x86_64.rpm
sudo yum install pangolin-dbms-{short_version}-{product_version}-rhel{version_OS}.x86_64.rpm
sudo yum install pangolin-dbms-{short_version}-{product_version}-client-rhel{version_OS}.x86_64.rpm
sudo yum install utilities/pangolin-tuner-{version_component}-rhel{version_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-6.5-6.5.0-sberlinux8.x86_64.rpm
sudo dnf -y install pangolin-dbms-6.5-client-6.5.0-sberlinux8.x86_64.rpm
sudo dnf -y install utilities/pangolin-tuner-1.0.0-sberlinux8.x86_64.rpm
Шаг 2. Создание системных директорий необходимых для работы СУБД#
Создайте директории $PGDATA, /pgerrorlogs и /opt/pangolin_license:
sudo mkdir -p /pgdata/0{base_version}/
sudo chown -R postgres:postgres /pgdata/0{base_version}/
sudo mkdir -p /pgerrorlogs/0{base_version}/
sudo chown postgres:postgres /pgerrorlogs/0{base_version}/
sudo mkdir -p /opt/pangolin_license/
sudo chown postgres:postgres /opt/pangolin_license/
Шаг 3. Импорт лицензии#
Для целей соблюдения лицензионных условий продукта применяется файл, содержащий параметры лицензии и подписанный цифровой подписью с использованием приватного ключа.
Добавьте файл с лицензией license.json в папку /opt/pangolin_license/ с правами postgres:postgres:
sudo mv /{path}/license.json /opt/pangolin_license/
sudo chown postgres:postgres /opt/pangolin_license/license.json
Шаг 4. Подготовка переменных окружения#
Переключитесь на пользователя
postgres:sudo su - postgresИзмените файл
.bash_profileпри помощи текстового редактора, добавив следующие строки с переменными окружения (замените переменные в скобках{ }на актуальные значения):umask 022 export LD_LIBRARY_PATH=/usr/pangolin-{product_version}/lib export PATH=$PATH:/usr/pangolin-{product_version}/bin export PG_PLUGINS_PATH=/usr/pangolin-{product_version}/lib export PGHOME=/usr/pangolin-{product_version} export PGDATABASE=postgres export PGUSER=postgres export PGHOST=127.0.0.1 export PGPORT=5433 export PGCLIENTENCODING=UTF8 export CLNAME=clustername export PGDATA=/pgdata/0{base_version}/data export MANPATH=$MANPATH:$PGHOME/share/manПеречитайте переменные окружения для
bash_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 в Docker должен выполняться с опциональными параметрами, определяющими количество CPU и памяти, для корректного расчета значений. Это связано с особенностью вычисления значений утилитой этих характеристик. Формируемое значение соответствует общей памяти сервера и CPU, на котором развернут контейнер, а не значениям конкретного контейнера.
Профиль OLTP:
/opt/pangolin-tuner/bin/pangolin-tuner --config /pgdata/data/data/postgresql.conf --profile OLTP --output-file /pgdata/data/data/postgresql.conf.oltpПрофиль OLAP:
/opt/pangolin-tuner/bin/pangolin-tuner --config /pgdata/data/data/postgresql.conf --profile OLAP --output-file /pgdata/data/data/postgresql.conf.oltpПрофиль 1C (для окружения 1С):
/opt/pangolin-tuner/bin/pangolin-tuner --config /pgdata/data/data/postgresql.conf --profile 1C --output-file /pgdata/data/data/postgresql.conf.oltpПримените созданный конфигурационный файл:
mv /pgdata/data/data/postgresql.conf.oltp /pgdata/data/data/postgresql.confPangolin Tuner не конфигурирует индивидуальные настройки, связанные с количеством подключений, либо с активацией расширений. Данные параметры необходимо настроить самостоятельно.
Описание параметров, по которым утилита Pangolin Tuner формирует значение, расположено в разделе «Тюнинг параметров» документа «Руководство администратора».
Отредактируйте конфигурационный файл
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 /pgerrorlogs/0{base_version}/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 yum 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-rhel8.7.x86_64.rpm
Шаг 2. Конфигурирование Pangolin Pooler#
Отредактируйте файл pangolin-pooler.ini:
sudo -iu postgres
sudo 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 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=5433 auth_port=5544 auth_pool_size=1
[pgbouncer]
listen_port = 6544
listen_addr = *
auth_type = scram-sha-256
auth_file = /etc/pangolin-pooler/userlist.txt
auth_proxy = on
auth_failure_threshold = 3
auth_inactivity_period = 60
auth_last_size = 10
log_audit = 1
logfile = /pgerrorlogs/06/pangolin-pooler/pangolin-pooler.log
pidfile = /var/run/user/984/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 vi /etc/logrotate.d/pangolin-poolerПример файла
pangolin-pooler:/pgerrorlogs/06/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/984/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:
sudo dnf install pangolin-manager-{version_component}-{OS}.x86_64.rpmsudo yum 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-sberlinux8.x86_64.rpmДальнейшие действия удобнее выполнять под системным пользователем
postgres. Переключитесь на системного пользователя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только при первом старте Pangolin Manager-кластера, поэтому их так же необходимо заполнить на основе текущих конфигурационных файлов PostgreSQL;postgresql– исправьте записи на основе конфигурационного файлаpostgresql.conf;pg_hba– исправьте записи на основе конфигурационного файлаpg_hba.conf;tags– оставьте без изменения, как в скрипте генерации, для обычного использования достаточно выставить все параметры блокаtagsвfalse;scope– необходимо указать имя кластера (cluster), вnameимя текущего сервера (hostname).
Шаг 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 5433 -U patroni -d postgres
postgres ~ % pg_auth_config add -h $HOSTNAME -p 5433 -U patroni -d replication
postgres ~ % pg_auth_config add -h localhost -p 5433 -U patroni -d postgres
postgres ~ % pg_auth_config add -h localhost -p 5433 -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/bin/postgres -D /pgdata/06/data/ --config-file=/pgdata/06/data/postgresql.conf --listen_addresses=<IP-address> --port=5433 --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. Ниже приведен пример настройки параметров секцииpangolin_dcs. В конфигурационном файле этой секцией замените секциюetcd:pangolin_dcs: self_addr: srv-0-141:2481 partner_addrs: srv-0-134:2481,srv-0-137:2481 data_dir: /pgdata/06/raft_data journal_max_size: 10485760 journal_wait_timeout: 10 memory_journal_size: 10000 journal_force_read_wait: true dump_dir: /pgdata/06/raft_dump dump_interval: 300 dump_wait_timeout: 10 logfile: /pgerrorlogs/{version}/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мб;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, pg_auth_password, pg_certs_rotate_agent) в основной пакет Pangolin Manager, на узле арбитра необходима установка файла лицензии. Утилита pangolin-auth-reencrypt копируется из дистрибутива Pangolin, на узле арбитра производится настройка аналогично узлам с DBMS — создание пользователя безопасности kmadmin_pg и настройка каталогов с утилитами.
Ниже приведены каталоги с настроенными правами доступа:
/etc/postgres - drwxrwx--x 2 postgres kmadmin_pg
/opt/pangolin-common - drwx--x--- 3 postgres kmadmin_pg
/opt/pangolin_license - drwxr-x--- 2 postgres kmadmin_pg
/opt/pangolin-manager-2.1.0 - drwx---r-x------ 5 postgres postgres
/opt/pangolin-manager-2.1.0/bin - drwx-----x 3 postgres postgres
/opt/pangolin-manager-2.1.0/lib - drwx---r-x 4 postgres postgres
/opt/pangolin-manager-2.1.0/lib/plugins - drwx---r-x 2 postgres postgres
Шаг 4. Удаление дубликатов бинарных файлов#
Так же после установки нового rpm-пакета необходимо удалить дубликаты бинарных файлов с узлов мастера и реплики, расположенных по пути:
/opt/pangolin-manager-2.1.0/bin/pg_auth_password
/opt/pangolin-manager-2.1.0/bin/pg_certs_rotate_agent
/opt/pangolin-manager-2.1.0/bin/setup_kms_credentials
Шаг 5. Состав кластера#
На узле арбитра находится служба 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
User=postgres
Group=postgres
# Read in configuration file if it exists, otherwise proceed
Environment="PG_LICENSE_PATH=/opt/pangolin_license"
Environment="PG_LD_LIBRARY_PATH=/opt/pangolin-dbms/lib"
Environment="PG_PLUGINS_PATH=/opt/pangolin-dbms/lib"
Environment="PATRONI_PLUGINS_PATH=/opt/pangolin-manager/lib/postgresql_se_libs"
Environment="LD_LIBRARY_PATH=/opt/pangolin-manager/lib/postgresql_se_libs"
Environment="PYTHONPATH=/opt/pangolin-manager/lib/python3/site-packages:/opt/pangolin-manager/lib64/python3/site-packages:/opt/pangolin-manager/lib/python3.6/site-packages:/opt/pangolin-manager/lib64/python3.6/site-packages"
LimitNOFILE=65536
# Pre-commands to start watchdog device
# Uncomment if watchdog is part of your patroni setup
PermissionsStartOnly=true
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]
Установка 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 yum 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/