Проект

Общее

Профиль

Действия

Pg-upgrade-debian » История » Редакция 2

« Предыдущее | Редакция 2/5 (Разница(diff)) | Следующее »
Рамиль Абдулбяров, 2020-04-30 18:35


Pg-upgrade-debian

Делаем на MASTER
h1. SLAVE будет резервом

Отключаем автостарт postgres

vi /etc/postgresql/9.6/main/start.conf
disabled

Подключаем репозиторий для pg-11

/etc/apt/sources.list.d/postgresql.list
deb http://apt.postgresql.org/pub/repos/apt/ stretch-pgdg main
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -

Устанавливаем PG-11

apt-get update
apt-get install postgresql-11

При установке создаётся кластер с неподходящей нам кодировкой. Удаляем старый, создаём новый

pg_dropcluster 11 main
pg_createcluster 11 main --locale en_US.UTF-8 -e UTF8 -p 5433 --start-conf disabled

Смотрим результат

Ver Cluster Port Status Owner    Data directory               Log file
9.6 main    5432 online postgres /var/lib/postgresql/9.6/main /var/log/postgresql/postgresql-9.6-main.log
11  main    5433 down   postgres /var/lib/postgresql/11/main  /var/log/postgresql/postgresql-11-main.log

Мёрджим конфиги postgresql.conf и pg_hba.conf (готовые скопировать надо куда-то, т.к. будем чистить хранилище кластера)

diff -u /etc/postgresql/9.6/main/postgresql.conf /etc/postgresql/11/main/postgresql.conf
diff -u /etc/postgresql/9.6/main/pg_hba.conf /etc/postgresql/11/main/pg_hba.conf
Запуск кластера PG-11

pg_ctlcluster 11 main start
Проверяем, что схемы PG-9.6 и PG-11 совместимы
/usr/lib/postgresql/9.6/bin/pg_dumpall -s -f pg_dumpall.dump
/usr/lib/postgresql/11/bin/psql -p 5433 -f pg_dumpall.dump > restore-scheme.log
Убеждаемся что ошибок нет после восстановления
Останавливаем PG-11, чистим кластер и заново инициализируем
pg_ctlcluster 11 main stop
pg_dropcluster 11 main
pg_createcluster 11 main --locale en_US.UTF-8 -e UTF8 -p 5433 --start-conf disabled
Запускаем тестовый pg_upgrade

/usr/lib/postgresql/11/bin/pg_upgrade \
-b /usr/lib/postgresql/9.6/bin \
-B /usr/lib/postgresql/11/bin \
-d /var/lib/postgresql/9.6/main \
-D /var/lib/postgresql/11/main \
-j 4 -k \
-o '-c shared_buffers=10MB' \
-O '-c shared_buffers=10MB' \
-o '-c config_file=/etc/postgresql/9.6/main/postgresql.conf' \
-O '-c config_file=/etc/postgresql/11/main/postgresql.conf' \
-o '-c huge_pages=off' \
-O '-c huge_pages=off' \
-c
Ошибок также быть не должно.
Предварительная работа проделана, далее downtime

Если всё ОК, Начинаем даунтайм проекта
Выставляем заглушку на сайт
Останавливаем cron на бекендах
Останаливаем PG-9.6 (PG-11 уже остановлен)
pg_ctlcluster 9.6 main stop
Запускаем pg_upgrade в боевом режиме, без -c
pg_upgrade делался ~1 мин
Ставим новый PG-11 в автозапуск и запускаем
vi /etc/postgresql/11/main/start.conf
auto
systemctl enable
systemctl start
Запускаем VACUUM, делался 5 мин
./analyze_new_cluster.sh
Обновляем psql клиенты на бекендах
Включаем cron на бекендах
Снимаем заглушку с сайта
Downtime закончился
Выключаем из автозапуска PG-9.6
vi /etc/postgresql/9.6/main/start.conf
disabled
systemctl disable
Удаляем PG-9.6

После обновления на мастере увеличился в 10 раз fork_rate processes

Из-за того, что параметр max_parallel_workers_per_gather по умолчанию в PG-11 стал = 2(Ранее 0)

Вернули max_parallel_workers_per_gather = 0

Обновлено Рамиль Абдулбяров больше 4 лет назад · 5 изменени(я, ий)