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 |