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 |