Pg-upgrade » История » Версия 1
Рамиль Абдулбяров, 2020-04-30 18:24
| 1 | 1 | Рамиль Абдулбяров | h1. Pg-upgrade |
|---|---|---|---|
| 2 | |||
| 3 | Обновление минорной версии, сначала на SLAVE, потом на MASTER |
||
| 4 | yum check-update |
||
| 5 | 1 |
||
| 6 | 2 |
||
| 7 | 3 |
||
| 8 | 4 |
||
| 9 | postgres=# checkpoint ; |
||
| 10 | CHECKPOINT |
||
| 11 | postgres=# checkpoint ; |
||
| 12 | CHECKPOINT |
||
| 13 | yum upgrade postgresql96-server postgresql96 |
||
| 14 | |||
| 15 | Обновление мажорной версии. |
||
| 16 | Делаем на MASTER |
||
| 17 | SLAVE будет резервом, его рекомендуют обновлять через несколько дней |
||
| 18 | Отключаем автостарт postgres (в centos этого нет) |
||
| 19 | vi /etc/postgresql/9.6/main/start.conf |
||
| 20 | disabled |
||
| 21 | Подключаем репозиторий для pg-11 |
||
| 22 | yum -y install https://download.postgresql.org/pub/repos/yum/11/redhat/rhel-7-x86_64/pgdg-redhat11-11-2.noarch.rpm |
||
| 23 | Устанавливаем PG-11 |
||
| 24 | yum check-update |
||
| 25 | yum install postgresql11-server postgresql11 |
||
| 26 | Инициализируем новый кластер (На боевом кодировка другая) |
||
| 27 | /usr/pgsql-11/bin/initdb -D /var/lib/pgsql/11/data/ --encoding=SQL_ASCII --lc-collate=C --lc-ctype=C |
||
| 28 | Мёрджим конфиги postgresql.conf и pg_hba.conf (готовые скопировать надо куда-то, т.к. будем чистить хранилище кластера) |
||
| 29 | diff -u /var/lib/pgsql/9.6/data/postgresql.conf /var/lib/pgsql/11/data/postgresql.conf |
||
| 30 | diff -u /var/lib/pgsql/9.6/data/pg_hba.conf /var/lib/pgsql/11/data/pg_hba.conf |
||
| 31 | Меняем PORT у PG-11 |
||
| 32 | /var/lib/pgsql/11/data/postgresql.conf |
||
| 33 | 1 |
||
| 34 | 2 |
||
| 35 | - port = 5432 |
||
| 36 | + port = 5433 |
||
| 37 | |||
| 38 | Запуск кластера PG-11 |
||
| 39 | /usr/pgsql-11/bin/pg_ctl -D /var/lib/pgsql/11/data/ -l logfile start |
||
| 40 | Проверяем, что схемы PG-9.6 и PG-11 совместимы |
||
| 41 | /usr/pgsql-9.6/bin/pg_dumpall -s -f pg_dumpall.dump |
||
| 42 | /usr/pgsql-11/bin/psql -p 5433 -f pg_dumpall.dump > restore-scheme.log |
||
| 43 | Убеждаемся что ошибок нет после восстановления |
||
| 44 | Останавливаем PG-11, чистим кластер и заново инициализируем |
||
| 45 | /usr/pgsql-11/bin/pg_ctl -D /var/lib/pgsql/11/data/ -l postgres-11.log stop |
||
| 46 | rm -rf /var/lib/pgsql/11/data/ |
||
| 47 | Запускаем тестовый pg_upgrade |
||
| 48 | 1 |
||
| 49 | 2 |
||
| 50 | 3 |
||
| 51 | 4 |
||
| 52 | 5 |
||
| 53 | 6 |
||
| 54 | 7 |
||
| 55 | 8 |
||
| 56 | 9 |
||
| 57 | 10 |
||
| 58 | 11 |
||
| 59 | 12 |
||
| 60 | 13 |
||
| 61 | /usr/pgsql-11/bin/pg_upgrade \ |
||
| 62 | -b /usr/pgsql-9.6/bin \ |
||
| 63 | -B /usr/pgsql-11/bin \ |
||
| 64 | -d /var/lib/pgsql/9.6/data \ |
||
| 65 | -D /var/lib/pgsql/11/data/ \ |
||
| 66 | -j 4 -k \ |
||
| 67 | -o '-c shared_buffers=10MB' \ |
||
| 68 | -O '-c shared_buffers=10MB' \ |
||
| 69 | -o '-c config_file=/var/lib/pgsql/9.6/data/postgresql.conf' \ |
||
| 70 | -O '-c config_file=/var/lib/pgsql/11/data/postgresql.conf' \ |
||
| 71 | -o '-c huge_pages=off' \ |
||
| 72 | -O '-c huge_pages=off' \ |
||
| 73 | -c |
||
| 74 | |||
| 75 | Ошибок также быть не должно. |
||
| 76 | Предварительная работа проделана, далее downtime |
||
| 77 | |||
| 78 | |||
| 79 | Если всё ОК, Начинаем даунтайм проекта |
||
| 80 | Выставляем заглушку на сайт |
||
| 81 | Останавливаем cron на бекендах |
||
| 82 | Останаливаем PG-9.6 (PG-11 уже остановлен) |
||
| 83 | /usr/pgsql-9.6/bin/pg_ctl -D /var/lib/pgsql/9.6/data/ -l logfile stop |
||
| 84 | Запускаем pg_upgrade в боевом режиме, без -c |
||
| 85 | pg_upgrade делался ~1 мин |
||
| 86 | Ставим новый PG-11 в автозапуск и запускаем |
||
| 87 | vi /etc/postgresql/9.6/main/start.conf |
||
| 88 | auto |
||
| 89 | systemctl enable postgresql-11.service |
||
| 90 | systemctl start postgresql-11.service |
||
| 91 | Запускаем VACUUM, делался 5 мин |
||
| 92 | ./analyze_new_cluster.sh |
||
| 93 | Включаем cron на бекендах |
||
| 94 | Снимаем заглушку с сайта |
||
| 95 | |||
| 96 | |||
| 97 | Downtime закончился |
||
| 98 | Выключаем из автозапуска PG-9.6 |
||
| 99 | vi /etc/postgresql/9.6/main/start.conf |
||
| 100 | disabled |
||
| 101 | systemctl disable postgresql-11.service |
||
| 102 | Удаляем PG-9.6 |
||
| 103 | |||
| 104 | По итогу даунтайм на тестовом длился ~7 мин. |
||
| 105 | *pg_upgrade ~ 1 мин |
||
| 106 | *vacuum 5 мин |
||
| 107 | Учитывая, что на ней 2 тестовые базы: prunto и prunto2 |
||
| 108 | Тестовая СУБД 20 Gb |
||
| 109 | Боевая СУБД 36 Gb |
||
| 110 | |||
| 111 | |||
| 112 | SLAVE рекомендуют обновлять по прошествии нескольких дней, когда точно убедимся, что приложение работает как надо на PG-11 |