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 |