Проект

Общее

Профиль

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

Редакция 2 (Рамиль Абдулбяров, 2020-04-30 18:35) → Редакция 3/5 (Рамиль Абдулбяров, 2020-04-30 18:42)

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 
 </pre> 

 h4. Запуск кластера PG-11 

 <pre> 
 </pre> 
 pg_ctlcluster 11 main start 
 </pre> 

 h4. Проверяем, что схемы 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 

 h4. 
 Убеждаемся что ошибок нет после восстановления 

 h4. 
 Останавливаем PG-11, чистим кластер и заново инициализируем 

 <pre> 
 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 
 </pre> 

 h4. Запускаем тестовый pg_upgrade 

 <pre> 
 /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 
 </pre> 

 h4. Ошибок также быть не должно. 

 h2. 
 Предварительная работа проделана, далее downtime 

 h2. Если всё ОК, Начинаем даунтайм проекта 

 h4. 
 Выставляем заглушку на сайт 

 h4. 
 Останавливаем cron на бекендах 

 h4. 
 Останаливаем PG-9.6 (PG-11 уже остановлен) 

 <pre> 
 pg_ctlcluster 9.6 main stop 
 </pre> 

 h4. Запускаем pg_upgrade в боевом режиме, без -c 

 <pre> 
 pg_upgrade делался ~1 мин 
 </pre> 

 h4. Ставим новый PG-11 в автозапуск и запускаем 

 <pre> 
 vi /etc/postgresql/11/main/start.conf 
 auto 
 systemctl enable postgresql@11-main.service 
 systemctl start postgresql@11-main.service 
 </pre> 

 h4. Запускаем VACUUM, делался 5 мин 

 
 ./analyze_new_cluster.sh 

 h4. 
 Обновляем 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