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

Глава 02. Установка

В этой главе:

  • Варианты установки.
  • Подготовительные процедуры.
  • Установка программного обеспечения.
  • Создание кластера баз данных.
  • Запуск сервера.
  • Проверка работоспособности.

Варианты установки

Ручная установка:

  • требуются подготовительные процедуры, создание каталогов и т.п.;
  • самостоятельная регистрация учетной записи postgres;
  • распаковка установочных пакетов;
  • установка пакетов программного обеспечения с помощью менеджеров пакетов;
  • самостоятельное создание кластера баз данных;
  • ручной запуск экземпляра.

Автоматизированная установка с помощью Ansible:

  • standalone - без установки etcd и создания кластера Patroni на одном хосте;
  • кластер Patroni.

В этом курсе рассматривается ручная установка Pangolin.

Программное обеспечение Pangolin может быть установлено двумя основными путями:

  • ручным способом, предусматривающим распаковку из zip-архива с последующей установкой из пакетов RPM или DEB в зависимости от операционной платформы;
  • автоматизированным способом с помощью скриптов Ansible.

Регистрация учетной записи postgres

До установки должна быть зарегистрирована учетная запись пользователя ОС postgres в качестве системного.

Пользователь postgres должен обладать домашним каталогом. Оболочка интерактивная, например, Bash. Непосредственный вход в сеанс запрещен.

$ sudo useradd -m -r -d /var/lib/postgres \
-s /bin/bash postgres
$ id postgres
uid=978(postgres) gid=977(postgres) группы=977(postgres)

Приведенная на слайде команда useradd регистрирует учетную запись пользователя в операционной системе. Опции команды useradd:

  • -m - создать домашний каталог для пользователя;
  • -r - пользователь системный;
  • -d - каталог файловой системы, назначенный домашним для этого пользователя;
  • -s - назначить оболочку.

В примере оболочка для зарегистрированного пользователя postgres - /bin/bash, так как ему потребуется возможность использования интерактивных сеансов Bash. См. man useradd.

Блокировка пароля для postgres

Сеанс postgres запускается только с помощью sudo. Должен быть пользователь с допуском к sudo. Для запрета непосредственного входа в сеанс пароль postgres обязательно блокируется.

$ grep postgres /etc/passwd postgres:x:978:977::/var/lib/postgres:/bin/bash
$ sudo passwd -S postgres
postgres LK 2024-08-22 -1 -1 -1 -1 (Пароль заблокирован.)

Фильтр grep пропускает только те строки входного потока, которые удовлетворяют регулярному выражению. См. man grep.

Регулярные выражения - шаблоны для поиска строк. См. man 7 regex.

В примере выше посредством grep проверяется, что учетная запись для postgres зарегистрирована в файле учетных записей /etc/passwd. См. man 5 passwd.

Команда passwd -S postgres выводит состояние учетной записи. В ее выводе видно, что пароль у postgres заблокирован. См. man passwd.

Это делается для исключения интерактивного входа в сеанс по приглашению операционной системы (в текстовом режиме - приглашение сервера терминала getty, в графике - дисплей менеджера, например, gdm, или же с помощью сетевого входа, например, ssh). Запустить сеанс postgres можно будет с помощью утилиты sudo. См. man 8 sudo.

Распаковка установочных пакетов

Архив с файлом контрольных сумм:

$ unzip -l ~/Dist/PSQ-06.002.00-69-redos7.3.2-gst-distrib.zip Archive: PSQ-06.002.00-69-redos7.3.2-gst-distrib.zip
Length Date Time Name
--------- ---------- ----- ----
64 04-28-2024 16:53 PSQ-06.002.00-69-redos7.3.2-distrib.zip.gst
1495 04-28-2024 16:53 PSQ-06.002.00-69-redos7.3.2-distrib.zip.gst.p7s
--------- -------
1559 2 files

Зарегистрированные пользователи могут получить архив с установочным пакетом.

Архив в формате zip с дистрибутивами и контрольными суммами.

Программа unzip извлекает сжатые файлы из zip-архивов. С опцией -l этак команда выводит список файлов, находящихся в архиве вместо их извлечения. В примере исследовано содержимое архива с файлом контрольных сумм. См. man unzip.

Архив с установочным пакетом:

$ unzip -l ~/Dist/PSQ-06.002.00-69-redos7.3.2-distrib.zip 
Archive: PSQ-06.002.00-69-redos7.3.2-distrib.zip
Length Date Time Name
--------- ---------- ----- ----
490 04-28-2024 16:50 PSQ-06.002.00-69-redos7.3.2-documentation-distrib.pom
243560569 04-28-2024 16:48 PSQ-06.002.00-69-redos7.3.2-documentation-distrib.zip
486 04-28-2024 16:50 PSQ-06.002.00-69-redos7.3.2-installer-distrib.pom
3667157 04-28-2024 16:48 PSQ-06.002.00-69-redos7.3.2-installer-distrib.zip
482 04-28-2024 16:49 PSQ-06.002.00-69-redos7.3.2-owned-distrib.pom
51369991 04-28-2024 16:48 PSQ-06.002.00-69-redos7.3.2-owned-distrib.zip
482 04-28-2024 16:50 PSQ-06.002.00-69-redos7.3.2-party-distrib.pom
549620708 04-28-2024 16:49 PSQ-06.002.00-69-redos7.3.2-party-distrib.zip
1209 04-28-2024 16:50 PSQ-06.002.00-69-redos7.3.2-unpacker-distrib.sh
-------------- -------
848221574 9 files

Зарегистрированные пользователи могут получить архив с установочным пакетом.

Архив в формате zip с дистрибутивами и контрольными суммами.

Объединяет в себе несколько zip пакетов с различным программным обеспечением.

После распаковки доступен скрипт распаковки.

Программа unzip извлекает сжатые файлы из zip-архивов. С опцией -l этак команда выводит список файлов, находящихся в архиве вместо их извлечения. См. man unzip.

На этом слайде выводится содержимое архива zip с установочного дистрибутива. Заметно, что в один zip архив помещены несколько zip архивов:

  • документация;
  • установочный пакет;
  • дополнительные утилиты;
  • сторонние пакеты;
  • Shell скрипт программы распаковки.

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

$ unzip ~/Dist/PSQ-06.002.00-69-redos7.3.2-distrib.zip
Archive: /home/student/Dist/PSQ-06.002.00-69-redos7.3.2-distrib.zip inflating: PSQ-06.002.00-69-redos7.3.2-documentation-distrib.pom inflating: PSQ-06.002.00-69-redos7.3.2-documentation-distrib.zip inflating: PSQ-06.002.00-69-redos7.3.2-installer-distrib.pom inflating: PSQ-06.002.00-69-redos7.3.2-installer-distrib.zip inflating: PSQ-06.002.00-69-redos7.3.2-owned-distrib.pom
inflating: PSQ-06.002.00-69-redos7.3.2-owned-distrib.zip
inflating: PSQ-06.002.00-69-redos7.3.2-party-distrib.pom
inflating: PSQ-06.002.00-69-redos7.3.2-party-distrib.zip
inflating: PSQ-06.002.00-69-redos7.3.2-unpacker-distrib.sh

В примере посредством утилиты unzip была выполнена распаковка из монолитного zip-архива его содержимого. В частности, был распакован установочный скрипт.

Скрипт распаковки:

$ bash PSQ-06.002.00-69-redos7.3.2-unpacker-distrib.sh 
start
~/Distrib/distributive ~/Distrib
successful completion: PSQ-06.002.00-distrib.tar.gz ~/Distrib

В процессе распаковки zip архивов используется временный каталог distributive.

Распакованное во временный каталог программное обеспечение упаковывается в tar.gz сжатый архив.

В переупакованном tar архиве находятся RPM пакеты.

Для запуска скрипта распаковки PSQ-06.002.00-69-redos7.3.2-unpacker- distrib.sh необходимо указать его имя в качестве аргумента исполняемому файлу оболочки bash, как это сделано в примере на слайде.

Другой вариант - сделать файл скрипта исполняемым с помощью команды:

chmod a+ PSQ-06.002.00-69-redos7.3.2-unpacker-distrib.sh

Далее запустить его из текущего каталога:

./PSQ-06.002.00-69-redos7.3.2-unpacker-distrib.sh

Скрипт распаковки создает ряд подкаталогов и извлекает из zip-архива другой архив - в формате tar, сжатый компрессором gzip - PSQ-06.002.00-distrib.tar.gz.

Распаковка tar архива:

$ tar xf PSQ-06.002.00-distrib.tar.gz
$ ls -1 *.rpm pangolin-backup-tools-1.2.0-redos7.3.2.x86_64.rpm
pangolin-dbms-6.2-6.2.0-redos7.3.2.x86_64.rpm
pangolin-dbms-6.2-client-6.2.0-redos7.3.2.x86_64.rpm
pangolin-dbms-6.2-libpq-6.2.0-redos7.3.2.x86_64.rpm
pangolin-dbms-6.2-libpq-dev-6.2.0-redos7.3.2.x86_64.rpm
pangolin-manager-2.1.0-redos7.3.2.x86_64.rpm
pangolin-pooler-1.3.0-redos7.3.2.x86_64.rpm

После распаковки tar архива в текущем каталоге появляются RPM пакеты.

Для извлечения содержимого из tar-архива, сжатого gzip, выполняется команда tar xf :

  • x - режим извлечения файлов из архива tar (extract);
  • f - после этой опции указывают имя файла архива. См. man tar

Как видно из примера на слайде, в tar-архиве находятся установочные пакеты ПО Pangolin. В данном случае - это RPM файлы, подходящие для дистрибутивов GNU/Linux на базе Red Hat.

Установка программного обеспечения

Проверка описания RPM пакета:

$ rpm -qp pangolin-dbms-6.2-6.2.0-redos7.3.2.x86_64.rpm \
--queryformat '%{Description}\n'
Platform V Pangolin is an advanced Object-Relational
database management system (DBMS).

The pangolin-dbms package contains the programs needed to
create and run a Pangolin server, which will in turn allow
you to create and maintain Pangolin databases.
  • Информацию о RPM пакете выдает rpm -qip имя_пакета.rp.
  • Информацию о пакете проверяют перед его установкой.
  • В примере получено только поле Description с описанием пакета.

Перед установкой пакета RPM разумно проверить его содержимое. В примере показано, как получить описание пакета ПО, содержащееся в RPM файле. Для этого можно использовать программу rpm (RedHat Package Manager) со следующими опциями:

  • -q - режим запроса (query);
  • -p - запрос не к базе данных RPM, а к еще не установленному пакету, имя которого задано аргументом командной строки;
  • --queryformat - позволяет обращаться к необходимым полям записей (в примере - к полю Description) и форматировать выводимую информацию. См. man rpm.

Проверка содержимого RPM пакета

$ rpm -qlp pangolin-dbms-6.2-6.2.0-redos7.3.2.x86_64.rpm \ | fgrep bin/postgres
/usr/pangolin-6.2.0/bin/postgres

Содержимое RPM пакета выдает rpm -qlp имя_пакета.rpm. В примере проверено наличие файла с исполняемым кодом сервера СУБД среди упакованных в RPM пакет файлов.

Для проверки содержимого RPM пакета также используется режим запроса, заданный опцией -q, но в режиме запроса задан здесь подрежим запроса на получение списка файлов, устанавливаемых из пакета: -ql (list).

В пакете RPM много файлов, нас интересуют только исполняемые файлы, которые будут установлены из пакета. Получить их список можно фильтрацией вывода команды rpm - ql с помощью fgrep (вариант grep, не интерпретирующий регулярные выражения). См. man grep.

В примере видно, что из RPM пакета будет извлечен файл /usr/pangolin-6.2.0/bin/postgres.

Установка RPM пакета

$ sudo dnf -y install \ 
pangolin-dbms-6.2-6.2.0-redos7.3.2.x86_64.rpm
$ rpm -qa pangolin\*
pangolin-dbms-6.2-6.2.0-redos7.3.2.x86_64
pangolin-dbms-6.2-client-6.2.0-redos7.3.2.x86_64
  • Установить RPM пакет можно командой dnf install.
  • Зависимости пакета устанавливаются автоматически.
  • Команда rpm -qa <шаблон> выводит список имен установленных пакетов, удовлетворяющих шаблону.

Установить пакет RPM проще всего командой dnf install, опция -y для ответа "да" на все вопросы. Команда dnf автоматически учитывает зависимости пакетов и разрешает их. См. man dnf.

После установки в примере проверено командой rpm -qa, действительно ли был установлен пакет. Опция -qa - запрос ко всем установленным пакетам, после которой указан GLOBBING шаблон (аналогичный шаблон Bash использует для имен файлов), позволяющий вывести только те пакеты, имена которых начинаются со строки pangolin. В выводе видно, что установлены два таких пакета. См. man rpm.

Настройка динамических библиотек

$ cat /etc/ld.so.conf.d/pangolin.conf 
/usr/pangolin/lib
/usr/pangolin-dbms-client/lib
$ sudo ldconfig

Пути к динамическим библиотекам указывают в /etc/ld.so.conf или файлах, подключаемых директивой include.

База данных динамических библиотек - /etc/ld.so.cache обновляется командой ldconfig.

Альтернативный путь настройки путей поиска библиотек - переменная окружения LD_LIBRARY_PATH.

Динамические библиотеки в GNU/Linux представляют собой so файлы (shared object). Они содержат в себе машинный код, который можно динамически подключать к исполняемым процессам либо при их запуске, либо уже во время исполнения с помощью системного вызова dlopen(). Получить список so динамических библиотек, которые загружаются при запуске исполняемого файла можно, используя команду ldd - она выводит соответствующую таблицу из заголовка ELF файла. См. man ldd.

В ОС имеется специальный проиндексированный список разделяемых библиотек - файл /etc/ld.so.cache. Он необходим для загрузки динамических библиотек. Переиндексировать этот файл бывает необходимо, если в конфигурационный файл, настраивающий пути поиска разделяемых библиотек /etc/ld.so.conf вносились изменений. Либо тогда, когда в системе устанавливаются новые библиотеки. Переиндексацию выполняет команда ldconfig. См. man ldconfig.

Иной способ указания места расположения разделяемых библиотек - переменная окружения LD_LIBRARY_PATH. См. man 8 ld.so.

Создание каталогов

$ sudo mkdir -p /pgdata/06/data /pgerrorlogs/06 \ /opt/pangolin_license
$ sudo chown -R postgres:postgres /pgdata/06 \ /pgerrorlogs/06 /opt/pangolin_license
  • Каталог кластера данных (PGDATA) - /pgdata/06/data.
  • Каталог для журналов отчета - /pgerrorlogs/06.
  • Файл лицензии должен находиться в /opt/pangolin_license.

В примере на слайде создан каталог данных кластера, в котором будут созданы необходимые структуры в виде каталогов и файлов. Также создан каталог для хранения лицензии Pangolin.

Эти каталоги должны принадлежать пользователю postgres, группа postgres.

Профиль .bash_profile

$ sudo -u postgres sed -n '/^# User/,$p' ~postgres/.bash_profile 
# User specific environment and startup programs
umask 022
export PG_PLUGINS_PATH=/usr/pangolin/lib/plugins
export PGHOME=/usr/pangolin
export PGCLIENTENCODING=UTF8
export CLNAME=clustername
export PGDATA=/pgdata/06/data
export PG_LICENSE_PATH=/opt/pangolin_license/
export MANPATH=$MANPATH:$PGHOME/share/man
export PATH=$PATH:/usr/pangolin/bin

В профиле пользователя .bash_profile должны быть показанные на слайде переменные окружения.

Файл .bash_profile должен находиться в домашнем каталоге пользователя. При интерактивном входе в сеанс он запускается единожды после скрипта /etc/profile. Задача этих файлов - выполнить необходимые при входе пользователя в сеанс действия. Например, установить необходимые переменные окружения.

В примере на слайде распечатано содержимое файла ~postgres/.bash_profile, начиная с закомментированной строки # User. Видно переменные окружения, которые должны находиться в этом файле. При интерактивном входе в сеанс пользователя postgres с помощью команды sudo -i -u postgres этот файл скрипта сработает и установит эти переменные автоматически.

Создание кластера баз данных и запуск сервера

Создание кластера баз данных

$ sudo -iu postgres 
postgres$ initdb -k
postgres$ ls $PGDATA
base global pg_commit_ts pg_dynshmem pg_hba.conf pg_ident.conf pg_integrity pg_logical pg_multixact pg_notify pg_perf_insights pg_pp_cache pg_prep_stats pg_quota.conf pg_replslot pg_serial pg_snapshots pg_stat pg_stat_tmp pg_subtrans pg_tblspc pg_twophase PG_VERSION pg_wal pg_xact postgresql.auto.conf postgresql.conf postmaster.opts postmaster.pid PRODUCT_VERSION tracing

Команда initdb создает в каталоге данных необходимые файлы и каталоги.

Опция -k команды initdb включает контрольные суммы.

Инициализация в сеансе postgres.

Создать кластер баз данных проще всего, войдя в интерактивный сеанс postgres. Кластер создается командой initdb. Каталог данных в примере не указан, так как установлена переменная окружения PGDATA. Если бы ее не было, необходимо было бы использовать опцию -D команды initdb.

Опция -k нужна для включения контрольных сумм на страницах. https://www.postgresql.org/docs/15/app-initdb.html.

Запуск СУБД

postgres$ pg_ctl -l /pgerrorlogs/06/pangolin.log start
postgres$ psql -qtc 'select product_version()' Platform V Pangolin 6.2.0
  • Команда pg_ctl управляет сервером СУБД.
  • Запуск - start, останов - stop.
  • Опция -l указывает местоположение журнала отчета.
  • Запуск и останов от имени пользователя postgres.
  • Команда psql -c 'запрос' для проверки работоспособности.

Входящая в комплект PostgreSQL команда pg_ctl предназначена для управления кластером. Она может:

  • запускать экземпляр;
  • останавливать его;
  • рестартовать;
  • заставлять перечитывать конфигурационные файлы;
  • выводить статус;
  • и др.

В примере запущен экземпляр PostgreSQL, причем журнал отчета определен опцией -l. Далее выполнена команда, выводящая версию ПО Pangolin. https://www.postgresql.org/docs/15/app-pg-ctl.html.

Итоги главы

  • В главе обсуждена распаковка установочных пакетов и подготовка RPM пакетов к установке.
  • Рассмотрен процесс подключения динамических библиотек.
  • Показаны создание и настройка учетных записей пользователей СУБД, а также их особенности.
  • Продемонстрирована настройка профилей пользователей.
  • Рассмотрено создание кластера баз данных.
  • Продемонстрирован ручной запуск экземпляра СУБД.