В последнем обновлении Carbonio 24.03  добавлена поддержка Ubuntu 22.04 и PostgreSQL 16. Те, кто ранее устанавливал Carbonio на Ubuntu 20.04 и RHEL8 с использованием PostgreSQL 12 столкнулись с необходимостью обновить используемый дистрибутив и версию PostgreSQL на актуальную версию. В данной инструкции мы расскажем о том, как это сделать, сохранив все данные.

Инструкция подходит как для пользователей бесплатной версии Carbonio CE, так и для пользователей коммерческой версии Carbonio.

Отметим, что для пользователей коммерческой версии Carbonio доступен вариант снятия резервной копии с исходной инфраструктуры Carbonio и последующее развертывание ее на целевой инфраструктуре, развернутой с нуля. Этот способ является наиболее безопасным и рекомендуемым. Процесс восстановления из резервной копии описан в нашей статье, посвященной данной теме.

Если такая возможность отсутствует, то перед началом обновления рекомендуется создать снапшоты или клонировать виртуальные машины, чтобы иметь возможность откатиться в случае возникновения проблем, либо иметь возможность безопасно протестировать процесс обновления.

Обновление PostgreSQL в Ubuntu 20.04

В случае, если вы намерены обновить PostgreSQL до обновления версии Ubuntu, то процесс обновления будет отличаться от стандартного.

В первую очередь потребуется установить соответствующий репозиторий и ключ для него: 

sh -c 'echo "deb https://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -

После добавления репозитория обновите список доступных пакетов и выполните обновление PostgreSQL 16

apt update
apt -y install postgresql-16

Мигрируйте данные с PostgreSQL 12 на PostgreSQL 16. Для этого:

  • Проверьте список установленных кластеров PostgreSQL - pg_lsclusters

  • Остановите PosgreSQL - systemctl stop postgresql

  • Переименуйте созданный по умолчанию кластер PostgreSQL - pg_renamecluster 16 main main_pristine

  • Обновите используемый кластер до 16-ой версии - pg_upgradecluster 12 main

  • Включите PostgreSQL - systemctl start postgresql

  • Проверьте, что кластер PostgreSQL стал используемым по умолчанию - pg_lsclusters

Проверьте, что все базы данных переместились в новый кластер.

su - postgres
psql
\l

В случае, если на каком-то из этапов инструкции произошла ошибка, связанная с занятостью порта и миграция баз данных не осуществилась, обратитесь к разделу “Проблемы при обновлении PostgreSQL”

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

  • Удаление кластера PostgreSQL 12 - pg_dropcluster 12 main --stop

  • Удаление резервного кластера PostgreSQL 16 - pg_dropcluster 16 main_pristine --stop

Обновление PostgreSQL в Ubuntu 22.04

Установите ключи для репозитория PostrgreSQL 16:

wget -O- "https://www.postgresql.org/media/keys/ACCC4CF8.asc" | gpg --dearmor | sudo tee /usr/share/keyrings/postgres.gpg > /dev/null
chmod 644 /usr/share/keyrings/postgres.gpg
sed -i 's/deb/deb [signed-by=\/usr\/share\/keyrings\/postgres.gpg] /' /etc/apt/sources.list.d/pgdg.list

После добавления репозитория обновите список доступных пакетов и выполните обновление PostgreSQL 16

apt update
apt -y install postgresql-16

Мигрируйте данные с PostgreSQL 12 на PostgreSQL 16. Для этого:

  • Проверьте список установленных кластеров PostgreSQL - pg_lsclusters

  • Остановите PosgreSQL - systemctl stop postgresql

  • Переименуйте созданный по умолчанию кластер PostgreSQL - pg_renamecluster 16 main main_pristine

  • Обновите используемый кластер до 16-ой версии - pg_upgradecluster 12 main

  • Включите PostgreSQL - systemctl start postgresql

  • Проверьте, что кластер PostgreSQL стал используемым по умолчанию - pg_lsclusters

Проверьте, что все базы данных переместились в новый кластер.

su - postgres
psql
\l

В случае, если на каком-то из этапов инструкции произошла ошибка, связанная с занятостью порта и миграция баз данных не осуществилась, обратитесь к разделу “Проблемы при обновлении PostgreSQL”

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

  • Удаление кластера PostgreSQL 12 - pg_dropcluster 12 main --stop

  • Удаление резервного кластера PostgreSQL 16 - pg_dropcluster 16 main_pristine --stop

Обновление PostgreSQL в RHEL8

Добавьте в систему репозиторий PostgreSQL 16

dnf -y install https://download.postgresql.org/pub/repos/yum/reporpms/EL-8-x86_64/pgdg-redhat-repo-latest.noarch.rpm

Установите PostgreSQL 16 и создайте в ней базу данных по умолчанию

dnf install postgresql16 postgresql16-server
/usr/pgsql-16/bin/postgresql-16-setup initdb

Проверьте состояние и совместимость кластеров

su - postgres -c '/usr/pgsql-16/bin/pg_upgrade -b /usr/pgsql-12/bin/ -B /usr/pgsql-16/bin/ -d /var/lib/pgsql/12/data/ -D /var/lib/pgsql/16/data/ -c'

Запустите процедуру обновления и миграции данных. Для этого:

  • Проверьте состояние и совместимость кластеров - su - postgres -c '/usr/pgsql-16/bin/pg_upgrade -b /usr/pgsql-12/bin/ -B /usr/pgsql-16/bin/ -d /var/lib/pgsql/12/data/ -D /var/lib/pgsql/16/data/ -c'

  • Остановите PosgreSQL - systemctl stop postgresql-12.service

  • Запустите обновление - su - postgres -c '/usr/pgsql-16/bin/pg_upgrade -b /usr/pgsql-12/bin/ -B /usr/pgsql-16/bin/ -d /var/lib/pgsql/12/data/ -D /var/lib/pgsql/16/data/'

  • Сделайте резервную копию файла hba.conf из предыдущей версии PostgreSQL - mv /var/lib/pgsql/16/data/pg_hba.conf /var/lib/pgsql/16/data/pg_hba.conf_orig

  • Скопируйте файл hba.conf из предыдущей версии PostgreSQL в новую - cp /var/lib/pgsql/12/data/pg_hba.conf /var/lib/pgsql/16/data/pg_hba.conf

  • Установите необходимые права доступа к скопированному файлу - chown postgres:postgres /var/lib/pgsql/16/data/pg_hba.conf

  • Запустите новую версию СУБД - systemctl start postgresql-16.service

  • Отключите старую версию СУБД - systemctl mask postgresql-12.service

  • Включите использование новой версии СУБД по умолчанию - systemctl enable postgresql-16.service

Проверьте наличие всех баз данных в списке используемого кластера PostgreSQL. Если все они корректно мигрировали, можно удалить неиспользуемые кластеры PSQL. Для этого выполните команды:

su - postgres -c '/usr/pgsql-16/bin/vacuumdb --all --analyze-in-stages'
/var/lib/pgsql/delete_old_cluster.sh

Обновите также PGPool2:

dnf remove pgpool-II pgdg-redhat-repo
dnf install https://www.pgpool.net/yum/rpms/4.5/redhat/rhel-8-x86_64/pgpool-II-pg16-4.5.1-1pgdg.rhel8.x86_64.rpm

Проблемы при обновлении PostgreSQL

В процессе обновления PostgreSQL может возникнуть ошибка, связанная с конфликтом портов.

Error: Port conflict: another instance is already running on /var/run/postgresql with port 5432
Error: Could not start target cluster

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

Для того, чтобы этого избежать и провести обновление, необходимо изменить порт, на котором работает PostgreSQL. Для этого:

  • Измените параметр port = 5432 на port = 5433 в файле /etc/postgresql/12/main/postgresql.conf

  • Остановите службу PostgreSQL - systemctl stop postgresql.service

  • Проверьте, что ни один кластер не запущен pg_lsclusters.

  • В случае, если какой-то кластер запущен, выполните команду pg_ctlcluster 12 main stop (заменив имя кластера и версию на те, что соответсвуют запущенному кластеру)

  • Повторно запустите команду pg_upgradecluster 

  • Измените используемый порт на 5432 в файле /etc/postgresql/16/main/postgresql.conf.

  • Перезагрузите службу PostgreSQL - systemctl restart postgresql.service

Обновление Ubuntu

Обновление Ubuntu c версии 20.04 выполняется по обычной схеме на каждой ноде инфраструктуры:

  • Останавливается Carbonio - su - zextras -c 'zmcontrol stop'

  • Выполняется установка последних версий пакетов для Ubuntu 20.04 - apt update && apt upgrade -y

  • Выполняется обновление дистрибутива - do-release-upgrade

  • Выполняется команда автонастройки компонентов Carbonio - pending-setups -a

В процессе обновления может появиться несколько предупреждений и потребоваться принятие ряда решений. 

После обновления следует проверить, что добавленный в систему репозиторий Carbonio соответствует версии дистрибутива Ubuntu. Для этого откройте файл /etc/apt/sources.list.d/zextras.list и проверьте, что в имени репозитория содержится слово jammy. В случае, если это не так, замените имя focal на jammy вручную и сохраните изменения.

После обновления следует повторно выполнить команду apt update && apt upgrade -y, чтобы доустановить накопившиеся обновления и, в связи со сменой используемой версии Perl, переустановить все связанные с ним пакеты Carbonio:

dpkg -l |grep carbonio.*perl|awk '{ printf " "$2 }' > list.log
apt install --reinstall $(cat list.log)

После этого повторно выполните команду pending-setups -a и запустите Carbonio su - zextras -c 'zmcontrol start'.

По вопросам тестирования, приобретения, предоставления лицензии и консультаций обращаться на почту sales@svzcloud.ru к эксклюзивному партнеру Zextras.

Получить информацию и обменяться информацией о Carbonio CE вы можете в группах в Telegram CarbonioMail и Carbonio CE Unofficial

Комментарии (0)