Pg-upgrade » История » Версия 4
Рамиль Абдулбяров, 2020-04-30 19:02
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 | 4 | Рамиль Абдулбяров | h3. Ошибок также быть не должно. |
100 | 1 | Рамиль Абдулбяров | Предварительная работа проделана, далее downtime |
101 | |||
102 | |||
103 | 4 | Рамиль Абдулбяров | h1. Если всё ОК, Начинаем даунтайм проекта |
104 | 1 | Рамиль Абдулбяров | Выставляем заглушку на сайт |
105 | Останавливаем cron на бекендах |
||
106 | Останаливаем PG-9.6 (PG-11 уже остановлен) |
||
107 | 4 | Рамиль Абдулбяров | |
108 | <pre> |
||
109 | 1 | Рамиль Абдулбяров | /usr/pgsql-9.6/bin/pg_ctl -D /var/lib/pgsql/9.6/data/ -l logfile stop |
110 | 4 | Рамиль Абдулбяров | </pre> |
111 | |||
112 | h3. Запускаем pg_upgrade в боевом режиме, без -c |
||
113 | 1 | Рамиль Абдулбяров | pg_upgrade делался ~1 мин |
114 | Ставим новый PG-11 в автозапуск и запускаем |
||
115 | 4 | Рамиль Абдулбяров | |
116 | <pre> |
||
117 | 1 | Рамиль Абдулбяров | vi /etc/postgresql/9.6/main/start.conf |
118 | auto |
||
119 | systemctl enable postgresql-11.service |
||
120 | systemctl start postgresql-11.service |
||
121 | 4 | Рамиль Абдулбяров | </pre> |
122 | |||
123 | h3. Запускаем VACUUM, делался 5 мин |
||
124 | |||
125 | <pre> |
||
126 | 1 | Рамиль Абдулбяров | ./analyze_new_cluster.sh |
127 | 4 | Рамиль Абдулбяров | </pre> |
128 | |||
129 | h3. Включаем cron на бекендах |
||
130 | 1 | Рамиль Абдулбяров | Снимаем заглушку с сайта |
131 | |||
132 | 4 | Рамиль Абдулбяров | h3. Downtime закончился |
133 | 1 | Рамиль Абдулбяров | Выключаем из автозапуска PG-9.6 |
134 | 4 | Рамиль Абдулбяров | |
135 | <pre> |
||
136 | 1 | Рамиль Абдулбяров | vi /etc/postgresql/9.6/main/start.conf |
137 | disabled |
||
138 | systemctl disable postgresql-11.service |
||
139 | 4 | Рамиль Абдулбяров | </pre> |
140 | 1 | Рамиль Абдулбяров | |
141 | 4 | Рамиль Абдулбяров | h3. Удаляем PG-9.6 |
142 | |||
143 | h3. По итогу даунтайм на тестовом длился ~7 мин. |
||
144 | 1 | Рамиль Абдулбяров | *pg_upgrade ~ 1 мин |
145 | *vacuum 5 мин |
||
146 | Учитывая, что на ней 2 тестовые базы: prunto и prunto2 |
||
147 | Тестовая СУБД 20 Gb |
||
148 | Боевая СУБД 36 Gb |
||
149 | |||
150 | |||
151 | 4 | Рамиль Абдулбяров | h3. SLAVE рекомендуют обновлять по прошествии нескольких дней, когда точно убедимся, что приложение работает как надо на PG-11 |