Проект

Общее

Профиль

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