Проект

Общее

Профиль

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

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

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
</pre>
49 3 Рамиль Абдулбяров
50
h4. Запуск кластера PG-11
51
52
<pre>
53 1 Рамиль Абдулбяров
pg_ctlcluster 11 main start
54 3 Рамиль Абдулбяров
</pre>
55
56
h4. Проверяем, что схемы PG-9.6 и PG-11 совместимы
57
58 1 Рамиль Абдулбяров
/usr/lib/postgresql/9.6/bin/pg_dumpall -s -f pg_dumpall.dump
59
/usr/lib/postgresql/11/bin/psql -p 5433 -f pg_dumpall.dump > restore-scheme.log
60 3 Рамиль Абдулбяров
61
h4. Убеждаемся что ошибок нет после восстановления
62
63
h4. Останавливаем PG-11, чистим кластер и заново инициализируем
64
65
<pre>
66 1 Рамиль Абдулбяров
pg_ctlcluster 11 main stop
67
pg_dropcluster 11 main
68
pg_createcluster 11 main --locale en_US.UTF-8 -e UTF8 -p 5433 --start-conf disabled
69 3 Рамиль Абдулбяров
</pre>
70 1 Рамиль Абдулбяров
71 3 Рамиль Абдулбяров
h4. Запускаем тестовый pg_upgrade
72
73
<pre>
74 1 Рамиль Абдулбяров
/usr/lib/postgresql/11/bin/pg_upgrade \
75
-b /usr/lib/postgresql/9.6/bin \
76
-B /usr/lib/postgresql/11/bin \
77
-d /var/lib/postgresql/9.6/main \
78
-D /var/lib/postgresql/11/main \
79
-j 4 -k \
80
-o '-c shared_buffers=10MB' \
81
-O '-c shared_buffers=10MB' \
82
-o '-c config_file=/etc/postgresql/9.6/main/postgresql.conf' \
83
-O '-c config_file=/etc/postgresql/11/main/postgresql.conf' \
84
-o '-c huge_pages=off' \
85
-O '-c huge_pages=off' \
86
-c
87 3 Рамиль Абдулбяров
</pre>
88 1 Рамиль Абдулбяров
89 3 Рамиль Абдулбяров
h4. Ошибок также быть не должно.
90
91
h2. Предварительная работа проделана, далее downtime
92
93
h2. Если всё ОК, Начинаем даунтайм проекта
94
95
h4. Выставляем заглушку на сайт
96
97
h4. Останавливаем cron на бекендах
98
99
h4. Останаливаем PG-9.6 (PG-11 уже остановлен)
100
101
<pre>
102 1 Рамиль Абдулбяров
pg_ctlcluster 9.6 main stop
103 3 Рамиль Абдулбяров
</pre>
104
105
h4. Запускаем pg_upgrade в боевом режиме, без -c
106
107
<pre>
108 1 Рамиль Абдулбяров
pg_upgrade делался ~1 мин
109 3 Рамиль Абдулбяров
</pre>
110
111
h4. Ставим новый PG-11 в автозапуск и запускаем
112
113
<pre>
114 1 Рамиль Абдулбяров
vi /etc/postgresql/11/main/start.conf
115
auto
116
systemctl enable postgresql@11-main.service
117
systemctl start postgresql@11-main.service
118 3 Рамиль Абдулбяров
</pre>
119
120
h4. Запускаем VACUUM, делался 5 мин
121
122 1 Рамиль Абдулбяров
./analyze_new_cluster.sh
123 3 Рамиль Абдулбяров
124
h4. Обновляем psql клиенты на бекендах
125 1 Рамиль Абдулбяров
Включаем cron на бекендах
126
Снимаем заглушку с сайта
127
Downtime закончился
128
Выключаем из автозапуска PG-9.6
129
vi /etc/postgresql/9.6/main/start.conf
130
disabled
131
systemctl disable postgresql@9.6-main.service
132
Удаляем PG-9.6
133
134
После обновления на мастере увеличился в 10 раз fork_rate processes
135
136
Из-за того, что параметр max_parallel_workers_per_gather по умолчанию в PG-11 стал = 2(Ранее 0)
137
138
Вернули max_parallel_workers_per_gather = 0