01 Занятие 01: Базовый инструментарий / Установка и управление сервером
Эта страница извлечена из официального PDF в нативный Markdown. Текст слайдов, код и комментарии сохранены в порядке чтения; исходные PDF и HTML остаются эталоном макета. HTML source: dba1_01_tools_install.html Archive: DBA1-handouts-16.zip Страниц PDF: 23
Page 1: Базовый инструментарий / Установка и управление сервером
Авторские права
© Postgres Professional, 2017–2024 Авторы: Егор Рогов, Павел Лузанов, Илья Баштанов, Алексей Береснев Фото: Олег Бартунов (монастырь Пху и пик Бхрикути, Непал)
Использование материалов курса
Некоммерческое использование материалов курса (презентации, демонстрации) разрешается без ограничений. Коммерческое использование возможно только с письменного разрешения компании Postgres Professional. Запрещается внесение изменений в материалы курса.
Обратная связь
Отзывы, замечания и предложения направляйте по адресу: edu@postgrespro.ru
Отказ от ответственности
Компания Postgres Professional не несет никакой ответственности за любые повреждения и убытки, включая потерю дохода, нанесенные прямым или непрямым, специальным или случайным использованием материалов курса. Компания Postgres Professional не предоставляет каких-либо гарантий на материалы курса. Материалы курса предоставляются на основе принципа «как есть» и компания Postgres Professional не обязана предоставлять сопровождение, поддержку, обновления, расширения и изменения.
Page 2: Темы занятия
Основные понятия
- Установка из исходных кодов
- Управление сервером
- Пакетная установка
- Управление сервером в Ubuntu
- Облачные решения
Page 3: Кластер БД и сервер
{#source-figure-003 caption=“Source slide page 3: Кластер БД и сервер”}
Комментарии преподавателя
Прежде чем говорить об установке, рассмотрим некоторые основные понятия.
PostgreSQL — программа, которая относится к классу систем управления базами данных.
Когда эта программа выполняется, мы называем ее сервером PostgreSQL или экземпляром сервера. Пока сервер представляется для нас «черным ящиком», но постепенно мы познакомимся с тем, как он устроен.
Данные, которыми управляет PostgreSQL, хранятся в базах данных. Один экземпляр PostgreSQL одновременно работает с несколькими базами данных. Этот набор баз данных называется кластером баз данных. Подробнее мы будем говорить о базах данных в теме «Организация данных. Базы данных и схемы».
Итак: кластер баз данных — это данные в файлах; сервер или экземпляр сервера — программа, управляющая кластером баз данных.
Page 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 хранятся именно исходные коды для этих инструментов. При сборке из них генерируются файлы на Си, которые затем компилируются. При этом в архиве с исходными кодами находятся уже сгенерированные файлы Си.
Page 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:
https://postgrespro.ru/docs/postgresql/16/install-make
В этом курсе рассматривается традиционный способ сборки.
Начиная с версии 16 можно также использовать систему сборки программного обеспечения Meson:
https://postgrespro.ru/docs/postgresql/16/install-meson
Для сборки требуется ряд программ и утилит.
Библиотека readline дает возможность редактировать командную строку, пользоваться историей команд и автодополнением. В серверной инсталляции может быть и не нужна, если не предполагается запускать psql в консоли.
Библиотеки zlib, lz4 и zstd используются для сжатия.
Page 6: Распаковка архива
Архив с исходными кодами находится в домашнем каталоге пользователя student. Распаковываем архив:
Создание конфигурации
Настройку сборки выполним в каталоге с распакованным исходным кодом, используя скрипт configure.
Внимание! Если сборка производится повторно, например с другими параметрами конфигурации, то предварительно нужно убрать файлы, оставшиеся от предыдущей сборки:
В команде configure можно указать различные параметры конфигурации. Например: –prefix — каталог установки, по умолчанию /usr/local/pgsql; –enable-debug — для включения отладочной информации. Полный список параметров есть в документации. Также принимаются во внимание переменные окружения. Например, CC и CFLAGS настраивают компилятор C. Скрипт configure по умолчанию подготавливает сборку и установку исполняемых файлов, библиотек и прочих файлов PostgreSQL в каталог /usr/local/pgsql. Обычно каталог установки доступен для записи только суперпользователю ОС. В целях демонстрации ключом –prefix укажем каталог установки ПО сервера в подкаталог pgsql16 домашнего каталога пользователя student. Кроме того, будем использовать порт 5555 вместо порта 5432 по умолчанию:
Вывод этой и следующих команд занимает очень много места, мы не будем его показывать.
Сборка и установка PostgreSQL
Возможные варианты: make — сборка только сервера; make world — сборка сервера, всех расширений и документации. Собираем сервер. В зависимости от характеристик компьютера команда make может работать достаточно долго (минуты и даже десятки минут).
Теперь устанавливаем сервер.
Для сборки расширений нужно повторить make и make install в подкаталоге contrib.
Page 7: Page 7
Если бы мы собирали сервер с расширениями и документацией (make world), то можно было бы установить все вместе командой make install-world.
Page 8: Создание кластера
{#source-figure-008 caption=“Source slide page 8: Создание кластера”}
Утилита
- initdb
- Особенности
- новый кластер баз данных не может принадлежать
- суперпользователю ОС
- PGDATA — удобная переменная для каталога кластера
- файлы конфигурации создаются в каталоге PGDATA
- желательно включить расчет контрольных сумм
- для страниц с данными
Комментарии преподавателя
После установки сервера необходимо создать кластер баз данных. Для этого предназначена утилита initdb.
В целях безопасности каталог, в котором инициализируется кластер, не может принадлежать суперпользователю ОС. Владельцем кластера обычно делают пользователя postgres.
Владелец кластера может определить переменную окружения PGDATA, указывающую на каталог кластера. Эту переменную используют некоторые утилиты сервера, когда им нужно узнать расположение кластера. К таким утилитам относится initdb, а также основная утилита управления сервером pg_ctl, о которой мы будем говорить дальше.
В процессе инициализации кластера утилита initdb создает конфигурационные файлы в этом же каталоге PGDATA. Подробнее о файлах конфигурации мы расскажем в одной из следующих тем.
Утилита initdb имеет множество ключей, влияющих на ее работу. Один из важных — -k, или –data-checksums — включает подсчет контрольных сумм на страницах данных. Проверка контрольной суммы будет выполняться при обращении к любой странице данных в кластере. Это несколько снижает производительность, но позволяет оперативно обнаружить повреждения в данных.
https://postgrespro.ru/docs/postgresql/16/app-initdb
Page 9: Создание кластера
Теперь необходимо создать каталог для данных. Для промышленного использования владельцем каталога обычно назначают отдельного пользователя ОС. В нашем случае, пусть это будет каталог пользователя student внутри /home/student/pgsql16
Этот каталог часто называют PGDATA по имени переменной окружения, которую удобно использовать при работе с утилитами сервера.
Все утилиты сервера установлены в подкаталоге bin, который стоит добавить в переменную PATH:
Для инициализации кластера баз данных используется утилита initdb. В ключе -U можно указать имя суперпользователя СУБД. Если его не задать, то используется имя пользователя ОС, в нашем случае student. Обычно таким пользователем является postgres, так что зададим это имя явно. Ключ -k включает подсчет контрольных сумм страниц, что позволяет своевременно обнаруживать повреждения данных. Если переменная PGDATA не установлена, то в ключе -D следует указать каталог для данных. В нашем случае этот ключ можно было бы не указывать.
Page 10: Управление сервером
Утилита
- pg_ctl
- Основные задачи
- запуск, останов и получение статуса сервера
- обновление параметров конфигурации
- переключение на реплику
Комментарии преподавателя
К основным операциям управления сервером относятся запуск и останов сервера, получение текущего статуса сервера, обновление конфигурации и некоторые другие.
Для выполнения этих действий предназначена утилита pg_ctl, идущая в составе PostgreSQL.
Запускать pg_ctl следует от имени владельца кластера баз данных.
Более подробная информация об управлении сервером для администраторов баз данных:
https://postgrespro.ru/docs/postgresql/16/app-pg-ctl
https://postgrespro.ru/docs/postgresql/16/runtime
Page 11: Управление сервером
Теперь все готово к запуску сервера. В ключе -l укажем файл журнала сообщений сервера. Ключ -D опускаем, поскольку задана переменная PGDATA.
Для проверки работы можно вызвать утилиту psql, которая подключится к серверу и вернет текущее время:
Для останова сервера используется следующая команда:
Page 12: Установка пакета
{#source-figure-012 caption=“Source slide page 12: Установка пакета”}
Готовые пакеты — предпочтительный способ
- 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):
https://www.postgresql.org/download/
Мы рассмотрим особенности пакета PostgreSQL для Ubuntu.
Page 13: Создание кластера
{#source-figure-013 caption=“Source slide page 13: Создание кластера”}
Утилита
- pg_createcluster
- initdb
- Особенности
- инициализация выполняется при установке пакета
- и создает кластер «main»
- подсчет контрольных сумм по умолчанию не включен
- расположение файлов конфигурации и журнала сервера
- автоматический запуск сервера при старте ОС
Комментарии преподавателя
Для инициализации кластера в Ubuntu создана обертка pg_createcluster над утилитой initdb.
Справку по использованию pg_createcluster можно получить командой: $ man pg_createcluster
Утилита pg_createcluster автоматически запускается при установке пакета и создает кластер баз данных с именем «main».
Стоит обратить внимание, что инициализация кластера проходит с отключенным подсчетом контрольных сумм в страницах данных.
Исполняемые файлы, файлы конфигурации и журнал сервера размещены в соответствии с правилами, принятыми в Ubuntu.
Кроме того, настраивается автоматический запуск и останов сервера PostgreSQL при запуске и останове операционной системы.
Для удаления кластера используется утилита pg_dropcluster.
Утилиты pg_createcluster и pg_dropcluster специфичны для Ubuntu. В других системах нужно явно инициализировать кластер с помощью initdb и задействовать подходящие средства операционной системы.
Page 14: Создание кластера в Ubuntu
В виртуальной машине курса PostgreSQL установлен из пакета командой:
Каталог установки PostgreSQL:
Владелец ПО сервера — пользователь root. Утилита pg_config показывает, с какими параметрами был собран сервер:
Кластер баз данных с именем main уже инициализирован и находится в каталоге /var/lib/postgresql/16/main. Владельцем каталога является пользователь postgres. Вот содержимое каталога:
Page 15: Page 15
Page 16: Управление сервером
Утилита
- pg_ctlcluster
- pg_ctl
- Основные задачи
- запуск, останов и получение статуса сервера
- перечитывание параметров конфигурации
- переключение на реплику
Комментарии преподавателя
В пакетном дистрибутиве для Ubuntu доступ к утилите pg_ctl осуществляется не напрямую, а через специальную обертку pg_ctlcluster. Справку по использованию pg_ctlcluster можно получить командой: $ man pg_ctlcluster
В других системах утилита pg_ctl может использоваться непосредственно.
Page 17: Управление сервером в Ubuntu
При установке из пакета в настройки запуска ОС добавляется запуск PostgreSQL. Поэтому после загрузки операционной системы отдельно стартовать PostgreSQL не нужно. Можно явным образом управлять сервером с помощью утилиты pg_ctlcluster, которая запускается либо от имени пользователя ОС postgres, либо через sudo. Утилита pg_ctlcluster позволяет управлять несколькими серверами разных версий. В качестве параметров ей передаются: 16 — номер версии сервера; main — название сервера; команда Остановить сервер:
Запустить сервер:
Перезапустить:
Получить текущий статус сервера:
Перечитать файлы конфигурации:
Журнал сообщений сервера при пакетной установке находится здесь:
Заглянем в конец журнала:
Page 18: Облачные решения
PostgreSQL в виртуальной среде
- накладные расходы на виртуализацию
- администратор имеет полный доступ к экземпляру
- PostgreSQL as a Service
- предлагается многими облачными провайдерами
- основное администрирование берет на себя провайдер
- доступ только к ограниченным инструментам для управления,
- резервного копирования, мониторинга
Комментарии преподавателя
Средства виртуализации могут использоваться и для баз данных, в том числе PostgreSQL. Надо понимать, что за удобства этой технологии приходится расплачиваться накладными расходами. Для высоконагруженных систем любые дополнительные промежуточные слои между СУБД и железом нежелательны.
Кроме того, многие ведущие зарубежные и российские облачные провайдеры предлагают использовать PostgreSQL как сервис (Database as a Service, managed database).
В этом случае провайдер берет на себя большинство задач администрирования. Полного доступа к экземпляру в этом случае нет, а возможности управления ограничиваются предоставленными инструментами для таких задач, как мониторинг производительности или резервное копирование и восстановление.
В рамках курса мы не будем рассматривать особенности отдельных облачных решений. Для этого стоит изучить документацию, предоставляемую провайдерами услуг.
Page 19: Итоги
Два варианта установки — пакеты или исходный код
- Доступны облачные решения
- Сервер выполняется под выделенным пользователем ОС
- Перед использованием сервера необходимо инициализировать кластер баз данных
- Специальные команды для управления сервером
Page 20: Практика
Включение расчета контрольных сумм в кластере.
- Остановите сервер.
- Проверьте, рассчитываются ли контрольные суммы в кластере.
- Включите расчет контрольных сумм.
- Запустите сервер.
Комментарии преподавателя
2, 3. Используйте утилиту pg_checksums. Для ее запуска укажите полный путь: /usr/lib/postgresql/16/bin/pg_checksums
https://postgrespro.ru/docs/postgresql/16/app-pgchecksums
Page 21: 1. Останов сервера
2. Проверка
Чтобы узнать, включен ли расчет контрольных сумм страниц, запустим утилиту pg_checksums с ключом –check:
3. Включение расчета контрольных сумм
Выполняем pg_checksums с ключом –enable:
Расчет контрольных сумм включен.
4. Запуск сервера
Page 22: Практика+
- Установите PostgreSQL из исходных кодов так, как это показано в демонстрации.
- Создайте кластер баз данных, запустите сервер.
- Убедитесь, что сервер работает.
- Остановите сервер.
Page 23: 1. Сборка PostgreSQL из исходных кодов
Все необходимые команды были показаны в демонстрации, но они не выполнялись. Повторите эти действия своими руками в виртуальной машине курса. Имейте в виду, что компиляция исходных кодов может занимать продолжительное время (от нескольких минут до десятков минут в зависимости от мощности компьютера).