Проект

Общее

Профиль

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