Просто позвольте Discourse обработать это. Это требует в 3 раза больше места на диске. Таким образом, если ваша база данных занимает 100 ГБ, вам потребуется дополнительно 200 ГБ свободного места для обновления. Очевидно, это огромная проблема для людей с крупными установками.
Следуйте их процедуре «ручного обновления». Это требует в 2 раза больше места на диске, так что если ваша база данных занимает 100 ГБ, вам потребуется дополнительно 100 ГБ свободного места. Это также является большой проблемой для некоторых.
В этом сообщении@Falco предложил использовать опцию --link для выполнения обновления на месте с помощью жестких ссылок. Docker-контейнер, который он рекомендует, поддерживает этот аргумент, но разработчики Discourse не рекомендуют его использовать в этом сообщении.
Таким образом, мой вопрос заключается в следующем: должен ли вариант 3 быть таким:
Запустите команду ниже, которая потребует очень небольшого дополнительного места на диске. Так что если ваша база данных занимает 100 ГБ, ей может потребоваться, скажем, дополнительно 10 ГБ? И если да, то является ли это рекомендуемой процедурой со стороны разработчиков Discourse, и пробовал ли кто-нибудь это сделать раньше и остался жив, чтобы рассказать об этом?
Новая команда для обновления на месте:
docker run --rm \
-v DIR:/var/discourse/shared/standalone/postgres_data:/var/lib/postgresql \
tianon/postgres-upgrade:12-to-13 \
--link
По сравнению со старой командой для обновления в новую директорию (требующей двойного объема места):
P.S.: Я хотел бы просто ответить в той теме про обновление до PG13, но сообщения там удаляются через 7 дней. Почему у вас так настроено? Я знаю, что тогда было много обсуждений, которые были бы полезны для справки.
Если они это делали, то не упоминали об этом здесь. В основном инструкции здесь стараются быть максимально простыми и не требовать знаний системного администрирования. Большинство людей здесь предпочтут сделать что-то самым безопасным и проверенным способом, чем способом, призванным сэкономить совсем немного денег.
Если у вас это сработает, вы можете обновить обновление PostgreSQL 13 соответствующим образом, но прежде чем вы это сделаете, чувствуете ли вы себя комфортно, рекомендуя это кому-то, кто не знает, что такое bash? Вы уверены, что это не уничтожит их базу данных и не погубит их сайт навсегда?
Идея в том, что если появится какая-то другая полезная информация, её следует добавить в первое сообщение (OP), а не заставлять людей читать годовой архив постов, которые, скорее всего, будут бесполезны или неверны.
Нет, я не уверен. У меня не так много опыта работы с PostgreSQL, и я надеялся, что кто-то из разработчиков Discourse сможет подтвердить, что это сработает.
Даже если это действительно сработает, я бы не рекомендовал использовать этот метод как процедуру обновления по умолчанию, поскольку старый способ сохраняет отдельную копию базы данных для отката изменений. Однако, если это работает, такой вариант был бы отличным решением для сред с ограниченным пространством.
Ещё один простой способ — запустить новый сервер, перенести данные и отключить старый. Если необходимо использовать старый сервер, выполните обновление на временном сервере, затем сделайте чистую установку на исходном сервере (которому, вероятно, потребуется обновление ОС) и перенесите данные обратно.
Это безопасно, просто и хорошо задокументировано. Сотни людей уже проделали это.
Да, но это займёт день или два. За это время мы могли бы либо а) сообщить пользователям, что их сообщения за этот период будут утеряны, либо б) сделать форум доступным только для чтения. Ни один из этих вариантов не является идеальным решением.
Я не думаю, что сервер будет недоступен намного дольше, чем во время восстановления. И если вы перейдете на новый сервер и останетесь там, вы можете оставить старый сервер в режиме только для чтения, пока выполняете перенос. Если вас беспокоит время простоя, то переход на новый сервер будет намного, намного лучше.
У нас довольно крупный форум, но я никогда не пробовал восстанавливать резервную копию, поэтому не знаю, сколько времени это займёт. Если бы мы это сделали, то остались бы на новом хостинге. Я бы хотел избежать этого, если возможно, из-за лишних усилий и неудобств.
Другой способ решения проблемы с нехваткой места при обновлении — создать резервную копию, удалить каталог postgres командой rm -r, выполнить пересборку, а затем восстановить резервную копию. Я делал это на одном сайте на прошлой неделе.
Нет, мы так и не обновили его. Удаление базы данных и восстановление из резервной копии кажется довольно рискованным. Нам нужно, чтобы обновление работало на месте.
Мы используем Ubuntu 18.04, поддержка которой заканчивается в 2023 году, поэтому я предполагаю, что к тому времени у нас не останется выбора, кроме как мигрировать на новый хост. Планируем тогда решить эту проблему: развернуть новый хост на базе Ubuntu 22.04 LTS и восстановить данные из резервной копии.
Хм. Возможно, разница будет незаметна. Я думаю, что в модели с резервным копированием одна из копий сжата, что может иметь значение? И сайт, на котором я это делал, использовал резервные копии в S3. Это был тестовый сайт, поэтому риски были минимальными в случае проблем.
Однако резервные копии используются гораздо чаще и в гораздо большем количестве ситуаций, чем обновление на месте. Я считаю, что это гораздо безопаснее.
Возможно, но у меня нет глубоких знаний в области PostgreSQL, и я не чувствую себя уверенно, делая это. Восстановление всего сайта из резервной копии на совершенно другой виртуальной машине — это я могу сделать уверенно, однако это означает потерю постов за то время, которое потребуется для восстановления, поэтому я тоже не особо в восторге от этого варианта. Но поскольку поддержка 18.04 прекращается, в следующем году у меня не останется большого выбора.
Если ваша база данных не занимает десятки гигабайт, это не займёт часов. Кроме того, перед резервным копированием и восстановлением вы переведёте форум в режим только для чтения, так что вы не потеряете ни одного поста. Это не так уж сложно сделать с практически нулевым временем простоя — только время в режиме только для чтения.
root@forum-app:/shared/postgres_data# du -sh
97G .
Я бы не стал делать его доступным только для чтения. Лучше вывести баннер, предупреждающий пользователей, что их сегодняшние посты носят временный характер. На мой взгляд, лучше позволить им обсуждать это, даже если эти посты будут потеряны.
К тому времени у вас также будет доступ к встроенному чату Discourse — эта функция выйдет в версии 2.9 (возможно, по умолчанию отключена, но находится в бета-версии и поддерживается для использования).