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

Задание 1: Ручная установка Pangolin

По итогам выполнения данной лабораторной работы вы научитесь планировать развертывание кластера СУБД Pangolin на нескольких узлах, устанавливать RPM-пакеты и компоненты (серверную и клиентскую части) СУБД. Вы также сможете выполнять начальную настройку standalone-сервера и проверять работоспособность установленного программного обеспечения.

Планирование развертывания кластера​

В данной лабораторной работе рассматривается развертывание кластера Pangolin вручную на трех узлах:

  • srv1 — лидер (мастер-сервер);
  • srv2 — реплика;
  • srv3 — арбитр.
Внимание!

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

Развертывание установочных пакетов​

  1. Подключитесь к узлу srv1 и проверьте наличие установочных пакетов:

    [student@srv1 ~]$ find Distr/ -maxdepth 2 -type f -name '*.rpm'
    Вывод команды:

    Distr/pangolin-manager-2.1.13-redos8.0.x86_64.rpm
    Distr/pangolin-dbms-6.7-libpq-dev-6.7.0-redos8.0.x86_64.rpm
    Distr/pangolin-core-6.7.0-redos8.0.x86_64.rpm
    Distr/utilities/pangolin-auth-password-6.7.0-redos8.0.x86_64.rpm
    Distr/utilities/pangolin-auth-reencrypt-6.7.0-redos8.0.x86_64.rpm
    Distr/utilities/pangolin-diagnostic-tool-6.7.0-redos8.0.x86_64.rpm
    Distr/utilities/pangolin-security-utilities-6.7.0-redos8.0.x86_64.rpm
    Distr/utilities/pangolin-tuner-1.1.1-redos8.0.x86_64.rpm
    Distr/utilities/pangolin-certs-rotate-6.7.0-redos8.0.x86_64.rpm
    Distr/timescaledb/pangolin-timescaledb-6.7-apache-2.25.0-redos8.0-x86_64.rpm
    Distr/pangolin-full-6.7.0-redos8.0.x86_64.rpm
    Distr/pangolin-manager-dcs-6.7.0-redos8.0.x86_64.rpm
    Distr/debug/pangolin-dbms-6.7-libpq-debuginfo-6.7.0-redos8.0.x86_64.rpm
    Distr/debug/pangolin-backup-tools-debuginfo-redos8.0.x86_64.rpm
    Distr/debug/pangolin-pooler-debuginfo-redos8.0.x86_64.rpm
    Distr/debug/pangolin-dbms-6.7-debuginfo-6.7.0-redos8.0.x86_64.rpm
    Distr/debug/pangolin-manager-debuginfo-redos8.0.x86_64.rpm
    Distr/debug/pangolin-dbms-6.7-client-debuginfo-6.7.0-redos8.0.x86_64.rpm
    Distr/pangolin-dbms-6.7-client-6.7.0-redos8.0.x86_64.rpm
    Distr/pangolin-full-debuginfo-6.7.0-redos8.0.x86_64.rpm
    Distr/pangolin-dbms-6.7-6.7.0-redos8.0.x86_64.rpm
    Distr/pangolin-orchestrated-6.7.0-redos8.0.x86_64.rpm
    Distr/pangolin-dbms-6.7-libpq-6.7.0-redos8.0.x86_64.rpm
    Distr/pangolin-backup-tools-redos8.0.x86_64.rpm
    Distr/pangolin-pooler-1.5.6-redos8.0.x86_64.rpm
  2. Скопируйте установочные пакеты на узлы 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
  3. Проверьте успешность копирования:

    [student@srv1 ~]$ ssh srv2 ls -RF Distr | head -50
    [student@srv1 ~]$ ssh srv3 ls -RF Distr | head -50

    Ожидаемый результат: отображение структуры каталога с RPM-пакетами.

Установка ПО СУБД Pangolin​

Внимание!

Установку серверной и клиентской части необходимо выполнить только на узлах srv1 и srv2, так как srv3 будет использоваться только как арбитр.

  1. Установите серверную и клиентскую части СУБД на 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

    Ожидаемый результат: успешная установка двух пакетов без ошибок зависимостей.

  2. Установите серверную и клиентскую части СУБД на 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
  3. Подключите разделяемые библиотеки 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

Подготовка каталогов и файловой системы​

  1. Создайте необходимые каталоги на 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
  2. Проверьте права доступа:

    [student@srv1 ~]$ sudo ls -ld /pgdata/06/data /pgerrorlogs/06/pangolin-manager /opt/pangolin_license
    drwxr-xr-x 2 postgres postgres 4096 Jan 4 21:45 /opt/pangolin_license
    drwxr-xr-x 2 postgres postgres 4096 Jan 4 21:45 /pgdata/06/data
    drwxr-xr-x 2 postgres postgres 4096 Jan 4 21:45 /pgerrorlogs/06/pangolin-manager
  3. Повторите создание каталогов на 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

Настройка переменных окружения​

  1. Настройте переменные окружения для пользователя student на srv1:

    [student@srv1 ~]$ vi ~student/.bash_profile
    umask 022
    export LD_LIBRARY_PATH=/usr/pangolin/lib
    export PG_PLUGINS_PATH=/usr/pangolin/lib
    export PGHOME=/usr/pangolin
    export PGHOST=srv1
    export PGPORT=5433
    export PGCLIENTENCODING=UTF8
    export CLNAME=zvo
    export PGDATA=/pgdata/06/data
    export PG_LICENSE_PATH=/opt/pangolin_license/
    export LANG=en_US.UTF-8
    export LC_ALL="en_US.UTF-8"
    export MANPATH=$MANPATH:/usr/pangolin/share/man
    export PATH=$PATH:/usr/pangolin/bin
  2. Настройте переменные окружения для пользователя postgres на srv1:

    [student@srv1 ~]$ sudo vi ~postgres/.bash_profile
    umask 022
    export LD_LIBRARY_PATH=/usr/pangolin/lib
    export PG_PLUGINS_PATH=/usr/pangolin/lib
    export PGHOME=/usr/pangolin
    export PGHOST=srv1
    export PGPORT=5433
    export PGCLIENTENCODING=UTF8
    export CLNAME=zvo
    export PGDATA=/pgdata/06/data
    export PG_LICENSE_PATH=/opt/pangolin_license/
    export LANG=en_US.UTF-8
    export LC_ALL="en_US.UTF-8"
    export MANPATH=$MANPATH:/usr/pangolin/share/man
    export PATH=\$PATH:/usr/pangolin/bin
  3. Скопируйте настройки на 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

Установка лицензии​

  1. Скопируйте файл лицензии на srv1:

    [student@srv1 ~]$ sudo cp -v Distr/license.json /opt/pangolin_license/
    [student@srv1 ~]$ sudo chown -c postgres:postgres /opt/pangolin_license/license.json
  2. Скопируйте файл лицензии на srv2:

    [student@srv1 ~]$ sudo -u postgres cat /opt/pangolin_license/license.json | ssh srv2 sudo -u postgres tee /opt/pangolin_license/license.json

Инициализация каталога данных​

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

    [student@srv1 ~]$ sudo su - postgres
    [postgres@srv1 ~]$ ls -ld $PGDATA
    [postgres@srv1 ~]$ ls -la $PGDATA

    Ожидаемый результат: пустой каталог данных.

  2. Инициализируйте каталог данных кластера:

    [postgres@srv1 ~]$ initdb -k

    Ожидаемый результат: успешное завершение инициализации с выводом информации о созданных файлах.

  3. Проверьте права доступа к каталогу данных:

    [postgres@srv1 ~]$ ls -ld $PGDATA
    [postgres@srv1 ~]$ ls -lF $PGDATA

    Ожидаемый результат: строгие права доступа (700) для владельца postgres.

Настройка конфигурации СУБД​

  1. Добавьте базовые параметры настройки в postgresql.conf:

    [postgres@srv1 ~]$ vi $PGDATA/postgresql.conf
    # Pangolin conf
    listen_addresses = '*'
    port = 5433
    max_connections = 100
    superuser_reserved_connections = 3
    enabled_extra_auth_methods = 'peer'
    logging_collector = on
    log_directory = '/pgerrorlogs/06/'
    log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'
    psql.save_history = 'on'
  2. Проверьте добавленные параметры:

    [postgres@srv1 ~]$ sed -n '/^# Pangolin conf/,$p' $PGDATA/postgresql.conf
  3. Настройте аутентификацию в файле 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
  4. Проверьте настройки аутентификации:

    [postgres@srv1 ~]$ tail -14 $PGDATA/pg_hba.conf
    # "local" is for Unix domain socket connections only
    local 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
    ...

Проверка работоспособности СУБД​

  1. Запустите СУБД в тестовом режиме:

    [postgres@srv1 ~]$ pg_ctl -l test.log start
  2. Проверьте запущенные процессы:

    [postgres@srv1 ~]$ ps f -C postgres

    Ожидаемый результат: список процессов СУБД (postmaster и вспомогательные).

  3. Проверьте логи запуска:

    [postgres@srv1 ~]$ cat test.log

    Ожидаемый результат: отсутствие критических ошибок, информация о лицензии.

  4. Подключитесь к СУБД с использованием аутентификации peer:

    [postgres@srv1 ~]$ psql -h '/tmp'
  5. Создайте необходимые роли и базы данных:

    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;
  6. Проверьте созданные роли:

    postgres=# \du

    Ожидаемый результат: список ролей postgres, student и patroni.

  7. Протестируйте аутентификацию по паролю:

    postgres=# \c student student localhost 5433

    Ожидаемый результат: успешное подключение к базе данных student.

  8. Остановите СУБД после проверки:

    [postgres@srv1 ~]$ pg_ctl stop

Подведем итоги​

Вопрос 1

Вопрос 1: Какую переменную окружения используют для задания пути к каталогу с разделяемыми библиотеками?