ELMA365 On-Premises > Подготовка инфраструктуры > Базы данных > Прекращение поддержки PostgreSQL 10 в ELMA365 / Обновление кластера PostgreSQL 10 до 15

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

При обновлении PostgreSQL до основной версии используется утилита pg_upgrade. Она позволяет обновлять данные, хранящиеся в файлах данных PostgreSQL, до более поздней версии PostgreSQL.

Обновление кластера PostgreSQL состоит из шести этапов:

  1. Резервное копирование базы данных.
  2. Установка PostgreSQL 15.
  3. Обновление данных в каталоге базы данных.
  4. Запуск кластера Patroni.
  5. Проверка после установки.
  6. Очистка старых данных.

Шаг 1. Резервное копирование базы данных

Перед выполнением любых действий, связанных с обновлением, создайте резервную копию данных и конфигурации PostgreSQL. О том, как это сделать, читайте в статье «Резервное копирование и восстановление баз данных».

начало внимание

Если на сервере PostgreSQL имеются сторонние базы данных, их резервные копии также необходимо создать.

конец внимание

Резервное копирование базы данных PostgreSQL без использования утилиты elma365-backupper

Шаг 2. Установка PostgreSQL 15

Установите PostgreSQL 15 на все ноды кластера, в которых установлена версия 10:

sudo apt install postgresql-15

Шаг 3. Обновление данных в каталоге базы данных

  1. В кластере PostrgeSQL определите Leader-ноду:

patronictl -c /etc/patroni/config.yml list

  1. На всех нодах кластера PostrgeSQL остановите Patroni:

sudo systemctl stop patroni.service

  1. На всех нодах кластера остановите PostgreSQL 10 и PostgreSQL 15:

sudo systemctl stop postgresql@10 postgresql@15

  1. Убедитесь, что кластеры PostgreSQL 10 и PostgreSQL 15 остановлены:

pg_lsclusters

  1. На Leader-ноде выполните проверку на предмет совместимости конфигураций баз данных:

sudo -iu postgres /usr/lib/postgresql/15/bin/pg_upgrade \
-o "-c config_file=/etc/postgresql/10/main/postgresql.conf"\
-O "-c config_file=/etc/postgresql/15/main/postgresql.conf" \
--old-datadir=/var/lib/postgresql/10/main/ \
--new-datadir=/var/lib/postgresql/15/main/ \
--old-bindir=/usr/lib/postgresql/10/bin \
--new-bindir=/usr/lib/postgresql/15/bin --check

где:

  • /usr/lib/postgresql/10/bin и /usr/lib/postgresql/15/bin пути к бинарным файлам PostgreSQL версий 10 и 15;
  • /var/lib/postgresql/10/main и /var/lib/postgresql/15/main пути к каталогам данных.
  1. На Leader-ноде выполните перенос данных из PostgreSQL 10 в PostgreSQL 15:

sudo -iu postgres /usr/lib/postgresql/15/bin/pg_upgrade \
-o "-c config_file=/etc/postgresql/10/main/postgresql.conf" \
-O "-c config_file=/etc/postgresql/15/main/postgresql.conf" \
--old-datadir=/var/lib/postgresql/10/main/ \
--new-datadir=/var/lib/postgresql/15/main/ \
--old-bindir=/usr/lib/postgresql/10/bin \
--new-bindir=/usr/lib/postgresql/15/bin

где:

  • /usr/lib/postgresql/10/bin и /usr/lib/postgresql/15/bin пути к бинарным файлам PostgreSQL версий 10 и 15;
  • /var/lib/postgresql/10/main и /var/lib/postgresql/15/main пути к каталогам данных.

Шаг 4. Запуск кластера Patroni

  1. На пути до PostgreSQL 15 откройте файл конфигурации Patroni:

sudo nano /etc/patroni/config.yml

  1. На каждой ноде кластера PostgreSQL замените параметры data_dir, bin_dir и config_dir, например:

...
data_dir: /var/lib/postgresql/15/main
bin_dir: /usr/lib/postgresql/15/bin
config_dir: /etc/postgresql/15/main
...

  1. Получите наименование кластера PostgreSQL 10:

sudo cat /etc/patroni/config.yml | grep "scope" | awk '{ print $2 }'

  1. На Leader-ноде в Patroni удалите кластер PostgreSQL 10:

patronictl -c /etc/patroni/config.yml remove postgres-cluster

где:

  • postgres-cluster наименование кластера PostgreSQL 10, полученное на предыдущем этапе.
  1. На Leader-ноде запустите Patroni:

sudo systemctl start patroni.service

  1. На Replica-нодах удалите каталог данных PostgreSQL 15:

sudo rm -rf /var/lib/postgresql/15/main

  1. На Replica-нодах запустите Patroni:

sudo systemctl start patroni.service

Шаг 5. Проверка после установки

  1. Проверьте состояние кластера:

patronictl -c /etc/patroni/config.yml list

  1. Убедитесь, что PostgreSQL 15 работает корректно и данные доступны.
  2. Для оптимизации базы данных выполните команду на Leader-ноде:

sudo -u postgres /usr/lib/postgresql/15/bin/vacuumdb --all --analyze-in-stages

Шаг 6. Очистка старых данных

начало внимание

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

конец внимание

При необходимости после успешного обновления и проверки PostgreSQL 15 вы можете очистить старые данные:

sudo -u postgres ./delete_old_cluster.sh