Базовый инструментарий
Установка и управление сервером
16
Авторские права
© Postgres Professional, 2017–2024
Авторы: Егор Рогов, Павел Лузанов, Илья Баштанов, Алексей Береснев
Фото: Олег Бартунов (монастырь Пху и пик Бхрикути, Непал)
Использование материалов курса
Некоммерческое использование материалов курса (презентации,
демонстрации) разрешается без ограничений. Коммерческое
использование возможно только с письменного разрешения компании
Postgres Professional. Запрещается внесение изменений в материалы
курса.
Обратная связь
Отзывы, замечания и предложения направляйте по адресу:
Отказ от ответственности
Компания Postgres Professional не несет никакой ответственности за
любые повреждения и убытки, включая потерю дохода, нанесенные
прямым или непрямым, специальным или случайным использованием
материалов курса. Компания Postgres Professional не предоставляет
каких-либо гарантий на материалы курса. Материалы курса
предоставляются на основе принципа «как есть» и компания Postgres
Professional не обязана предоставлять сопровождение, поддержку,
обновления, расширения и изменения.
2
Темы занятия
Основные понятия
Установка из исходных кодов
Управление сервером
Пакетная установка
Управление сервером в Ubuntu
Облачные решения
3
Кластер БД и сервер
PostgreSQL
база
данных
кластер
баз
данных
Прежде чем говорить об установке, рассмотрим некоторые основные
понятия.
PostgreSQL — программа, которая относится к классу систем
управления базами данных.
Когда эта программа выполняется, мы называем ее сервером
PostgreSQL или экземпляром сервера. Пока сервер представляется для
нас «черным ящиком», но постепенно мы познакомимся с тем, как он
устроен.
Данные, которыми управляет PostgreSQL, хранятся в базах данных.
Один экземпляр PostgreSQL одновременно работает с несколькими
базами данных. Этот набор баз данных называется кластером баз
данных. Подробнее мы будем говорить о базах данных в теме
«Организация данных. Базы данных и схемы».
Итак: кластер баз данных — это данные в файлах; сервер или
экземпляр сервера — программа, управляющая кластером баз данных.
4
Исходные коды
Установка из исходных кодов
стабильная версия сервера
можно использовать нестандартные параметры
или собрать на специфичной архитектуре
Установка из репозитория git
текущая версия сервера
необходимо в первую очередь для разработчиков ядра;
требует более широкого набора инструментов
Полезно иметь представление о том, как происходит установка из
исходных кодов, чтобы в случае необходимости можно было собрать
PostgreSQL с нестандартными параметрами или на специфичной
архитектуре.
По адресу https://www.postgresql.org/ftp/source доступен исходный код
в двух вариантах: gzip и bzip2. В виртуальной машине необходимый
файл уже находится в домашнем каталоге пользователя student.
Исходные коды можно взять и непосредственно из git-репозитория
проекта: git://git.postgresql.org/git/postgresql.git (проект имеет зеркала,
в том числе на github).
В этом случае можно собрать не только стабильную версию,
но и версию на любой конкретный коммит, в том числе наиболее
актуальную.
При установке из репозитория git требуется более широкий набор
инструментов. Например, лексический и синтаксический анализатор
сделан с помощью Flex и Bison, и в git хранятся именно исходные коды
для этих инструментов. При сборке из них генерируются файлы на Си,
которые затем компилируются. При этом в архиве с исходными кодами
находятся уже сгенерированные файлы Си.
5
Необходимое ПО
Обязательно
tar, gzip/bzip2, GNU make, компилятор Си (C89)
Используются, но можно отключить
библиотеки GNU Readline, zlib, lz4, zstd
Дополнительно
языки программирования Perl, Python, Tcl
для использования PL/Perl, PL/Python, PL/Tcl
Kerberos, OpenSSL, OpenLDAP, PAM
для аутентификации и шифрования
библиотека ICU для кроссплатформенной поддержки UNICODE
Отдельные инструменты при сборке из репозитория git
Сборка и установка традиционно основывается на GNU Make
и Autoconf:
В этом курсе рассматривается традиционный способ сборки.
Начиная с версии 16 можно также использовать систему сборки
программного обеспечения Meson:
Для сборки требуется ряд программ и утилит.
Библиотека readline дает возможность редактировать командную
строку, пользоваться историей команд и автодополнением. В серверной
инсталляции может быть и не нужна, если не предполагается запускать
psql в консоли.
Библиотеки zlib, lz4 и zstd используются для сжатия.
7
Создание кластера
Утилита
initdb
Особенности
новый кластер баз данных не может принадлежать
суперпользователю ОС
PGDATA — удобная переменная для каталога кластера
файлы конфигурации создаются в каталоге PGDATA
желательно включить расчет контрольных сумм
для страниц с данными
После установки сервера необходимо создать кластер баз данных. Для
этого предназначена утилита initdb.
В целях безопасности каталог, в котором инициализируется кластер, не
может принадлежать суперпользователю ОС. Владельцем кластера
обычно делают пользователя postgres.
Владелец кластера может определить переменную окружения PGDATA,
указывающую на каталог кластера. Эту переменную используют
некоторые утилиты сервера, когда им нужно узнать расположение
кластера. К таким утилитам относится initdb, а также основная утилита
управления сервером pg_ctl, о которой мы будем говорить дальше.
В процессе инициализации кластера утилита initdb создает
конфигурационные файлы в этом же каталоге PGDATA. Подробнее
о файлах конфигурации мы расскажем в одной из следующих тем.
Утилита initdb имеет множество ключей, влияющих на ее работу. Один
из важных — -k, или --data-checksums — включает подсчет
контрольных сумм на страницах данных. Проверка контрольной суммы
будет выполняться при обращении к любой странице данных в
кластере. Это несколько снижает производительность, но позволяет
оперативно обнаружить повреждения в данных.
9
Управление сервером
Утилита
pg_ctl
Основные задачи
запуск, останов и получение статуса сервера
обновление параметров конфигурации
переключение на реплику
К основным операциям управления сервером относятся запуск и
останов сервера, получение текущего статуса сервера, обновление
конфигурации и некоторые другие.
Для выполнения этих действий предназначена утилита pg_ctl, идущая
в составе PostgreSQL.
Запускать pg_ctl следует от имени владельца кластера баз данных.
Более подробная информация об управлении сервером для
администраторов баз данных:
11
Установка пакета
Готовые пакеты — предпочтительный способ
Linux ( , Debian, Red Hat, SUSE и другие)
входит в дистрибутив ОС
репозиторий (yum, apt) или пакеты RPM, DEB
FreeBSD, OpenBSD
пакеты из Ports and Packages Collection
Mac OS X
Windows
Предпочтительным вариантом является использование готовых
пакетов, так как в этом случае получается понятная, поддерживаемая
и легко обновляемая установка.
Пакеты существуют для большинства широко распространенных
систем. В каждой из них могут быть свои особенности, с которыми
стоит ознакомиться перед установкой.
В пакетные репозитории некоторых систем уже входит PostgreSQL,
но, обычно, не самой последней версии. Актуальная версия может быть
взята из репозитория PostgreSQL Global Development Group (PGDG):
Мы рассмотрим особенности пакета PostgreSQL для Ubuntu.
12
Создание кластера
Утилита
Особенности
инициализация выполняется при установке пакета
и создает кластер «main»
подсчет контрольных сумм по умолчанию не включен
расположение файлов конфигурации и журнала сервера
автоматический запуск сервера при старте ОС
pg_createcluster
initdb
Для инициализации кластера в Ubuntu создана обертка pg_createcluster
над утилитой initdb.
Справку по использованию pg_createcluster можно получить командой:
$ man pg_createcluster
Утилита pg_createcluster автоматически запускается при установке
пакета и создает кластер баз данных с именем «main».
Стоит обратить внимание, что инициализация кластера проходит
с отключенным подсчетом контрольных сумм в страницах данных.
Исполняемые файлы, файлы конфигурации и журнал сервера
размещены в соответствии с правилами, принятыми в Ubuntu.
Кроме того, настраивается автоматический запуск и останов сервера
PostgreSQL при запуске и останове операционной системы.
Для удаления кластера используется утилита pg_dropcluster.
Утилиты pg_createcluster и pg_dropcluster специфичны для Ubuntu.
В других системах нужно явно инициализировать кластер
с помощью initdb и задействовать подходящие средства операционной
системы.
14
Управление сервером
Утилита
Основные задачи
запуск, останов и получение статуса сервера
перечитывание параметров конфигурации
переключение на реплику
pg_ctlcluster
pg_ctl
В пакетном дистрибутиве для Ubuntu доступ к утилите pg_ctl
осуществляется не напрямую, а через специальную обертку
pg_ctlcluster. Справку по использованию pg_ctlcluster можно получить
командой:
$ man pg_ctlcluster
В других системах утилита pg_ctl может использоваться
непосредственно.
16
Облачные решения
PostgreSQL в виртуальной среде
накладные расходы на виртуализацию
администратор имеет полный доступ к экземпляру
PostgreSQL as a Service
предлагается многими облачными провайдерами
основное администрирование берет на себя провайдер
доступ только к ограниченным инструментам для управления,
резервного копирования, мониторинга
Средства виртуализации могут использоваться и для баз данных, в том
числе PostgreSQL. Надо понимать, что за удобства этой технологии
приходится расплачиваться накладными расходами. Для
высоконагруженных систем любые дополнительные промежуточные
слои между СУБД и железом нежелательны.
Кроме того, многие ведущие зарубежные и российские облачные
провайдеры предлагают использовать PostgreSQL как сервис (Database
as a Service, managed database).
В этом случае провайдер берет на себя большинство задач
администрирования. Полного доступа к экземпляру в этом случае нет,
а возможности управления ограничиваются предоставленными
инструментами для таких задач, как мониторинг производительности
или резервное копирование и восстановление.
В рамках курса мы не будем рассматривать особенности отдельных
облачных решений. Для этого стоит изучить документацию,
предоставляемую провайдерами услуг.
17
Итоги
Два варианта установки — пакеты или исходный код
Доступны облачные решения
Сервер выполняется под выделенным пользователем ОС
Перед использованием сервера необходимо
инициализировать кластер баз данных
Специальные команды для управления сервером
18
Практика
Включение расчета контрольных сумм в кластере.
1. Остановите сервер.
2. Проверьте, рассчитываются ли контрольные суммы
в кластере.
3. Включите расчет контрольных сумм.
4. Запустите сервер.
2, 3. Используйте утилиту pg_checksums. Для ее запуска укажите
полный путь: /usr/lib/postgresql/16/bin/pg_checksums
19
Практика+
1. Установите PostgreSQL из исходных кодов так, как это
показано в демонстрации.
Создайте кластер баз данных, запустите сервер.
Убедитесь, что сервер работает.
Остановите сервер.