Pg-upgrade-debian » История » Версия 5
Рамиль Абдулбяров, 2020-04-30 18:48
| 1 | 5 | Рамиль Абдулбяров | h1. Обновление Postgresql 9.6 -> 11 на Debian |
|---|---|---|---|
| 2 | 1 | Рамиль Абдулбяров | |
| 3 | 2 | Рамиль Абдулбяров | h1. Делаем на MASTER |
| 4 | 4 | Рамиль Абдулбяров | SLAVE будет резервом |
| 5 | 2 | Рамиль Абдулбяров | |
| 6 | 4 | Рамиль Абдулбяров | h3. Отключаем автостарт postgres |
| 7 | 2 | Рамиль Абдулбяров | |
| 8 | <pre> |
||
| 9 | 1 | Рамиль Абдулбяров | vi /etc/postgresql/9.6/main/start.conf |
| 10 | disabled |
||
| 11 | 2 | Рамиль Абдулбяров | </pre> |
| 12 | |||
| 13 | 4 | Рамиль Абдулбяров | h3. Подключаем репозиторий для pg-11 |
| 14 | 2 | Рамиль Абдулбяров | |
| 15 | <pre> |
||
| 16 | 1 | Рамиль Абдулбяров | /etc/apt/sources.list.d/postgresql.list |
| 17 | deb http://apt.postgresql.org/pub/repos/apt/ stretch-pgdg main |
||
| 18 | wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add - |
||
| 19 | 2 | Рамиль Абдулбяров | </pre> |
| 20 | 1 | Рамиль Абдулбяров | |
| 21 | 4 | Рамиль Абдулбяров | h3. Устанавливаем PG-11 |
| 22 | 2 | Рамиль Абдулбяров | |
| 23 | <pre> |
||
| 24 | 1 | Рамиль Абдулбяров | apt-get update |
| 25 | apt-get install postgresql-11 |
||
| 26 | 2 | Рамиль Абдулбяров | </pre> |
| 27 | |||
| 28 | 4 | Рамиль Абдулбяров | h3. При установке создаётся кластер с неподходящей нам кодировкой. Удаляем старый, создаём новый |
| 29 | 2 | Рамиль Абдулбяров | |
| 30 | <pre> |
||
| 31 | 1 | Рамиль Абдулбяров | pg_dropcluster 11 main |
| 32 | pg_createcluster 11 main --locale en_US.UTF-8 -e UTF8 -p 5433 --start-conf disabled |
||
| 33 | 2 | Рамиль Абдулбяров | </pre> |
| 34 | |||
| 35 | 4 | Рамиль Абдулбяров | h3. Смотрим результат |
| 36 | 2 | Рамиль Абдулбяров | |
| 37 | 1 | Рамиль Абдулбяров | <pre> |
| 38 | Ver Cluster Port Status Owner Data directory Log file |
||
| 39 | 9.6 main 5432 online postgres /var/lib/postgresql/9.6/main /var/log/postgresql/postgresql-9.6-main.log |
||
| 40 | 11 main 5433 down postgres /var/lib/postgresql/11/main /var/log/postgresql/postgresql-11-main.log |
||
| 41 | </pre> |
||
| 42 | |||
| 43 | 4 | Рамиль Абдулбяров | h3. Мёрджим конфиги postgresql.conf и pg_hba.conf (готовые скопировать надо куда-то, т.к. будем чистить хранилище кластера) |
| 44 | 2 | Рамиль Абдулбяров | |
| 45 | <pre> |
||
| 46 | 1 | Рамиль Абдулбяров | diff -u /etc/postgresql/9.6/main/postgresql.conf /etc/postgresql/11/main/postgresql.conf |
| 47 | diff -u /etc/postgresql/9.6/main/pg_hba.conf /etc/postgresql/11/main/pg_hba.conf |
||
| 48 | </pre> |
||
| 49 | |||
| 50 | 4 | Рамиль Абдулбяров | h3. Запуск кластера PG-11 |
| 51 | 3 | Рамиль Абдулбяров | |
| 52 | 1 | Рамиль Абдулбяров | <pre> |
| 53 | pg_ctlcluster 11 main start |
||
| 54 | </pre> |
||
| 55 | |||
| 56 | 4 | Рамиль Абдулбяров | h3. Проверяем, что схемы PG-9.6 и PG-11 совместимы |
| 57 | 3 | Рамиль Абдулбяров | |
| 58 | 4 | Рамиль Абдулбяров | <pre> |
| 59 | 3 | Рамиль Абдулбяров | /usr/lib/postgresql/9.6/bin/pg_dumpall -s -f pg_dumpall.dump |
| 60 | 1 | Рамиль Абдулбяров | /usr/lib/postgresql/11/bin/psql -p 5433 -f pg_dumpall.dump > restore-scheme.log |
| 61 | 4 | Рамиль Абдулбяров | </pre> |
| 62 | 3 | Рамиль Абдулбяров | |
| 63 | 4 | Рамиль Абдулбяров | h3. Убеждаемся что ошибок нет после восстановления |
| 64 | 3 | Рамиль Абдулбяров | |
| 65 | 4 | Рамиль Абдулбяров | h3. Останавливаем PG-11, чистим кластер и заново инициализируем |
| 66 | 3 | Рамиль Абдулбяров | |
| 67 | <pre> |
||
| 68 | 1 | Рамиль Абдулбяров | pg_ctlcluster 11 main stop |
| 69 | pg_dropcluster 11 main |
||
| 70 | pg_createcluster 11 main --locale en_US.UTF-8 -e UTF8 -p 5433 --start-conf disabled |
||
| 71 | 3 | Рамиль Абдулбяров | </pre> |
| 72 | 1 | Рамиль Абдулбяров | |
| 73 | 4 | Рамиль Абдулбяров | h3. Запускаем тестовый pg_upgrade |
| 74 | 3 | Рамиль Абдулбяров | |
| 75 | <pre> |
||
| 76 | 1 | Рамиль Абдулбяров | /usr/lib/postgresql/11/bin/pg_upgrade \ |
| 77 | -b /usr/lib/postgresql/9.6/bin \ |
||
| 78 | -B /usr/lib/postgresql/11/bin \ |
||
| 79 | -d /var/lib/postgresql/9.6/main \ |
||
| 80 | -D /var/lib/postgresql/11/main \ |
||
| 81 | -j 4 -k \ |
||
| 82 | -o '-c shared_buffers=10MB' \ |
||
| 83 | -O '-c shared_buffers=10MB' \ |
||
| 84 | -o '-c config_file=/etc/postgresql/9.6/main/postgresql.conf' \ |
||
| 85 | -O '-c config_file=/etc/postgresql/11/main/postgresql.conf' \ |
||
| 86 | -o '-c huge_pages=off' \ |
||
| 87 | -O '-c huge_pages=off' \ |
||
| 88 | -c |
||
| 89 | </pre> |
||
| 90 | |||
| 91 | 4 | Рамиль Абдулбяров | h3. Ошибок также быть не должно. |
| 92 | 3 | Рамиль Абдулбяров | |
| 93 | h2. Предварительная работа проделана, далее downtime |
||
| 94 | |||
| 95 | 1 | Рамиль Абдулбяров | h2. Если всё ОК, Начинаем даунтайм проекта |
| 96 | 3 | Рамиль Абдулбяров | |
| 97 | 4 | Рамиль Абдулбяров | h3. Выставляем заглушку на сайт |
| 98 | 3 | Рамиль Абдулбяров | |
| 99 | 4 | Рамиль Абдулбяров | h3. Останавливаем cron на бекендах |
| 100 | 3 | Рамиль Абдулбяров | |
| 101 | 4 | Рамиль Абдулбяров | h3. Останаливаем PG-9.6 (PG-11 уже остановлен) |
| 102 | 3 | Рамиль Абдулбяров | |
| 103 | 1 | Рамиль Абдулбяров | <pre> |
| 104 | pg_ctlcluster 9.6 main stop |
||
| 105 | </pre> |
||
| 106 | 3 | Рамиль Абдулбяров | |
| 107 | 4 | Рамиль Абдулбяров | h3. Запускаем pg_upgrade в боевом режиме, без -c |
| 108 | 1 | Рамиль Абдулбяров | |
| 109 | 3 | Рамиль Абдулбяров | <pre> |
| 110 | pg_upgrade делался ~1 мин |
||
| 111 | </pre> |
||
| 112 | |||
| 113 | 4 | Рамиль Абдулбяров | h3. Ставим новый PG-11 в автозапуск и запускаем |
| 114 | 1 | Рамиль Абдулбяров | |
| 115 | 3 | Рамиль Абдулбяров | <pre> |
| 116 | vi /etc/postgresql/11/main/start.conf |
||
| 117 | 1 | Рамиль Абдулбяров | auto |
| 118 | systemctl enable postgresql@11-main.service |
||
| 119 | systemctl start postgresql@11-main.service |
||
| 120 | </pre> |
||
| 121 | |||
| 122 | 4 | Рамиль Абдулбяров | h3. Запускаем VACUUM, делался 5 мин |
| 123 | 3 | Рамиль Абдулбяров | |
| 124 | 4 | Рамиль Абдулбяров | <pre> |
| 125 | 3 | Рамиль Абдулбяров | ./analyze_new_cluster.sh |
| 126 | 4 | Рамиль Абдулбяров | </pre> |
| 127 | 1 | Рамиль Абдулбяров | |
| 128 | 4 | Рамиль Абдулбяров | h3. Обновляем psql клиенты на бекендах |
| 129 | 3 | Рамиль Абдулбяров | Включаем cron на бекендах |
| 130 | 1 | Рамиль Абдулбяров | Снимаем заглушку с сайта |
| 131 | Downtime закончился |
||
| 132 | Выключаем из автозапуска PG-9.6 |
||
| 133 | 4 | Рамиль Абдулбяров | |
| 134 | <pre> |
||
| 135 | 1 | Рамиль Абдулбяров | vi /etc/postgresql/9.6/main/start.conf |
| 136 | disabled |
||
| 137 | systemctl disable postgresql@9.6-main.service |
||
| 138 | 4 | Рамиль Абдулбяров | </pre> |
| 139 | 1 | Рамиль Абдулбяров | |
| 140 | 4 | Рамиль Абдулбяров | h3. Удаляем PG-9.6 |
| 141 | 1 | Рамиль Абдулбяров | После обновления на мастере увеличился в 10 раз fork_rate processes |
| 142 | Из-за того, что параметр max_parallel_workers_per_gather по умолчанию в PG-11 стал = 2(Ранее 0) |
||
| 143 | Вернули max_parallel_workers_per_gather = 0 |