Проект

Общее

Профиль

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

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

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