Обновление PostgreSQL 14 до 15 в кластере Patroni

    Обновление PostgreSQL с версии 14 на 15 в кластере, управляемом Patroni с Consul, требует тщательного планирования. Ваш базовый план корректен, но мы добавим важные детали, чтобы минимизировать время простоя и избежать ошибок. В этой статье разберём пошаговый процесс обновления для кластера из трёх инстансов (1 мастер, 2 реплики) с базой данных объёмом 1 ТБ.

    Подготовка к обновлению PostgreSQL

    Перед началом работ убедитесь, что у вас есть резервная копия всех баз данных (например, с помощью pg_dump или физического бэкапа). Также проверьте совместимость расширений и пользовательских объектов с новой версией PostgreSQL 15.

    Остановка Patroni и PostgreSQL

    На всех узлах кластера последовательно остановите сервис Patroni. Это корректно завершит работу PostgreSQL и снимет блокировки. Используйте команду systemctl stop patroni (или service patroni stop) на каждом инстансе. Убедитесь, что процесс PostgreSQL завершился.

    Выполнение pg_upgrade

    Выберите один инстанс (например, бывший мастер) для обновления. Установите PostgreSQL 15 в отдельную директорию (например, /usr/lib/postgresql/15). Запустите pg_upgrade с ключами --old-datadir, --new-datadir, --old-bindir, --new-bindir. Для базы 1 ТБ процесс может занять несколько часов, поэтому планируйте окно обслуживания.

    Настройка конфигурации Patroni

    После успешного обновления отредактируйте файл конфигурации Patroni (обычно /etc/patroni/patroni.yml) на обновлённом узле. Измените параметр bin_dir на путь к новому бинарнику PostgreSQL 15, а data_dir - на новую директорию данных. Также обновите pg_hba.conf и postgresql.conf при необходимости.

    Запуск кластера и reinit реплик

    Запустите Patroni на обновлённом узле. Он должен стать новым мастером с PostgreSQL 15. Затем на каждом реплике выполните patronictl reinit (или patroni-ctl reinit) для пересоздания реплик с использованием новой версии. Patroni автоматически скопирует данные с мастера.

    Проверка и мониторинг

    После завершения проверьте состояние кластера командой patronictl list. Убедитесь, что все реплики синхронизированы и работают корректно. Выполните тестовые запросы к базе данных и проверьте журналы Patroni и PostgreSQL на наличие ошибок.

    Важные нюансы

    • Версия Patroni: Убедитесь, что ваша версия Patroni поддерживает PostgreSQL 15. Обновите Patroni при необходимости.
    • Плагины и расширения: Некоторые расширения (например, postgis, pg_stat_statements) требуют обновления. Выполните ALTER EXTENSION ... UPDATE после обновления.
    • Consul: Проверьте, что Consul не блокирует обновление. Обычно Patroni корректно обновляет ключи в Consul после перезапуска.
    • Откат: В случае проблем сохраните старую директорию данных. Для отката переключите Patroni на старые бинарники и данные.

    Следуя этому плану, вы сможете обновить PostgreSQL с 14 до 15 в кластере Patroni с минимальными рисками. Главное - тщательно тестировать процесс на стенде, аналогичном рабочему окружению.

    Часто задаваемые вопросы