Проект

Общее

Профиль

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

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

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