Проект

Общее

Профиль

Pg-upgrade-debian » История » Версия 2

Рамиль Абдулбяров, 2020-04-30 18:35

1 1 Рамиль Абдулбяров
h1. Pg-upgrade-debian
2
3 2 Рамиль Абдулбяров
h1. Делаем на MASTER
4
h1. SLAVE будет резервом
5
6
h4. Отключаем автостарт postgres
7
8
<pre>
9 1 Рамиль Абдулбяров
vi /etc/postgresql/9.6/main/start.conf
10
disabled
11 2 Рамиль Абдулбяров
</pre>
12
13
h4. Подключаем репозиторий для pg-11
14
15
<pre>
16 1 Рамиль Абдулбяров
/etc/apt/sources.list.d/postgresql.list
17
deb http://apt.postgresql.org/pub/repos/apt/ stretch-pgdg main
18
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
19 2 Рамиль Абдулбяров
</pre>
20 1 Рамиль Абдулбяров
21 2 Рамиль Абдулбяров
h4. Устанавливаем PG-11
22
23
<pre>
24 1 Рамиль Абдулбяров
apt-get update
25
apt-get install postgresql-11
26 2 Рамиль Абдулбяров
</pre>
27
28
h4. При установке создаётся кластер с неподходящей нам кодировкой. Удаляем старый, создаём новый
29
30
<pre>
31 1 Рамиль Абдулбяров
pg_dropcluster 11 main
32
pg_createcluster 11 main --locale en_US.UTF-8 -e UTF8 -p 5433 --start-conf disabled
33 2 Рамиль Абдулбяров
</pre>
34
35
h4. Смотрим результат
36
37 1 Рамиль Абдулбяров
<pre>
38
Ver Cluster Port Status Owner    Data directory               Log file
39
9.6 main    5432 online postgres /var/lib/postgresql/9.6/main /var/log/postgresql/postgresql-9.6-main.log
40
11  main    5433 down   postgres /var/lib/postgresql/11/main  /var/log/postgresql/postgresql-11-main.log
41
</pre>
42
43 2 Рамиль Абдулбяров
h4. Мёрджим конфиги postgresql.conf и pg_hba.conf (готовые скопировать надо куда-то, т.к. будем чистить хранилище кластера)
44
45
<pre>
46 1 Рамиль Абдулбяров
diff -u /etc/postgresql/9.6/main/postgresql.conf /etc/postgresql/11/main/postgresql.conf
47
diff -u /etc/postgresql/9.6/main/pg_hba.conf /etc/postgresql/11/main/pg_hba.conf
48
Запуск кластера PG-11
49 2 Рамиль Абдулбяров
</pre>
50 1 Рамиль Абдулбяров
pg_ctlcluster 11 main start
51
Проверяем, что схемы PG-9.6 и PG-11 совместимы
52
/usr/lib/postgresql/9.6/bin/pg_dumpall -s -f pg_dumpall.dump
53
/usr/lib/postgresql/11/bin/psql -p 5433 -f pg_dumpall.dump > restore-scheme.log
54
Убеждаемся что ошибок нет после восстановления
55
Останавливаем PG-11, чистим кластер и заново инициализируем
56
pg_ctlcluster 11 main stop
57
pg_dropcluster 11 main
58
pg_createcluster 11 main --locale en_US.UTF-8 -e UTF8 -p 5433 --start-conf disabled
59
Запускаем тестовый pg_upgrade
60
61
/usr/lib/postgresql/11/bin/pg_upgrade \
62
-b /usr/lib/postgresql/9.6/bin \
63
-B /usr/lib/postgresql/11/bin \
64
-d /var/lib/postgresql/9.6/main \
65
-D /var/lib/postgresql/11/main \
66
-j 4 -k \
67
-o '-c shared_buffers=10MB' \
68
-O '-c shared_buffers=10MB' \
69
-o '-c config_file=/etc/postgresql/9.6/main/postgresql.conf' \
70
-O '-c config_file=/etc/postgresql/11/main/postgresql.conf' \
71
-o '-c huge_pages=off' \
72
-O '-c huge_pages=off' \
73
-c
74
Ошибок также быть не должно.
75
Предварительная работа проделана, далее downtime
76
77
Если всё ОК, Начинаем даунтайм проекта
78
Выставляем заглушку на сайт
79
Останавливаем cron на бекендах
80
Останаливаем PG-9.6 (PG-11 уже остановлен)
81
pg_ctlcluster 9.6 main stop
82
Запускаем pg_upgrade в боевом режиме, без -c
83
pg_upgrade делался ~1 мин
84
Ставим новый PG-11 в автозапуск и запускаем
85
vi /etc/postgresql/11/main/start.conf
86
auto
87
systemctl enable postgresql@11-main.service
88
systemctl start postgresql@11-main.service
89
Запускаем VACUUM, делался 5 мин
90
./analyze_new_cluster.sh
91
Обновляем psql клиенты на бекендах
92
Включаем cron на бекендах
93
Снимаем заглушку с сайта
94
Downtime закончился
95
Выключаем из автозапуска PG-9.6
96
vi /etc/postgresql/9.6/main/start.conf
97
disabled
98
systemctl disable postgresql@9.6-main.service
99
Удаляем PG-9.6
100
101
После обновления на мастере увеличился в 10 раз fork_rate processes
102
103
Из-за того, что параметр max_parallel_workers_per_gather по умолчанию в PG-11 стал = 2(Ранее 0)
104
105
Вернули max_parallel_workers_per_gather = 0