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

Удобство сопровождения

Контекст

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

Проблема

В оригинальном PostgreSQL отсутствуют критичные для эксплуатации механизмы: удобная миграция, контроль потребления ресурсов, возможность резервирования подключений для пользователей не обладающих правами суперпользователя, инструменты ротации паролей учетных данных. Отсутствие этих механизмов затрудняет сопровождение, увеличивает нагрузку на администраторов, снижает устойчивость системы и увеличивает риски при обновлениях, масштабировании и поддержке.

Решение

В СУБД Pangolin реализован ряд функциональностей, направленных на повышение удобства сопровождения и расширение возможностей администратора СУБД:

  • Инструмент миграции с оригинального PostgreSQL;
  • Резервирование подключений для ролей;
  • Возможность ротации паролей для учетных записей без недоступности;
  • Очистка неиспользуемых файлов в табличных пространствах (расширение pg_orphaned);
  • Аварийное завершение СУБД при отключении СХД;
  • Трассировка сессий;
  • Контроль потребления ресурсов (CPU, RAM) с завершением ресурсоемких сессий;
  • Контроль целостности передачи WAL на реплику.

Эти возможности автоматизируют сопровождение, повышают устойчивость СУБД к сбоям и упрощают управление жизненным циклом базы данных.

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

Инструмент миграции с оригинального PostgreSQL

В качестве инструмента для миграции с оригинального PostgreSQL на Pangolin используется доработанная оригинальная утилита pg_upgrade.

Более подробно можно ознакомиться в разделе «Миграция с оригинального PostgreSQL на Pangolin» документа «Руководство прикладного разработчика».

Резервирование подключений для ролей

В ядре оригинального PostgreSQL отсутствует возможность резервирования подключений для пользователей, не обладающих правами суперпользователя. Это приводит к проблеме невозможности подключиться к БД, когда все свободные подключения заняты.

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

В каждой БД создается файл pg_quota.conf, который содержит записи для ролей, требующих зарезервировать соединения.

Более подробное описание и настройка данной функциональностью представлено в одноименном разделе документа «Руководство администратора».

Возможность ротации паролей для учетных записей без недоступности

При смене пароля пользователь, на определенное настройками время (grace-период), может подключаться к Pangolin по старому паролю. Этот механизм позволит реализовать автоматическую ротацию паролей ТУЗ, которые используют приложения, без недоступности этих приложений. После ротации паролей ТУЗ приложения продолжают работу с СУБД Pangolin, используя старый пароль, который необходимо обновить в течении grace-периода.

Более подробное описание данной функциональностью представлено в разделе «Обновление пароля» документа «Администрирование функциональностей».

Очистка неиспользуемых файлов в табличных пространствах

В процессе работы СУБД Pangolin создаются и удаляются различные файлы табличных страниц в табличных пространствах. Ядро оригинального PostgreSQL устроено таким образом, что возможны случаи, когда в результате аварийного завершения процесса состояние БД откатывается до последней контрольной точки, в которой нет информации о созданных файлах табличных страниц. Со временем таких файлов может накопиться огромное количество и они будут занимать ощутимый объем дискового пространства.

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

Расширение pg_orphaned работает с неиспользуемыми и временными файлами по следующему алгоритму:

  1. Поиск файлов по числовым маскам (идентификаторам relfilenode) в каталоге табличного пространства.
  2. Поиск этих файлов по соответствующим идентификаторам в представлении pg_class, аналогично pg_filenode_relation().
  3. Если идентификатор на предыдущем шаге не был найден, файл считается неиспользуемым и временно помещается в другой каталог.
  4. При отсутствии обращений к отобранным «на карантин» файлам их можно удалить.

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

pg_orphaned может быть установлено в нескольких базах данных. Все его функции поддерживают режим dry-run, позволяющий просмотреть, какие файлы и куда будут перемещены, без фактического выполнения операций.

Более подробно о расширении можно ознакомиться в разделе «Расширение pg_orphaned. Очистка неиспользуемых файлов в табличных пространствах» документа «Описание расширений продукта СУБД Pangolin».

Аварийное завершение СУБД при отключении СХД

СУБД Pangolin умеет определять момент отключения системы хранения данных (СХД) для аварийного завершения и осуществления переключения лидера кластера (failover).

Тогда как в оригинальном PostgreSQL при отказе/отключении СХД, пользовательские сессии продолжают ожидать операций ввода-вывода. Тайм-аут до возникновения первой ошибки может составлять до 1080 секунд. Автоматическое переключение лидера кластера (failover) не происходит.

Более подробное описание и настройка данной функциональности представлено в разделе «Обеспечение аварийного завершения СУБД Pangolin при отключении СХД» документа «Руководство администратора».

Трассировка сессий

СУБД Pangolin предоставляет механизм трассировки (включения/выключения отладочной печати) с различными уровнями детализации. Суперпользователь может использовать этот механизм для любой сессии, в рамках которой действие не запрещено правилами защиты от действий привилегированного пользователя.

Трассировка записывается на сервере СУБД в файл, путь к которому указывается в значении параметра сервера, а имя формируется по умолчанию из PID серверного процесса и уникального идентификатора или задается перед включением трассировки параметром на уровне сессии.

Функциональность позволяет быстро определять места возникновения и полные контексты трудно воспроизводимых ошибок в процессе отладки объемных блоков кода.

Более подробное описание и настройка данной функциональности представлено в одноименном разделе документа «Руководство администратора».

Контроль потребления ресурсов

Функциональность реализована в виде расширения psql_resources_consumption_limits, которое позволяет ограничивать потребление ресурсов: оперативной памяти и CPU, с помощью процессов СУБД.

Данная функциональность позволяет обеспечить:

  • защиту от деградации функционирования СУБД при превышении ожидаемого потребления ресурсов СУБД каким-либо из процессов сессий СУБД, в случае попытки выполнения не оптимально составленного запроса;
  • диагностику случаев выполнения не оптимально составленных запросов.

В СУБД Pangolin поддерживается:

  • функциональность фиксированного задания ограничений ресурсов для процессов сессий СУБД;
  • завершение с ошибкой сессии, превысившей ограничение на потребление ресурса, и всех ее подпроцессов;
  • обнаружение превышения квоты на ресурсы асинхронно.

Более подробное описание и настройка данной функциональности представлено в одноименном разделе документа «Руководство администратора».

Контроль целостности передачи WAL на реплику

Для защиты от повреждения данных в случае неполадок оборудования СУБД Pangolin использует журнал предзаписи (WAL). Данные журнала используются не только для восстановления после сбоя, но и для работы репликации.

Для сохранения резервной копии создается вспомогательный процесс WALRecoveryWriter, который получает блоки для записи копии WAL-сегмента и асинхронно записывает их в файл, аналогичный оригинальному WAL-сегменту с суффиксом backup в названии. Процесс WalSender перед отправкой проверяет данные, находящиеся в отправляемом сообщении. Если запись или заголовок блока повреждены, то происходит чтение поврежденной части из резервной копии журнала WAL-сегмента. Поврежденная часть заменяется резервной и происходит повторная проверка. Если не удалось восстановить поврежденные данные, то WalSender генерирует ошибку. То есть в случае повреждения WAL-данных ошибка будет происходить уже на мастере. При успехе попытки восстановления данные отправляются реплике.

Более подробное описание и настройка данной функциональности представлено в одноименном разделе документа «Руководство администратора».