Ручная пошаговая установка по инструкции
При переходе к данному разделу предполагается, что процесс подготовки к установке уже пройден.
Данный раздел рассматривает процесс ручной пошаговой установки СУБД Pangolin по инструкции. Пошаговая установка выполняется на конечных узлах кластера СУБД.
Порядок установки
Шаги процесса ручной пошаговой установки:
- Подготовка дистрибутива.
- Проверить готовность к ручной установке.
- Установка необходимых rpm/deb пакетов.
- Создание системных директорий необходимых для работы СУБД.
- Импорт лицензии.
- Подготовка переменных окружения в
.bash_profile
. - Развертывание экземпляра СУБД (c окружением 1C или без).
- Корректировка конфигурационных параметров\файлов.
- Запуск СУБД.
- Проверка результата процесса установки.
Все блоки подготовки и самого процесса установки являются обязательными.
При ручной установке не будут настроены различные параметры, в том числе присущие только 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 установлен в системе по умолчанию. Для корректной установки требуется удалить данного пользователя:
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-6.5
ВажноИзменение актуально для ОС 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;
- РЕД ОС;
- Red Hat Enterprise Linux;
- CentOS;
- Astra Linux;
- Альт СП \ ОС Альт Сервер.
Для уточнения поддерживаемых версий указанных ОС обратитесь к списку в разделе «Системные требования».
Обозначения
Далее в разделе, в приведенных блоках кода, будут указаны следующие обозначения:
{OS}
- операционная система;{version_OS}
- версия операционной системы;{path}
- путь к директории или путь к дистрибутиву;{product_version}
- версия продукта (текущая версия: 6.5.2);{short_version}
- короткая версия продукта (текущая: 6.5);{base_version}
- основная версия продукта (текущая: 6);{version_component}
- версия компонента.
Скорректируйте переменные относительно реализуемого сценария установки.
Шаг 1. Установка rpm/deb-пакетов
Установите пакеты серверной и клиентской части СУБД, а также пакет утилиты Pangolin Tuner:
Данный шаг установки пакетов может упростить использование мета-пакетов. Особенно в случае, когда необходима дальнейшая дополнительная установка каких-либо компонентов.
- SberLinux, РЕД ОС, CentOS
- Red Hat Enterprise Linux
- Astra Linux
- Альт СП
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
(/pgdata
), /pgerrorlogs
и /opt/pangolin_license
:
sudo mkdir -p /pgdata/
sudo chown -R postgres:postgres /pgdata/
sudo mkdir -p /pgerrorlogs/0{base_version}
sudo chown postgres:postgres /pgerrorlogs/
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
(в случае ОС Astra Linux -.profile
) при помощи текстового редактора, добавив следующие строки с переменными окружения (замените переменные в скобках{ }
на актуальные значения):umask 022
export LD_LIBRARY_PATH=/usr/pangolin-{short_version}/lib
export PATH=$PATH:/usr/pangolin-{short_version}/bin
export PG_LICENSE_PATH=/opt/pangolin_license/
export PG_PLUGINS_PATH=/usr/pangolin-{short_version}/lib
export PGHOME=/usr/pangolin-{short_version}
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 в 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.conf
СведенияPangolin 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 /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:
- SberLinux, РЕД ОС, CentOS
- Red Hat Enterprise Linux
- Astra Linux
- Альт СП
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
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 = /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 cp /opt/pangolin-pooler/share/doc/logrotate/pangolin-pooler /etc/logrotate.d/pangolin-pooler
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-venv
, обязательную зависимость пакетаpangolin-manager
:- SberLinux, РЕД ОС, CentOS
- Red Hat Enterprise Linux
- Astra Linux
- Альт СП
sudo dnf install pangolin-manager-venv-{version_component}-{OS}.x86_64.rpm
sudo yum install pangolin-manager-venv-{version_component}-{OS}.x86_64.rpm
sudo apt install pangolin-manager-venv-{version_component}_amd64.deb
sudo 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-sberlinux8.x86_64.rpm -
Установите пакет
pangolin-manager
:- SberLinux, РЕД ОС, CentOS
- Red Hat Enterprise Linux
- Astra Linux
- Альт СП
sudo dnf install pangolin-manager-{version_component}-{OS}.x86_64.rpm
sudo yum install pangolin-manager-{version_component}-{OS}.x86_64.rpm
sudo apt install pangolin-manager-{version_component}_amd64.deb
sudo 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
только при первом старте кластера, поэтому их так же необходимо заполнить на основе текущих конфигурационных файлов 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/bin/postgres -D /pgdata/06/data/ --config-file=/pgdata/06/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
. Ниже приведен пример настройки параметров секции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/6.5.2/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
, pg_auth_password
, pangolin-certs-rotate
) в основной пакет 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/pangolin-certs-rotate
/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]
Шаг 6. Добавление ролевой модели
После настройки конфигурационных файлов 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:
- SberLinux, РЕД ОС, CentOS
- Red Hat Enterprise Linux
- Astra Linux
- Альт СП
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/