LINUX.ORG.RU

Ubuntu 14.04 + Postgres 9.4 -> Ubuntu 20.04 + Postgres 9.6

 , ,


0

1

Имеется сервер с Ubuntu 14.04 и Postgres 9.4 (поставлена с репозитория http://apt.postgresql.org/pub/repos/apt/dists/). Хочу сделать апгрейд ОС до 20.04 и Postgres до 9.6 (выше пока нельзя, наше приложение не тестировалось с более новыми версиями Postgres).

Как произвести upgrade? Сначала обновить Postgres с 9.4 до 9.6 на Ubuntu 14.04, а далее отключить репозиторий Postgres и обновить ОС с 14.04 до 20.04 через do-release-upgrade? Но ведь тогда бинарники Postgres на 20.04 будут от 14.04, я не уверен, что так сработает.

Или может отключить репозиторий, обновить ОС с 14.04 до 20.04, а далее уже обновить БД на 20.04? Но ведь утилита pg_upgradecluster (которая использует pg_upgrade) всё равно потребует старые бинарники и нет уверенности, что заведётся.

Как вообще корректно обновить Ubuntu с одной версии на другую, имея установленную БД Postgres? На другом сервере установлена Ubuntu 18.04 с Postgres 9.6, я тоже хочу там обновить ОС до 20.04.

Ответ на: комментарий от menangen

Объёмы БД слишком огромные (750 ГБ +), pg_dump\pg_restore будут работать слишком долго, нам не разрешат стопать приложение на более чем три часа.

Если только обновить Postgres с 9.4 на 9.6 на 14.04 и включить потоковую репликацию с новым сервером на 20.04 и с Postgres 9.6. Но тут опять нужно запрашивать место под отдельный сервер с терабайтным диском, для нас это не так просто, к сожалению.

iljuase ★★ ()
Ответ на: комментарий от menangen

Может обновить Postgres 9.4 до 9.6 на Ubuntu 14.04, далее удалить Postgres, но сохранить PG_DATA, далее обновить ОС до 20.04, установить Postgres 9.6 и восстановить PG_DATA, который мы сохранили на 14.04?

iljuase ★★ ()
Последнее исправление: iljuase (всего исправлений: 1)
Ответ на: комментарий от anonymous

Делаем, ночью, но не совсем бекап, а pg_dump. Делается бекап долго, до 8 часов. А восстанавливаться будет ещё дольше. Поэтому остановить приложение -> pg_dump -> pg_restore -> включить приложение не вариант.

iljuase ★★ ()
Последнее исправление: iljuase (всего исправлений: 1)

Обновление системы до следующего релиза - несколько рискованная операция. У вас будет несколько обновлений: 14.04 -> 16.04 -> 18.04 -> 20.04. У меня из десятка таких обновлений была пара ситуаций, когда система после какого-то обновления просто не поднималась, поэтому сделать backup всех данных ОБЯЗАТЕЛЬНО (по-хорошему периодический backup вообще полезно иметь вне зависимости от обновлений).
Делать его можно rsync-ом каталога PGDATA - сначала предварительные синки для копирования основной массы данных, а затем финальный после остановки postgres-а (перед самой процедурой do-release-upgrade).

Версия 9.6 в официальном репозитории доступна в виде пакетов postgresql-9.6* и есть под все LTS дистрибутивы в цепочке обновлений, поэтому можно обновиться до 9.6 сейчас и репозиторий не отключать. Номер версии находится в имени пакета, поэтому на другую версию не перепрыгнет.

spirit ★★★★★ ()

Можешь параллельно поднять инстанс на 20 убунте с репликой текущей базы, потом когда она дольется постараться обновить и в случае успеха переключиться. Для этого единственное что надо это много места. На боевой я бы ничего такого не делал.

redwagon ()
Ответ на: комментарий от spirit

Перед обновлением ОС будет сделан снешот, это виртуалка. Опыт обновления имеется, веб-серверы (приложение на Django) обновились без особых проблем, пришлось только пересоздавать виртуальное окружение.

Версия 9.6 в официальном репозитории доступна в виде пакетов postgresql-9.6* и есть под все LTS дистрибутивы в цепочке обновлений

В репозитории Postgres (http://apt.postgresql.org/pub/repos/apt/dists/) имеете в виду? Там есть, да, но именно в оф. репозитории Ubuntu нет 9.6 (в Ubuntu 20.04, например).

поэтому можно обновиться до 9.6 сейчас и репозиторий не отключать. Сторонние репозитории отключаются автоматически при do-release-upgrade

Но если даже можно было бы не отключать сторонние репозитории, то как это поможет? Если у меня сейчас в 14.04 стоит уже последняя версия Postgres из ветки 9.6, то после обновления до 20.04 у меня бинаркники останутся от 14.04 же. Т.е. придётся переустановить пакет Postgres с сохранением PG_DATA?

iljuase ★★ ()
Ответ на: комментарий от iljuase

Так и сделай! Так как при обновлении единственной бд, в случае неудачи надо закладывать очень много пота, нервов и времени даунтайма. Слишком рисково. При поднятии параллельного инстанса все будет происходить в обычном рабочем порядке, без лишних нервов и сюрпризов.

redwagon ()
Ответ на: комментарий от iljuase

Разве это грабли? Тебе надо было обновляться каждый раз с LTS на LTS, а не ждать, когда данных 800 гигов на одной тачке скопилось. Ты не думал, что стоит присмотреться к кластеру и держать 800 гигов на одной машине, плюс 8 часов восстановление из бекапа - это не нормально?)

menangen ★★★★★ ()

Я бы на твоём месте собрал бы из исходников последнюю актуальнуюю для тебя постгрю (9-ой ветки) на всех этих машинах и не обновлял все эти убунты, а думал сразу о 12-ой версии (летом вышла), уже скоро полгода как в релизе она, смысл тебе рисковать ради старой 10-ой версии… ты думай лучше о кластере, шардинге и прочих архитектурных вещах, 800 гигов пора разделять и дублировать, машины обновлять по очереди в кластере и т.п., а пока самый рабочий вариант и без проблем - это 9-ая ветка…

А вы не пробовали бекап делать на 1TB SSD? Тоже 8 часов или сколько? 🙂

menangen ★★★★★ ()
Ответ на: комментарий от iljuase

Центось ничем не лучше убунты, там софт зачастую ещё более тухлый, и на грабли старого софта наступают только в путь, я в начале года видел хостинг на centos 6, с linux ядром 2-ой версии, это ж древнючий мамонт, на котором даже докер не взлетит, а они его до сих пор крутят 😂 просто от того, что, видимо, лень…

menangen ★★★★★ ()
Последнее исправление: menangen (всего исправлений: 1)
Ответ на: комментарий от iljuase

Но если даже можно было бы не отключать сторонние репозитории, то как это поможет?
Если у меня сейчас в 14.04 стоит уже последняя версия Postgres из ветки 9.6, то после обновления до 20.04 у меня бинаркники останутся от 14.04 же.

Если do-release-upgrade отключает все сторонние репозитории (не помню уже этот момент), то да, postgres сам не обновится. Но тогда на каждом этапе (новом релизе) можно будет вручную включить репозиторий и сделать apt-get upgrade.
А если не отключает, тогда postgres автоматом будет обновляться.

Сделайте тестовую виртуалку с 14.04 и postgres-ом и попробуйте выполнить обновление - увидите что будет на практике.

spirit ★★★★★ ()
Ответ на: комментарий от menangen

У нас отдельный сервер под БД. Кроме самого Postgres там не будет точно ничего и никогда, запихивать Postgres в docker мы точно не будем.

Поэтому под БД мне всё равно, какой будет остальной софт, а актуальную версию Postgres на поддерживаемую Centos поставить всегда можно.

iljuase ★★ ()
Ответ на: комментарий от menangen

Разве это грабли? Тебе надо было обновляться каждый раз с LTS на LTS, а не ждать, когда данных 800 гигов на одной тачке скопилось.

Я в этой компании работаю всего полтора года, предыдущие сотрудники не занимались обновлениями ОС, я же пешил привести всё в порядок

И я не совсем тебя понимаю, если вот сейчас был бы Ubuntu 18.04 и я бы хотел обновить на 20.04, то что бы изменилось? Размер БД не уменьшился бы.

iljuase ★★ ()
Ответ на: комментарий от spirit

Но тогда на каждом этапе (новом релизе) можно будет вручную включить репозиторий и сделать apt-get upgrade.

Не понял этот момент, вот если я условно на Ubuntu 16.04 поставлю последний Postgres 9.6, то разве её весия не будет совпадать с версией Postgres 9.6, которая будет доступна на 18.04? Почему после apt upgrade должно обновиться?

iljuase ★★ ()
Ответ на: комментарий от spirit

Хмм, ты всё же прав.

vodka@ubuntu:~$ apt list --upgradable
Listing... Done
libpq5/bionic-pgdg 13.1-1.pgdg18.04+1 amd64 [upgradable from: 13.1-1.pgdg16.04+1]
postgresql-9.6/bionic-pgdg 9.6.20-1.pgdg18.04+1 amd64 [upgradable from: 9.6.20-1.pgdg16.04+1]
postgresql-client-9.6/bionic-pgdg 9.6.20-1.pgdg18.04+1 amd64 [upgradable from: 9.6.20-1.pgdg16.04+1]
postgresql-client-common/bionic-pgdg,bionic-pgdg 223.pgdg18.04+1 all [upgradable from: 223.pgdg16.04+1]
postgresql-common/bionic-pgdg,bionic-pgdg 223.pgdg18.04+1 all [upgradable from: 223.pgdg16.04+1]
postgresql-contrib-9.6/bionic-pgdg 9.6.20-1.pgdg18.04+1 amd64 [upgradable from: 9.6.20-1.pgdg16.04+1]

iljuase ★★ ()
Ответ на: комментарий от iljuase

Итого, план обновления получился такой:

  1. Останавливаем БД
  2. Делаем снепшот сервера
  3. Обновляем Postgres на Ubuntu 14.04 с 9.4 до 9.6 через pg_clusterupgrade с использованием опций -k (hardlink) и -m upgrade (чтобы обновление шло через утилиту pg_upgrade)
  4. Проверяем работу Postgres 9.6, в случае успеха удаляем старый кластер через pg_dropcluster и удаляем бинарники от 9.4
  5. Обновляем ОС с 14.04 до 16.04
  6. На 16.04 включаем репы postgres и обновляем postgres через apt-upgrade
  7. Обновляем ОС с 16.04 до 18.04
  8. На 18.04 включаем репы postgres и обновляем postgres через apt-upgrade
  9. Обновляем ОС с 18.04 до 20.04
  10. На 20.04 включаем репы postgres и обновляем postgres через apt-upgrade
  11. Делаем analyze по БД

Но думаю, что 6 и 8 пункты можно пропустить, но на виртуалке делал именно так.

iljuase ★★ ()
Последнее исправление: iljuase (всего исправлений: 2)
Ответ на: комментарий от iljuase

А ты не думал воткнуть ещё один новый SSD и на него накатить Ubuntu 20.04 со стоковой новой Postgresql из реп убунты 20.04, и свою базу туда скопировать (на ssd) и запустить новую постгрю с этими копиями бд?

menangen ★★★★★ ()
Ответ на: комментарий от menangen

Нет, вирутальный сервер находится в ЦОД и SSD нам не дадут, это не заложено бюджетом. Там всё завязано на гос. контрактах и гос. закупках, просто так ничего не сделают.

iljuase ★★ ()

Не обновишь если понимаешь что такое фс с символическими папками ссылками и то что ранее было не подходит теперь именно по этой причине. Если хоум отдельно то конечно можно установить заново легко главное потом пересоздать профиль потом все перекинуть с прошлого профиля все фаилы которые нужны пару секунд почему это надо сделать потому что старые настройки могут создать конфликт и какой либо гуй некой программы может начать лагать либо вообще не стартанет по этому лучший выбор это не конфиговый сеттинг , а дконфовый который в течении секунды сделает все то же самое если конечно жтк. ,,.бля с конфигами не нужна иначе трата жизней

anonymous ()
Ответ на: комментарий от iljuase

Рекомендую скрипт postgresql-MAJORVERSION-setup из поставки. Он делает все проверки, запускает pg_upgrade, генерирует скрипты для запуска после обновления. Правда он требует наличия двух установленных версий PostgreSQL.

anonymous ()

Ubuntu 14.04 + Postgres 9.4 -> Ubuntu 20.04 + Postgres 9.6

Лови ссаную тряпку, дурачок.

Разворачивай с нуля и не вздумай динамить апдейты, а если не от тебя это зависит, то выдвигай ценник в 4 раза больше, чтобы они не вздумали динамить апдейты.

Пздц, а не ситуация, имхо. Ты косяков не оберёшься, проще будет текать с города.

anonymous ()