Pg-upgrade-debian » История » Редакция 2
Редакция 1 (Рамиль Абдулбяров, 2020-04-30 18:31) → Редакция 2/5 (Рамиль Абдулбяров, 2020-04-30 18:35)
h1. Pg-upgrade-debian h1. Делаем на MASTER h1. SLAVE будет резервом h4. Отключаем автостарт postgres <pre> vi /etc/postgresql/9.6/main/start.conf disabled </pre> h4. Подключаем репозиторий для pg-11 <pre> /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 - </pre> h4. Устанавливаем PG-11 <pre> apt-get update apt-get install postgresql-11 </pre> h4. При установке создаётся кластер с неподходящей нам кодировкой. Удаляем старый, создаём новый <pre> pg_dropcluster 11 main pg_createcluster 11 main --locale en_US.UTF-8 -e UTF8 -p 5433 --start-conf disabled </pre> h4. Смотрим результат <pre> 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 </pre> h4. Мёрджим конфиги postgresql.conf и pg_hba.conf (готовые скопировать надо куда-то, т.к. будем чистить хранилище кластера) <pre> 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 </pre> 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 postgresql@11-main.service systemctl start postgresql@11-main.service Запускаем VACUUM, делался 5 мин ./analyze_new_cluster.sh Обновляем psql клиенты на бекендах Включаем cron на бекендах Снимаем заглушку с сайта Downtime закончился Выключаем из автозапуска PG-9.6 vi /etc/postgresql/9.6/main/start.conf disabled systemctl disable postgresql@9.6-main.service Удаляем PG-9.6 После обновления на мастере увеличился в 10 раз fork_rate processes Из-за того, что параметр max_parallel_workers_per_gather по умолчанию в PG-11 стал = 2(Ранее 0) Вернули max_parallel_workers_per_gather = 0