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