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