Уровень 2.0
Программное обеспечение Pangolin может быть установлено двумя способами:
- вручную (распаковка дистрибутива и установка пакетов);
- автоматизированно (с помощью скриптов Ansible).
В этом разделе мы разберем ручную установку.
Далее в примерах команд будут использоваться следующие обозначения:
Обозначения
{major_version}– базовая версия продукта (например 6);{major.minor}– короткая версия продукта (например 6.6);{pangolin_version}– полная версия продукта (например 6.6.5);{component_version}– версия компонента;{OS}– операционная система (например,redos8).
Что нужно для ручной установки:
- подготовительные процедуры, создание каталогов и так далее;
- распаковка установочных пакетов;
- установка пакетов программного обеспечения с помощью менеджеров пакетов;
- самостоятельное создание кластера баз данных;
- ручной запуск экземпляра.
Системный пользователь postgres
Процессы СУБД должны работать от имени отдельного технического пользователя – так принято в целях безопасности. Каталог кластера баз данных не должен принадлежать суперпользователю операционной системы, его владельцем обычно назначают специально созданного для этого пользователя postgres. Экземпляр СУБД Pangolin будет запускаться от имени пользователя postgres и, соответственно, будет иметь полный доступ к каталогу с кластером баз данных.
postgres должен обладать домашним каталогом и работать в интерактивной оболочке (например, Bash). Непосредственный вход в сеанс запрещен.
Входить в систему напрямую от пользователя postgres не нужно. Все административные действия мы будем выполнять через sudo. Чтобы исключить интерактивный вход (по сети через SSH, через экран входа и так далее) пароль postgres обязательно блокируется.
Пользователя postgres можно создать вручную, но также он автоматически создается при установке пакетов dbms, чем мы в дальнейшем и воспользуемся.
Установочные пакеты
Дистрибутив Pangolin поставляется зарегистрированным пользователям в виде ZIP-архива. Установочный архив содержит несколько компонентов, каждый из которых упакован отдельно:
[student@ServerName ~]$ unzip -l ~/Distr/PSQ-{pangolin_version}-{OS}-distrib.zip
Archive: PSQ-{pangolin_version}-{OS}-distrib.zip
Length Date Time Name
--------- ---------- ----- ----
490 04-28-2024 16:50 PSQ-{pangolin_version}-{OS}-documentation-distrib.pom
243560569 04-28-2024 16:48 PSQ-{pangolin_version}-{OS}-documentation-distrib.zip
486 04-28-2024 16:50 PSQ-{pangolin_version}-{OS}-installer-distrib.pom
3667157 04-28-2024 16:48 PSQ-{pangolin_version}-{OS}-installer-distrib.zip
482 04-28-2024 16:49 PSQ-{pangolin_version}-{OS}-owned-distrib.pom
51369991 04-28-2024 16:48 PSQ-{pangolin_version}-{OS}-owned-distrib.zip
482 04-28-2024 16:50 PSQ-{pangolin_version}-{OS}-party-distrib.pom
549620708 04-28-2024 16:49 PSQ-{pangolin_version}-{OS}-party-distrib.zip
1209 04-28-2024 16:50 PSQ-{pangolin_version}-{OS}-unpacker-distrib.sh
-------------- -------
848221574 9 files
Программа unzip извлекает сжатые файлы из zip-архивов. С опцией -l эта команда выводит список файлов, находящихся в архиве, вместо их извлечения. Подробную справку смотрите через man unzip.
Как видно из вывода unzip -l, внутри находятся::
documentation– документация;installer– установочный пакет;owned– дополнительные утилиты;party– сторонние пакеты;unpacker-distrib.sh– shell-скрипт программы распаковки.
Процесс распаковки
Для получения установочных файлов необходимо:
- Распаковать внешний ZIP-архив.
- Запустить скрипт распаковки, который перепакует содержимое в единый TAR-архив.
- Распаковать TAR-архив для получения RPM-пакетов.
Распаковка внешнего архива выполняется утилитой unzip:
[student@ServerName ~]$ unzip ~/Distr/PSQ-{pangolin_version}-{OS}-distrib.zip
Archive: /home/student/Distr/PSQ-{pangolin_version}-{OS}-distrib.zip
inflating: PSQ-{pangolin_version}-{OS}-documentation-distrib.pom
inflating: PSQ-{pangolin_version}-{OS}-documentation-distrib.zip
inflating: PSQ-{pangolin_version}-{OS}-installer-distrib.pom
inflating: PSQ-{pangolin_version}-{OS}-installer-distrib.zip
inflating: PSQ-{pangolin_version}-{OS}-owned-distrib.pom
inflating: PSQ-{pangolin_version}-{OS}-owned-distrib.zip
inflating: PSQ-{pangolin_version}-{OS}-party-distrib.pom
inflating: PSQ-{pangolin_version}-{OS}-party-distrib.zip
inflating: PSQ-{pangolin_version}-{OS}-unpacker-distrib.sh
Скрипт распаковки можно запустить двумя способами:
- Передать его интерпретатору Bash.
- Сделать файл исполняемым и выполнить напрямую.
Рассмотрим первый способ. Запуск скрипта распаковки:
[student@ServerName ~]$ bash PSQ-{pangolin_version}-{OS}-unpacker-distrib.sh
start
~/Distr/distributive ~/Distr
successful completion: PSQ-{pangolin_version}-distrib.tar.gz ~/Distr
Второй способ (сделать файл исполняемым):
[student@ServerName ~]$ chmod a+x PSQ-{pangolin_version}-{OS}-unpacker-distrib.sh
Далее запустить его из текущего каталога:
./PSQ-{pangolin_version}-{OS}-unpacker-distrib.sh
В результате работы скрипта появляется файл PSQ-{version}-distrib.tar.gz — это сжатый TAR-архив, в котором находятся все RPM-пакеты, необходимые для установки Pangolin.
Создание TAR-архива можно избежать и сразу получить RPM-пакеты. Как это сделать – смотрите в документации.
Распаковка TAR-архива
Извлечение RPM-пакетов из TAR-архива выполняется стандартной командой tar:
[student@ServerName ~]$ tar xf PSQ-{pangolin_version}-distrib.tar.gz
[student@ServerName ~]$ ls -1 *.rpm
pangolin-backup-tools-1.2.0-{OS}.x86_64.rpm
pangolin-dbms-{major.minor}-{pangolin-version}-{OS}.x86_64.rpm
pangolin-dbms-{major.minor}-client-{pangolin-version}-{OS}.x86_64.rpm
pangolin-dbms-{major.minor}-libpq-{pangolin-version}-{OS}.x86_64.rpm
pangolin-dbms-{major.minor}-libpq-dev-{pangolin-version}-{OS}.x86_64.rpm
pangolin-manager-{component_version}-{OS}.x86_64.rpm
pangolin-pooler-{component_version}-{OS}.x86_64.rpm
К команде tar добавляются опции xf:
x— режим извлечения файлов из архива;f— после этой опции указывают имя файла архива (читайтеman tar).
После этого шага RPM-пакеты готовы к установке.
Установка программного обеспечения
RPM – это стандартный формат пакетов для дистрибутивов на основе Red Hat (RedOS, CentOS, RHEL). Перед установкой имеет смысл посмотреть, что именно содержит пакет, и только потом приступать к установке.
Проверка RPM-пакета
Чтобы увидеть описание пакета, не устанавливая его, используется команда rpm со следующими опциями:
[student@ServerName ~]$ rpm -qp pangolin-dbms-{major.minor}-{pangolin-version}-{OS}.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.
Разбор команды:
-q(query) — режим запроса;-p(package) — запрос к файлу пакета, а не к установленному ПО;--queryformat— позволяет обращаться к необходимым полям записей (в примере — к полюDescription) и форматировать выводимую информацию. Подробнее вman rpm.
Если нужно узнать, какие файлы будут установлены в систему, можно запросить список:
[student@ServerName ~]$ rpm -qlp pangolin-dbms-{major.minor}-{pangolin-version}-{OS}.x86_64.rpm | fgrep bin/postgres
/usr/pangolin-{pangolin-version}/bin/postgres
Разбор команды:
-q(query) — режим запроса;l(list) – вывод списка файлов, которые будут установлены;p(package) – запрос к файлу пакета;|– конвейер, передает вывод командыrpmна вход командеfgrep;fgrep– вариантgrep, который ищет фиксированную строку, не интерпретируя специальные символы как регулярные выражения. В пакете RPM много файлов, нам понадобятся только исполняемые файлы, которые будут установлены из пакета. Поэтому здесь ищется строкаbin/postgresв списке файлов. Подробнее о команде написано вman grep.
В примере видно, что из RPM-пакета будет извлечен файл /usr/pangolin-{pangolin-version}/bin/postgres.
Установка RPM-пакета
В Red Hat-совместимых системах для установки пакетов удобнее всего использовать менеджер пакетов dnf – он автоматически учитывает зависимости пакетов и разрешает их (подробнее в man dnf):
[student@ServerName ~]$ sudo dnf -y install pangolin-dbms-{major.minor}-{pangolin-version}-{OS}.x86_64.rpm
Разбор опций:
install– команда для установки пакета;-y(yes) – автоматическое подтверждение всех вопросов.
Если система не использует dnf (например, AltLinux), установка выполняется с помощью соответствующего менеджера пакетов для этой ОС. В качестве альтернативы можно воспользоваться командой rpm, но в этом случае все зависимости придется разрешать вручную. Этот способ будет подробнее рассмотрен в лабораторной работе.
После установки можно проверить, что пакеты действительно добавлены в систему уже знакомой командой:
[student@ServerName ~]$ rpm -qa pangolin\*
pangolin-dbms-{major.minor}-{pangolin-version}-{OS}.x86_64
Разбор команды:
-q(query) — режим запроса;a(all) – запрос ко всем установленным пакетам;- шаблон
pangolin\*ограничивает вывод только теми пакетами, имена которых начинаются сpangolin.*экранируется обратным слешем (\), чтобы ее не интерпретировала оболочка.
Настройка динамических библиотек
Исполняемые файлы используют динамические библиотеки (.so, shared object) – наборы готового кода, которые подключаются к программе во время ее запуска или же в процессе работы с помощью системного вызова dlopen().
Пути к динамическим библиотекам указывают в /etc/ld.so.conf или файлах, подключаемых директивой include:
[student@ServerName ~]$ cat /etc/ld.so.conf.d/pangolin.conf
/usr/pangolin/lib
/usr/pangolin-dbms-client/lib
Где cat выводит содержимое файла на экран.
После добавления или изменения таких файлов необходимо обновить кеш библиотек командой ldconfig:
[student@ServerName ~]$ sudo ldconfig
sudo требуется, потому что обновление системного кеша требует прав суперпользователя.
Что за кеш?
В Linux используются динамические библиотеки (.so), которые находятся в стандартных местах (/lib, /usr/lib) или в собственных каталогах программ. Система создает кеш этих библиотек в файле /etc/ld.so.cache, чтобы быстро находить их при запуске программ. Пути поиска библиотек задаются в файлах /etc/ld.so.conf и его дополнениях в каталоге /etc/ld.so.conf.d/. Когда они меняются или появляются новые библиотеки, надо обновить кеш. Утилита ldconfig читает эти файлы, собирает актуальный список библиотек и обновляет кеш.
Альтернативный способ указать пути к библиотекам – переменная окружения LD_LIBRARY_PATH, описанная по команде man 8 ld.so. Подробнее о переменных окружения читайте в официальной документации.
Создание каталогов
Перед инициализацией кластера необходимо подготовить каталоги, в которых будут храниться данные СУБД, журналы работы и файл лицензии. Эти каталоги должны принадлежать пользователю postgres.
В именах каталогов старайтесь отражать версию устанавливаемой СУБД Pangolin.
[student@ServerName ~]$ sudo mkdir -p /pgdata/0{major_version}/data /pgerrorlogs/0{major_version} /opt/pangolin_license
[student@ServerName ~]$ sudo chown -R postgres:postgres /pgdata /pgerrorlogs /opt/pangolin_license
Разбор команд:
mkdir -p– создание каталогов. Опция-p(parents) создает все промежуточные каталоги, если они отсутствуют, и не выдает ошибку, если каталог уже существует;chown -R– изменение владельца. Опция-R(recursive) применяет изменения ко всем вложенным файлам и каталогам;postgres:postgres– пользователь и группа, которым передаются права.
Назначение каталогов:
/pgdata/0{major_version}/data– каталог данных кластера (PGDATA);/pgerrorlogs/0{major_version}– каталог для журналов отчета;/opt/pangolin_license– каталог для файла лицензии.
Профиль .bash_profile
Для удобства работы в интерактивном сеансе пользователя postgres в его профиль в домашнем каталоге (~/.bash_profile) добавляются переменные окружения. Они автоматически устанавливаются при входе в сеанс пользователя postgres.
Вот минимально необходимый набор переменных:
[student@ServerName ~]$ sudo vi ~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/0{major_version}/data
export PG_LICENSE_PATH=/opt/pangolin_license/
export MANPATH=$MANPATH:$PGHOME/share/man
export PATH=$PATH:/usr/pangolin/bin
Создание кластера баз данных
Кластером базы данных называется предварительно созданная область на диске, специально выделенная для хранения и организации данных СУБД. Инициализация кластера выполняется командой initdb.
Перед созданием кластера нужно переключиться на пользователя postgres:
[student@ServerName ~]$ sudo su - postgres
Создание кластера:
[postgres@ServerName ~]$ initdb -k
Каталог данных в примере не указан, так как установлена переменная окружения PGDATA. Если бы ее не было, необходимо было бы использовать опцию -D команды initdb.
Опция -k нужна для включения контрольных сумм на страницах.
Проверить, что кластер создался можно, просмотрев $PGDATA (доллар перед именем переменной извлекает значение из нее):
[postgres@ServerName ~]$ ls $PGDATA
base pg_hba.conf pg_pp_cache pg_stat_tmp pg_xact PRODUCT_VERSION
current_logfiles pg_ident.conf pg_prep_stats pg_store_plans postgresql.auto.conf tracing
global pg_integrity pg_quota.conf pg_subtrans postgresql.base.conf
pg_auth pg_logical pg_replslot pg_tblspc postgresql.conf
pg_commit_ts pg_multixact pg_serial pg_twophase postgresql.conf.backup
pg_dynshmem pg_notify pg_snapshots PG_VERSION postmaster.opts
pg_hba.base.conf pg_perf_insights pg_stat pg_wal postmaster.pid
Из примера видно, что каталог данных наполнился служебными подкаталогами и файлами, например:
postgresql.conf– основной конфигурационный файл;pg_hba.conf– файл аутентификации клиентов;base– каталог с базами данных.
Запуск сервера
После инициализации кластера можно запустить сервер. Для управления процессом используется команда pg_ctl:
[postgres@ServerName ~]$ pg_ctl -l /pgerrorlogs/0{major_version}/pangolin.log start
Разбор опций:
-l(log) – путь к файлу, куда будут записываться сообщения сервера;start– команда запуска.
А как остановить?
Чтобы остановить сервер, у pg_ctl есть команда stop. Другие доступные команды и опции pg_ctl можно посмотреть в официальной документации.
Основной инструмент для взаимодействия с сервером Pangolin – клиентская программа psql. С ее помощью можно выполнять SQL-запросы, управлять объектами базы данных и проверять состояние сервера.
Проверим, что сервер действительно работает и отвечает на запросы:
[postgres@ServerName ~]$ psql -qtc 'SELECT product_version()'
Platform V Pangolin {pangolin-version}
Разбор опций psql:
-q(quiet)– подавить лишние сообщения (приветствие, количество строк);-t(tuples-only)– выводить только результат запроса, без заголовка;-c(command)– выполнить один запрос SQL и завершить работу.
Подведем итоги
Вопрос 1
Установите соответствие:
Вопрос 2
В какой переменной окружения хранится директория каталога кластера баз данных?
Вопрос 3
Дана команда:
postgres$ initdb -k -D /pgdata/06/data
К выполнению каких действий приведет вызов этой команды? Выберите все верные варианты ответа:
Вопрос 4
Какой пользователь может быть владельцем каталога с кластером баз данных, если запуск сервера Pangolin для указанного кластера баз данных выполняется от имени пользователя postgres?