В последнем обновлении 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