Задание 1: Ручная установка Pangolin
По итогам выполнения данной лабораторной работы вы научитесь планировать развертывание кластера СУБД Pangolin на нескольких узлах, устанавливать RPM-пакеты и компоненты (серверную и клиентскую части) СУБД. Вы также сможете выполнять начальную настройку standalone-сервера и проверять работоспособность установленного программного обеспечения.
Планирование развертывания кластера
В данной лабораторной работе рассматривается развертывание кластера Pangolin вручную на трех узлах:
srv1— лидер (мастер-сервер);srv2— реплика;srv3— арбитр.
Предлагаемая конфигурация удовлетворяет минимальным требованиям отказоустойчивости для учебных целей, в реальных сценариях могут использоваться большее количество узлов.
Развертывание установочных пакетов
-
Подключитесь к узлу
srv1и проверьте наличие установочных пакетов:[student@srv1 ~]$ find Distr/ -maxdepth 2 -type f -name '*.rpm'Вывод команды:
Distr/pangolin-manager-2.1.13-redos8.0.x86_64.rpmDistr/pangolin-dbms-6.7-libpq-dev-6.7.0-redos8.0.x86_64.rpmDistr/pangolin-core-6.7.0-redos8.0.x86_64.rpmDistr/utilities/pangolin-auth-password-6.7.0-redos8.0.x86_64.rpmDistr/utilities/pangolin-auth-reencrypt-6.7.0-redos8.0.x86_64.rpmDistr/utilities/pangolin-diagnostic-tool-6.7.0-redos8.0.x86_64.rpmDistr/utilities/pangolin-security-utilities-6.7.0-redos8.0.x86_64.rpmDistr/utilities/pangolin-tuner-1.1.1-redos8.0.x86_64.rpmDistr/utilities/pangolin-certs-rotate-6.7.0-redos8.0.x86_64.rpmDistr/timescaledb/pangolin-timescaledb-6.7-apache-2.25.0-redos8.0-x86_64.rpmDistr/pangolin-full-6.7.0-redos8.0.x86_64.rpmDistr/pangolin-manager-dcs-6.7.0-redos8.0.x86_64.rpmDistr/debug/pangolin-dbms-6.7-libpq-debuginfo-6.7.0-redos8.0.x86_64.rpmDistr/debug/pangolin-backup-tools-debuginfo-redos8.0.x86_64.rpmDistr/debug/pangolin-pooler-debuginfo-redos8.0.x86_64.rpmDistr/debug/pangolin-dbms-6.7-debuginfo-6.7.0-redos8.0.x86_64.rpmDistr/debug/pangolin-manager-debuginfo-redos8.0.x86_64.rpmDistr/debug/pangolin-dbms-6.7-client-debuginfo-6.7.0-redos8.0.x86_64.rpmDistr/pangolin-dbms-6.7-client-6.7.0-redos8.0.x86_64.rpmDistr/pangolin-full-debuginfo-6.7.0-redos8.0.x86_64.rpmDistr/pangolin-dbms-6.7-6.7.0-redos8.0.x86_64.rpmDistr/pangolin-orchestrated-6.7.0-redos8.0.x86_64.rpmDistr/pangolin-dbms-6.7-libpq-6.7.0-redos8.0.x86_64.rpmDistr/pangolin-backup-tools-redos8.0.x86_64.rpmDistr/pangolin-pooler-1.5.6-redos8.0.x86_64.rpm -
Скопируйте установочные пакеты на узлы
srv2иsrv3:-
На
srv2:[student@srv1 ~]$ find Distr/ -maxdepth 2 -type f -name '*.rpm' | cpio -o | ssh srv2 cpio -ivd -
На
srv3:[student@srv1 ~]$ find Distr/ -maxdepth 2 -type f -name '*.rpm' | cpio -o | ssh srv3 cpio -ivd
-
-
Проверьте успешность копирования:
[student@srv1 ~]$ ssh srv2 ls -RF Distr | head -50[student@srv1 ~]$ ssh srv3 ls -RF Distr | head -50Ожидаемый результат: отображение структуры каталога с RPM-пакетами.
Установка ПО СУБД Pangolin
Установку серверной и клиентской части необходимо выполнить только на узлах srv1 и srv2, так как srv3 будет использоваться только как арбитр.
-
Установите серверную и клиентскую части СУБД на
srv1:[student@srv1 ~]$ sudo dnf install -y Distr/{pangolin-dbms-6.7-6.7.0-redos8.0.x86_64,pangolin-dbms-6.7-client-6.7.0-redos8.0.x86_64}.rpmОжидаемый результат: успешная установка двух пакетов без ошибок зависимостей.
-
Установите серверную и клиентскую части СУБД на
srv2:[student@srv1 ~]$ ssh srv2 sudo dnf install -y Distr/{pangolin-dbms-6.7-6.7.0-redos8.0.x86_64,pangolin-dbms-6.7-client-6.7.0-redos8.0.x86_64}.rpm -
Подключите разделяемые библиотеки Pangolin:
-
На
srv1:[student@srv1 ~]$ echo /usr/pangolin{,-dbms-client}/lib | tr ' ' '\n' | sudo tee /etc/ld.so.conf.d/pangolin.conf[student@srv1 ~]$ sudo ldconfig -
На
srv2:[student@srv1 ~]$ echo /usr/pangolin{,-dbms-client}/lib | tr ' ' '\n' | ssh srv2 sudo tee /etc/ld.so.conf.d/pangolin.conf[student@srv1 ~]$ ssh srv2 sudo ldconfig
-
Подготовка каталогов и файловой системы
-
Создайте необходимые каталоги на
srv1:[student@srv1 ~]$ sudo mkdir -p /pgdata/06/data /pgerrorlogs/06/pangolin-manager /opt/pangolin_license[student@srv1 ~]$ sudo chown -R postgres:postgres /pgdata /pgerrorlogs /opt/pangolin_license -
Проверьте права доступа:
[student@srv1 ~]$ sudo ls -ld /pgdata/06/data /pgerrorlogs/06/pangolin-manager /opt/pangolin_licensedrwxr-xr-x 2 postgres postgres 4096 Jan 4 21:45 /opt/pangolin_licensedrwxr-xr-x 2 postgres postgres 4096 Jan 4 21:45 /pgdata/06/datadrwxr-xr-x 2 postgres postgres 4096 Jan 4 21:45 /pgerrorlogs/06/pangolin-manager -
Повторите создание каталогов на
srv2:[student@srv1 ~]$ ssh srv2 sudo mkdir -p /pgdata/06/data /pgerrorlogs/06/pangolin-manager /opt/pangolin_license[student@srv1 ~]$ ssh srv2 sudo chown -R postgres:postgres /pgdata /pgerrorlogs /opt/pangolin_license
Настройка переменных окружения
-
Настройте переменные окружения для пользователя
studentнаsrv1:[student@srv1 ~]$ vi ~student/.bash_profileumask 022export LD_LIBRARY_PATH=/usr/pangolin/libexport PG_PLUGINS_PATH=/usr/pangolin/libexport PGHOME=/usr/pangolinexport PGHOST=srv1export PGPORT=5433export PGCLIENTENCODING=UTF8export CLNAME=zvoexport PGDATA=/pgdata/06/dataexport PG_LICENSE_PATH=/opt/pangolin_license/export LANG=en_US.UTF-8export LC_ALL="en_US.UTF-8"export MANPATH=$MANPATH:/usr/pangolin/share/manexport PATH=$PATH:/usr/pangolin/bin -
Настройте переменные окружения для пользователя
postgresнаsrv1:[student@srv1 ~]$ sudo vi ~postgres/.bash_profileumask 022export LD_LIBRARY_PATH=/usr/pangolin/libexport PG_PLUGINS_PATH=/usr/pangolin/libexport PGHOME=/usr/pangolinexport PGHOST=srv1export PGPORT=5433export PGCLIENTENCODING=UTF8export CLNAME=zvoexport PGDATA=/pgdata/06/dataexport PG_LICENSE_PATH=/opt/pangolin_license/export LANG=en_US.UTF-8export LC_ALL="en_US.UTF-8"export MANPATH=$MANPATH:/usr/pangolin/share/manexport PATH=\$PATH:/usr/pangolin/bin -
Скопируйте настройки на
srv2:[student@srv1 ~]$ scp ~/.bash_profile srv2:~/[student@srv1 ~]$ sudo -u postgres cat ~postgres/.bash_profile | ssh srv2 sudo -u postgres tee ~postgres/.bash_profile
Установка лицензии
-
Скопируйте файл лицензии на
srv1:[student@srv1 ~]$ sudo cp -v Distr/license.json /opt/pangolin_license/[student@srv1 ~]$ sudo chown -c postgres:postgres /opt/pangolin_license/license.json -
Скопируйте файл лицензии на
srv2:[student@srv1 ~]$ sudo -u postgres cat /opt/pangolin_license/license.json | ssh srv2 sudo -u postgres tee /opt/pangolin_license/license.json
Инициализация каталога данных
-
Переключитесь на пользователя
postgresи проверьте каталог данных:[student@srv1 ~]$ sudo su - postgres[postgres@srv1 ~]$ ls -ld $PGDATA[postgres@srv1 ~]$ ls -la $PGDATAОжидаемый результат: пустой каталог данных.
-
Инициализируйте каталог данных кластера:
[postgres@srv1 ~]$ initdb -kОжидаемый результат: успешное завершение инициализации с выводом информации о созданных файлах.
-
Проверьте права доступа к каталогу данных:
[postgres@srv1 ~]$ ls -ld $PGDATA[postgres@srv1 ~]$ ls -lF $PGDATAОжидаемый результат: строгие права доступа (700) для владельца
postgres.
Настройка конфигурации СУБД
-
Добавьте базовые параметры настройки в
postgresql.conf:[postgres@srv1 ~]$ vi $PGDATA/postgresql.conf# Pangolin conflisten_addresses = '*'port = 5433max_connections = 100superuser_reserved_connections = 3enabled_extra_auth_methods = 'peer'logging_collector = onlog_directory = '/pgerrorlogs/06/'log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'psql.save_history = 'on' -
Проверьте добавленные параметры:
[postgres@srv1 ~]$ sed -n '/^# Pangolin conf/,$p' $PGDATA/postgresql.conf -
Настройте аутентификацию в файле
pg_hba.conf:-
Замените метод
trustнаpeerдляlocalсоединений:[postgres@srv1 ~]$ sed -i.bak 's/^\(local.*\)trust/\1 peer/' $PGDATA/pg_hba.conf -
Замените метод
trustнаscram-sha-256дляhostсоединений:[postgres@srv1 ~]$ sed -i.bak 's/^\(host.*\)trust/\1 scram-sha-256/' $PGDATA/pg_hba.conf
-
-
Проверьте настройки аутентификации:
[postgres@srv1 ~]$ tail -14 $PGDATA/pg_hba.conf# "local" is for Unix domain socket connections onlylocal all all peer# IPv4 local connections:host all all 127.0.0.1/32 scram-sha-256# IPv6 local connections:host all all ::1/128 scram-sha-256...
Проверка работоспособности СУБД
-
Запустите СУБД в тестовом режиме:
[postgres@srv1 ~]$ pg_ctl -l test.log start -
Проверьте запущенные процессы:
[postgres@srv1 ~]$ ps f -C postgresОжидаемый результат: список процессов СУБД (
postmasterи вспомогательные). -
Проверьте логи запуска:
[postgres@srv1 ~]$ cat test.logОжидаемый результат: отсутствие критических ошибок, информация о лицензии.
-
Подключитесь к СУБД с использованием аутентификации
peer:[postgres@srv1 ~]$ psql -h '/tmp' -
Создайте необходимые роли и базы данных:
postgres=# ALTER ROLE postgres PASSWORD 'postgres';postgres=# CREATE ROLE student LOGIN PASSWORD 'student';postgres=# CREATE DATABASE student OWNER student;postgres=# CREATE USER patroni PASSWORD 'patroni' SUPERUSER REPLICATION VALID UNTIL 'infinity' CONNECTION LIMIT 5; -
Проверьте созданные роли:
postgres=# \duОжидаемый результат: список ролей
postgres,studentиpatroni. -
Протестируйте аутентификацию по паролю:
postgres=# \c student student localhost 5433Ожидаемый результат: успешное подключение к базе данных
student. -
Остановите СУБД после проверки:
[postgres@srv1 ~]$ pg_ctl stop