Обновление 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 с минимальными рисками. Главное - тщательно тестировать процесс на стенде, аналогичном рабочему окружению.