Перейти к основному содержимому

Ручная пошаговая установка по инструкции

Сведения

При переходе к данному разделу предполагается, что процесс подготовки к установке уже пройден.

Данный раздел рассматривает процесс ручной пошаговой установки СУБД Pangolin по инструкции. Пошаговая установка выполняется на конечных узлах кластера СУБД.

Порядок установки

Шаги процесса ручной пошаговой установки:

  1. Подготовка дистрибутива.
  2. Проверить готовность к ручной установке.
  3. Установка необходимых rpm/deb пакетов.
  4. Создание системных директорий необходимых для работы СУБД.
  5. Импорт лицензии.
  6. Подготовка переменных окружения в .bash_profile.
  7. Развертывание экземпляра СУБД (c окружением 1C или без).
  8. Корректировка конфигурационных параметров\файлов.
  9. Запуск СУБД.
  10. Проверка результата процесса установки.
Подсказка

Все блоки подготовки и процесса установки являются обязательными.

При ручной установке будут отсутствовать компоненты Pangolin (etcd, Pangolin Manager, Pangolin Pooler и другие) не будут настроены различные параметры, в том числе присущие только Pangolin:

  • настройки конфигурационных файлов (postgresql.conf, pg_hba.conf);
  • настройки кластерной конфигурации;
  • настройки ролевой модели;
  • настройки расширений;
  • настройки ротации журналов;
  • и другие.

Для автоматизированной настройки данных параметров при развертывании СУБД Pangolin используйте автоматизированный сценарий.

Подсказка

Для развертывания СУБД Pangolin на окружении 1С выполните шаги с пометкой «для окружения 1С», вместо «обычное окружение».

Предусловия

Выполните распаковку дистрибутива с помощью вспомогательного скрипта unpacker-distrib.sh (с ключом --not-pack) и скопируйте полученный каталог дистрибутива на конечный хост СУБД.

Подготовка к ручной установке

  1. Проверьте что порт для работы СУБД (по умолчанию 5432) не заблокирован на уровне сети или виртуальной машины.

  2. Проверьте отсутствие системного пользователя postgres:

    getent passwd | grep postgres
    Важно

    По умолчанию в семействе ОС Альт СП \ ОС Альт Сервер пользователь postgres установлен в системе по умолчанию. Для корректной установки требуется удалить данного пользователя:

    sudo userdel --force --remove postgres

    Удаление необходимо для отсутствия конфликтов при установке rpm-пакетов СУБД Pangolin.

  3. Проверьте занятость 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)
  4. Проверьте, что виртуальные машины, которые будут использоваться для установки СУБД, находятся в области видимости. Воспользуйтесь командой 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
Подсказка

Пример заполненной команды:

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. Подготовка переменных окружения

  1. Переключитесь на пользователя postgres:

    sudo iu - postgres
  2. Измените файл .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
  3. Перечитайте переменные окружения для .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. Корректировка конфигурационных файлов

  1. Отредактируйте конфигурационный файл $PGDATA/postgresql.conf:

    1. Запустите утилиту 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
    2. Примените созданный конфигурационный файл:

      mv /pgdata/0{base_version}/data/postgresql.conf.oltp /pgdata/0{base_version}/data/postgresql.conf
      Сведения

      Pangolin Tuner не конфигурирует индивидуальные настройки, связанные с количеством подключений либо с активацией расширений. Данные параметры необходимо настроить самостоятельно.

      Описание параметров, по которым утилита Pangolin Tuner формирует значение, расположено в разделе «Тюнинг параметров» документа «Руководство администратора».

    3. Измените значение конфигурационного параметра 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 передается список для всех остальных ролей.

  2. Отредактируйте конфигурационный файл $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

Установка 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-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

  1. Измените файл userlist.txt (путь до файла /etc/pangolin-pooler/userlist.txt) при помощи текстового редактора, добавив следующие строки:

    "<user>" "<password>"

    Пример файла userlist.txt:

    "user" "qwerty"

    Или в засекреченном виде:

    "user" "md5175c641eaed0b6c05ae8444b73d789f0"
  2. Измените права и владельца файла:

    sudo chown postgres:postgres /etc/pangolin-pooler/userlist.txt
    sudo chmod 0600 /etc/pangolin-pooler/userlist.txt

Шаг 4. Настройка ротации журналов

  1. Выполните конфигурирование ротации журналов. Содержимое файла 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
    }
  2. Назначьте права:

    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

  1. Установите пакет 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.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
  2. Установите пакет pangolin-manager:

    sudo dnf install pangolin-manager-{version_component}-{OS}.x86_64.rpm

    Пример заполненной команды:

    cd distributive
    sudo dnf install pangolin-manager-2.1.4-sberlinux9.x86_64.rpm
  3. Дальнейшие действия удобнее выполнять под системным пользователем postgres. Переключитесь на него командой:

    su -iu postgres

Шаг 2. Настройка перезагрузки компонентов (опциональный)

Важно

Выполните данный шаг в случае конфигурации с Pangolin Pooler.

  1. Перейдите в каталог /etc/pangolin-manager:

    postgres ~ % cd /etc/pangolin-manager
  2. Создайте скрипт 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. Создание пользователя для репликации

  1. Создайте пользователя для работы репликации в СУБД Pangolin с паролем согласно парольной политике:

    CREATE USER patroni WITH ENCRYPTED PASSWORD '<password>';
  2. Отключите срок действия пароля и выставьте лимит подключений:

    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. Завершающие действия

  1. Остановите PostgreSQL:

    systemctl stop postgresql
  2. Перечитайте обновленную конфигурацию Pangolin (reload):

    sudo -iu postgres
    psql -c 'SELECT pg_reload_conf();'
    exit
  3. Активируйте сервис Pangolin Manager (под системным пользователем, например, root) для автоматического запуска после перезагрузки ОС:

    sudo systemctl enable pangolin-manager
  4. Запустите сервис (сначала на узле мастер, затем на реплике и после на арбитре):

    sudo systemctl start pangolin-manager
  5. Проверьте корректность запуска и состояние сервиса. Пример статуса:

    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. Настройка конфигурационных файлов

  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).

  2. При старте кластера с 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:

  1. Добавьте пользователя 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>"}'
  2. Добавьте «обычного» пользователя:

    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":"<Пароль пользователя>"}'
  3. Добавьте роль с правами на чтение и запись:

    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/*"]}}}'
  4. Назначьте роль «обычному» пользователю:

    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"]}'
  5. Проверьте статус авторизации пользователя 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
  6. Включите авторизацию:

    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

Шаг 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

  1. Отредактируйте файл 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'
  2. Перечитайте конфигурацию systemd после изменения сервиса:

    systemctl daemon-reload

Шаг 4. Активация автоматического запуска компонента

Включите сервис для автоматического запуска etcd после перезагрузки ОС:

systemctl enable etcd

Шаг 5. Завершающие действия

  1. Запустите etcd:

    systemctl start etcd
  2. Проверьте корректность запуска и состояния сервиса:

    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
  3. Проверьте узлы кластера:

    etcdctl member list

    Более информативный вариант:

    etcdctl endpoint status --write-out=table --endpoints https://{{  replica_host }}:{Порт},https://{{ arbiter_host }}:{Порт},https://{{ master_host }}:{Порт}
  4. Проверьте состояние кластера 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/