Pg-upgrade » История » Редакция 1
Редакция 1/5
| Следующее »
Рамиль Абдулбяров, 2020-04-30 18:24
Pg-upgrade¶
Обновление минорной версии, сначала на SLAVE, потом на MASTER
yum check-update
1
2
3
4
postgres=# checkpoint ;
CHECKPOINT
postgres=# checkpoint ;
CHECKPOINT
yum upgrade postgresql96-server postgresql96
Обновление мажорной версии.
Делаем на MASTER
SLAVE будет резервом, его рекомендуют обновлять через несколько дней
Отключаем автостарт postgres (в centos этого нет)
vi /etc/postgresql/9.6/main/start.conf
disabled
Подключаем репозиторий для pg-11
yum y install https://download.postgresql.org/pub/repos/yum/11/redhat/rhel-7-x86_64/pgdg-redhat11-11-2.noarch.rpm port = 5432
Устанавливаем PG-11
yum check-update
yum install postgresql11-server postgresql11
Инициализируем новый кластер (На боевом кодировка другая)
/usr/pgsql-11/bin/initdb -D /var/lib/pgsql/11/data/ --encoding=SQL_ASCII --lc-collate=C --lc-ctype=C
Мёрджим конфиги postgresql.conf и pg_hba.conf (готовые скопировать надо куда-то, т.к. будем чистить хранилище кластера)
diff -u /var/lib/pgsql/9.6/data/postgresql.conf /var/lib/pgsql/11/data/postgresql.conf
diff -u /var/lib/pgsql/9.6/data/pg_hba.conf /var/lib/pgsql/11/data/pg_hba.conf
Меняем PORT у PG-11
/var/lib/pgsql/11/data/postgresql.conf
1
2
+ port = 5433
Запуск кластера PG-11
/usr/pgsql-11/bin/pg_ctl -D /var/lib/pgsql/11/data/ -l logfile start
Проверяем, что схемы PG-9.6 и PG-11 совместимы
/usr/pgsql-9.6/bin/pg_dumpall -s -f pg_dumpall.dump
/usr/pgsql-11/bin/psql -p 5433 -f pg_dumpall.dump > restore-scheme.log
Убеждаемся что ошибок нет после восстановления
Останавливаем PG-11, чистим кластер и заново инициализируем
/usr/pgsql-11/bin/pg_ctl -D /var/lib/pgsql/11/data/ -l postgres-11.log stop
rm -rf /var/lib/pgsql/11/data/
Запускаем тестовый pg_upgrade
1
2
3
4
5
6
7
8
9
10
11
12
13
/usr/pgsql-11/bin/pg_upgrade \
-b /usr/pgsql-9.6/bin \
-B /usr/pgsql-11/bin \
-d /var/lib/pgsql/9.6/data \
-D /var/lib/pgsql/11/data/ \
-j 4 -k \
-o '-c shared_buffers=10MB' \
-O '-c shared_buffers=10MB' \
-o '-c config_file=/var/lib/pgsql/9.6/data/postgresql.conf' \
-O '-c config_file=/var/lib/pgsql/11/data/postgresql.conf' \
-o '-c huge_pages=off' \
-O '-c huge_pages=off' \
-c
Ошибок также быть не должно.
Предварительная работа проделана, далее downtime
Если всё ОК, Начинаем даунтайм проекта
Выставляем заглушку на сайт
Останавливаем cron на бекендах
Останаливаем PG-9.6 (PG-11 уже остановлен)
/usr/pgsql-9.6/bin/pg_ctl -D /var/lib/pgsql/9.6/data/ -l logfile stop
Запускаем pg_upgrade в боевом режиме, без -c
pg_upgrade делался ~1 мин
Ставим новый PG-11 в автозапуск и запускаем
vi /etc/postgresql/9.6/main/start.conf
auto
systemctl enable postgresql-11.service
systemctl start postgresql-11.service
Запускаем VACUUM, делался 5 мин
./analyze_new_cluster.sh
Включаем cron на бекендах
Снимаем заглушку с сайта
Downtime закончился
Выключаем из автозапуска PG-9.6
vi /etc/postgresql/9.6/main/start.conf
disabled
systemctl disable postgresql-11.service
Удаляем PG-9.6
По итогу даунтайм на тестовом длился ~7 мин.
*pg_upgrade ~ 1 мин
*vacuum 5 мин
Учитывая, что на ней 2 тестовые базы: prunto и prunto2
Тестовая СУБД 20 Gb
Боевая СУБД 36 Gb
SLAVE рекомендуют обновлять по прошествии нескольких дней, когда точно убедимся, что приложение работает как надо на PG-11
Обновлено Рамиль Абдулбяров больше 4 лет назад · 5 изменени(я, ий)