Проект

Общее

Профиль

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

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

1 1 Рамиль Абдулбяров
h1. Pg-upgrade
2
3
Обновление минорной версии, сначала на SLAVE, потом на MASTER
4
yum check-update
5
1
6
2
7
3
8
4
9
postgres=# checkpoint ;
10
CHECKPOINT
11
postgres=# checkpoint ;
12
CHECKPOINT
13
yum upgrade postgresql96-server postgresql96
14
15
Обновление мажорной версии.
16
Делаем на MASTER
17
SLAVE будет резервом, его рекомендуют обновлять через несколько дней
18
Отключаем автостарт postgres (в centos этого нет)
19
vi /etc/postgresql/9.6/main/start.conf
20
disabled
21
Подключаем репозиторий для pg-11
22
yum -y install https://download.postgresql.org/pub/repos/yum/11/redhat/rhel-7-x86_64/pgdg-redhat11-11-2.noarch.rpm
23
Устанавливаем PG-11
24
yum check-update
25
yum install postgresql11-server postgresql11
26
Инициализируем новый кластер (На боевом кодировка другая)
27
/usr/pgsql-11/bin/initdb -D /var/lib/pgsql/11/data/ --encoding=SQL_ASCII --lc-collate=C --lc-ctype=C
28
Мёрджим конфиги postgresql.conf и pg_hba.conf (готовые скопировать надо куда-то, т.к. будем чистить хранилище кластера)
29
diff -u /var/lib/pgsql/9.6/data/postgresql.conf /var/lib/pgsql/11/data/postgresql.conf
30
diff -u /var/lib/pgsql/9.6/data/pg_hba.conf /var/lib/pgsql/11/data/pg_hba.conf
31
Меняем PORT у PG-11
32
 /var/lib/pgsql/11/data/postgresql.conf
33
1
34
2
35
- port = 5432
36
+ port = 5433
37
38
Запуск кластера PG-11
39
/usr/pgsql-11/bin/pg_ctl -D /var/lib/pgsql/11/data/ -l logfile start
40
Проверяем, что схемы PG-9.6 и PG-11 совместимы
41
/usr/pgsql-9.6/bin/pg_dumpall -s -f pg_dumpall.dump
42
/usr/pgsql-11/bin/psql -p 5433 -f pg_dumpall.dump > restore-scheme.log
43
Убеждаемся что ошибок нет после восстановления
44
Останавливаем PG-11, чистим кластер и заново инициализируем
45
/usr/pgsql-11/bin/pg_ctl -D /var/lib/pgsql/11/data/ -l postgres-11.log stop
46
rm -rf /var/lib/pgsql/11/data/
47
Запускаем тестовый pg_upgrade
48
1
49
2
50
3
51
4
52
5
53
6
54
7
55
8
56
9
57
10
58
11
59
12
60
13
61
/usr/pgsql-11/bin/pg_upgrade \
62
-b /usr/pgsql-9.6/bin \
63
-B /usr/pgsql-11/bin \
64
-d /var/lib/pgsql/9.6/data \
65
-D /var/lib/pgsql/11/data/ \
66
-j 4 -k \
67
-o '-c shared_buffers=10MB' \
68
-O '-c shared_buffers=10MB' \
69
-o '-c config_file=/var/lib/pgsql/9.6/data/postgresql.conf' \
70
-O '-c config_file=/var/lib/pgsql/11/data/postgresql.conf' \
71
-o '-c huge_pages=off' \
72
-O '-c huge_pages=off' \
73
-c
74
75
Ошибок также быть не должно.
76
Предварительная работа проделана, далее downtime
77
 
78
79
Если всё ОК, Начинаем даунтайм проекта
80
Выставляем заглушку на сайт
81
Останавливаем cron на бекендах
82
Останаливаем PG-9.6 (PG-11 уже остановлен)
83
/usr/pgsql-9.6/bin/pg_ctl -D /var/lib/pgsql/9.6/data/ -l logfile stop
84
Запускаем pg_upgrade в боевом режиме, без -c
85
pg_upgrade делался ~1 мин
86
Ставим новый PG-11 в автозапуск и запускаем
87
vi /etc/postgresql/9.6/main/start.conf
88
auto
89
systemctl enable postgresql-11.service
90
systemctl start postgresql-11.service
91
Запускаем VACUUM, делался 5 мин
92
./analyze_new_cluster.sh
93
Включаем cron на бекендах
94
Снимаем заглушку с сайта
95
96
97
Downtime закончился
98
Выключаем из автозапуска PG-9.6
99
vi /etc/postgresql/9.6/main/start.conf
100
disabled
101
systemctl disable postgresql-11.service
102
Удаляем PG-9.6
103
104
По итогу даунтайм на тестовом длился ~7 мин.
105
*pg_upgrade ~ 1 мин
106
*vacuum 5 мин
107
Учитывая, что на ней 2 тестовые базы: prunto и prunto2
108
Тестовая СУБД 20 Gb
109
Боевая СУБД 36 Gb
110
 
111
112
SLAVE рекомендуют обновлять по прошествии нескольких дней, когда точно убедимся, что приложение работает как надо на PG-11