Проект

Общее

Профиль

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