Обновление кластера Greengage DB
В этой статье описано, как обновить кластер Greengage DB на более новую версию.
Обзор
Версия Greengage DB состоит из трех частей: <major>.<minor>.<patch> — например, 6.29.2 или 7.4.1:
-
major— увеличивается при изменениях системного каталога, несовместимых изменениях или добавлении значительных новых возможностей. Устаревшая функциональность может быть удалена в мажорном релизе. -
minor— увеличивается при добавлении обратно совместимых возможностей или при объявлении функциональности устаревшей. Устаревшие возможности не удаляются в минорных релизах. -
patch— увеличивается при обратно совместимых исправлениях ошибок внутри минорного релиза.
Минорные и патч-релизы не меняют внутренний формат хранения, поэтому они всегда совместимы с другими релизами той же старшей версии. Например, версия 6.29.2 совместима с 6.28.0, а 7.4.1 — с 7.2.0. Чтобы обновиться между совместимыми версиями, замените исполняемые файлы, пока кластер остановлен, а затем перезапустите его.
Внутренний формат хранения может измениться между мажорными версиями. Для обновления до новой мажорной версии выгрузите данные из старого кластера и восстановите их в новом с помощью утилит gpbackup и gprestore.
Перед завершением крупного обновления протестируйте клиентские приложения на новой версии. Использование параллельных установок старой и новой версий помогает с проверкой и откатом.
При планировании перехода на новую мажорную версию обратите внимание на изменения в следующих областях:
- Администрирование
-
Возможности мониторинга и управления могут изменяться или быть расширены в мажорном релизе.
- SQL
-
Изменения могут включать новые возможности SQL, расширения или модификации существующего поведения. Пример несовместимых изменений на уровне SQL см. в статье Несовместимости SQL между Greengage DB 6 и 7.
- API библиотек
-
Для клиентских библиотек, таких как
libpq, может вноситься новая функциональность или изменения. Совместимость обычно сохраняется, если не указано иное. - Системные каталоги
-
Изменения системного каталога влияют на внутреннюю структуру метаданных базы данных. Эти изменения могут повлиять на административные инструменты, системы мониторинга или пользовательские запросы, которые обращаются к таблицам каталога напрямую.
- API сервера для кода на C
-
Изменения в API серверных функций, написанных на C, могут повлиять на расширения или интеграции, которые используют внутреннее API сервера.
Подготовка к обновлению
Чтобы выполнить обновление между мажорными версиями, выгрузите данные из старого кластера и восстановите их в новом с помощью gpbackup и gprestore.
Перед началом:
-
Проверьте несовместимые изменения.
Прочитайте примечания к выпуску для каждой мажорной версии между вашей текущей и целевой версией. Обратите внимание на удаление функций, изменение значений по умолчанию и несовместимости в SQL или системном каталоге.
-
Подготовьте новый кластер.
Установите и инициализируйте новый кластер Greengage DB целевой версии.
-
Установите gpbackup и gprestore.
Утилиты должны быть установлены на хосте мастера/координатора обоих кластеров — старого и нового.
Миграция данных
Следующие шаги описывают миграцию данных с использованием gpbackup и gprestore.
Предполагается, что оба кластера имеют одинаковую структуру: один мастер/координатор и два сегмент-хоста, на каждом по два основных сегмента.
Шаг 1. Создание бэкапа исходной базы данных
Запустите gpbackup на мастере/координаторе старого кластера, чтобы создать бэкап требуемой базы данных, например:
$ gpbackup \
--dbname marketplace \
--backup-dir /home/gpadmin \
--single-backup-dir \
--without-globals
-
--dbnameуказывает имя базы данных для бэкапа. -
--backup-dirуказывает каталог для сохранения файлов бэкапа. -
--single-backup-dirсохраняет все файлы бэкапа для каждого хоста в одном каталоге вместо создания отдельных каталогов для каждого сегмента. -
--without-globalsисключает глобальные объекты, такие как роли, ресурсные группы и табличные пространства. Этот параметр может быть полезен, если между релизами есть несовместимые изменения в определениях глобальных объектов.
Когда бэкап успешно завершается, в выводе появляется следующее сообщение:
[INFO]:-Backup completed successfully
Также в выводе содержится метка времени бэкапа, которая однозначно идентифицирует его и используется для последующего восстановления:
[INFO]:-Backup Timestamp = 20260401143034
Шаг 2. Проверка файлов бэкапа
gpbackup записывает метаданные и конфигурационные файлы на мастер, а файлы данных — на каждый сегмент-хост.
Перед продолжением проверьте, что все файлы были созданы.
Следующий пример показывает расположение файлов бэкапа для кластера с одним мастером и двумя сегмент-хостами, на каждом из которых размещены два основных сегмента:
backups/
`-- 20260401
`-- 20260401143034
|-- gpbackup_20260401143034_config.yaml
|-- gpbackup_20260401143034_metadata.sql
|-- gpbackup_20260401143034_report
`-- gpbackup_20260401143034_toc.yaml
backups/
`-- 20260401
`-- 20260401143034
|-- gpbackup_0_20260401143034_16385.gz
|-- gpbackup_0_20260401143034_16438.gz
|-- gpbackup_0_20260401143034_16446.gz
|-- gpbackup_1_20260401143034_16385.gz
|-- gpbackup_1_20260401143034_16438.gz
`-- gpbackup_1_20260401143034_16446.gz
backups/
`-- 20260401
`-- 20260401143034
|-- gpbackup_2_20260401143034_16385.gz
|-- gpbackup_2_20260401143034_16438.gz
|-- gpbackup_2_20260401143034_16446.gz
|-- gpbackup_3_20260401143034_16385.gz
|-- gpbackup_3_20260401143034_16438.gz
`-- gpbackup_3_20260401143034_16446.gz
Шаг 3. Копирование файлов бэкапа на новый кластер
Скопируйте каталоги backups на соответствующие хосты в новом кластере, сохранив структуру каталогов.
На каждом хосте в новом кластере должны быть файлы бэкапа по тому же пути, который использует gpbackup — /home/gpadmin в данном примере.
При необходимости измените владельца файлов так, чтобы пользователь gpadmin имел к ним доступ:
$ sudo chown -R gpadmin:gpadmin /home/gpadmin/backups
Шаг 4. Создание целевой базы данных
На координаторе целевого кластера создайте базу данных с тем же именем, что и у исходной базы данных:
$ createdb marketplace
Шаг 5. Восстановление данных в новом кластере
Запустите gprestore на координаторе нового кластера, используя временную метку, полученную на шаге 1:
$ gprestore \
--backup-dir /home/gpadmin \
--timestamp 20260401143034
--backup-dir указывает путь к каталогу, содержащему файлы бэкапа.
После успешного восстановления в выводе будет следующее сообщение:
[INFO]:-Restore completed successfully
Завершение миграции
Если вы пропустили какие-либо таблицы во время восстановления, перенесите их другими способами — например, экспортируйте их с помощью COPY TO и загрузите полученные файлы в новый кластер с помощью COPY FROM.
Воссоздайте все объекты, которые были удалены для выполнения миграции, такие как внешние таблицы, индексы и пользовательские функции.
После миграции данных при необходимости обновите SQL-скрипты, административные скрипты и пользовательские функции, чтобы учесть изменения в новой версии. Пример несовместимых изменений на уровне SQL см. в статье Несовместимости SQL между Greengage DB 6 и 7.