Хватит ли ежедневных резервных копий?

Я немного «параноик» в плане потери любых данных. Ежедневные резервные копии всегда вызывают у меня ощущение, что с сервером может что-то случиться, и внезапно пропадёт целый день данных, которые могут быть чрезвычайно важны.

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

Если это невозможно в Discourse, не было бы ли более безопасным делать резервные копии каждый час? Я не вижу такой опции. Похоже, можно выбрать только 1 (ежедневно) или 0 (отключено).

Как вы с этим справляетесь?

Хороший VPS на хорошей платформе крайне маловероятно будет иметь какие-либо проблемы, особенно в период между обновлениями.

За почти 8 лет работы одного из моих форумов у меня не было ни одной потери данных.

Ежедневная пакетная обработка разработана как компромисс для большинства тех, кто занимается самостоятельным размещением.

Это относительно простая система и процесс, которые не требуют много места и вычислительных ресурсов.

Я не могу представить, чтобы для большинства людей имело смысл делать это чаще.

Мне никогда не приходилось использовать резервные копии для восстановления после сбоев в сети; я использую их только для миграции на новые серверы, когда это необходимо (потому что я перерос предыдущий, меньший!)

Ваши результаты могут отличаться.

Однако, если вы считаете, что вам нужна более частая настройка… будьте готовы к кастомизации вашей системы и к тому, чтобы поддерживать эту кастомизацию (что потребует изучения того, как это делать, и/или найма специалиста для помощи).

Резервное копирование и репликация — это две разные вещи.

Резервное копирование создаёт снимок данных на определённый момент времени. Оно предоставляет точку восстановления.

Репликация означает распределение каждого действия на другую систему, чтобы данные хранились более чем в одном месте. Удаления также реплицируются.

Если вы действительно хотите обеспечить отказоустойчивость, вам нужны оба механизма (и даже больше…)

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

Discourse использует два механизма для хранения данных:

  1. База данных PostgreSQL для всего, кроме вложенных файлов
  2. Вложенные файлы хранятся на локальной системе или в S3

Для резервного копирования и/или репликации данных, хранящихся в базе данных PostgreSQL, обратитесь к документации PostgreSQL: о резервном копировании и о репликации.

Работа с вложенными файлами немного сложнее. Если вы храните их в S3, можно использовать резервное копирование S3. Для локально хранимых файлов можно использовать различные варианты локальных систем.

Создание полных резервных копий — задача ресурсоёмкая, особенно при большом объёме данных, поэтому делать это чаще не всегда удобно. Стандартная процедура резервного копирования в Discourse предполагает создание полных копий. Если вы действительно хотите снизить риск потери данных, стоит рассмотреть другие варианты.

Один из возможных вариантов может быть предоставлен вашим хостинг-провайдером: снимки томов (volume snapshots). Это позволяет создать «мгновенную» копию данных, хранящихся на томе, и восстановить том на тот момент времени. Снимки томов также могут быть доступны на уровне ОС в зависимости от используемой файловой системы (например, btrfs поддерживает эту функцию).

Кроме того, документация PostgreSQL описывает создание более непрерывных резервных копий базы данных, что обеспечивает отличное восстановление на определённый момент времени (не забудьте отправлять резервные копии в другое место). Это значительно быстрее, чем полное резервное копирование.

Для более детального резервного копирования вложений можно использовать различные инструменты, поддерживающие управление полными и дифференциальными резервными копиями. Например, duplicity. Также можно использовать rsync (без удаления). Между снимками всё ещё возможна потеря файлов. Использование S3 без удаления будет безопаснее, так как файлы уже хранятся на другой системе.

В заключение: стандартный механизм резервного копирования Discourse не подходит для частого графика резервного копирования. Если вам нужно больше резервных копий, используйте комбинацию стандартных функций резервного копирования/репликации PostgreSQL, S3, снимков томов и т. д.

На моём сайте я не использую систему резервного копирования Discourse для регулярных резервных копий. У меня всё ещё есть ежедневные резервные копии, но я использую комбинацию pg_dump и конфигураций duplicity (координируемых через backupninja).

Я делаю резервную копию базы данных каждые 4 часа. Это тот промежуток времени, с возможной потерей постов которого я могу мириться. Для сравнения: мой интернет-магазин делает резервные копии каждые 5 минут.

Один раз в день — недостаточно. Потеря тем/постов за максимум 24 часа — это слишком много.

Речь идет о том, сколько контента вы можете потерять: на тихом форуме резервное копирование раз в несколько дней не составит проблемы, а на очень активном форуме даже потеря часа может показаться значительной. Однако нужно учитывать вероятность сбоя: если бы вы теряли час постов раз в год, было бы это очень беспокоящим? А раз в десять лет? У каждого из нас своё представление о риске.

Ещё большие потери, чем потерянные посты, могут составить все новые аккаунты, созданные в течение 24 часов.

Особенно если Discourse используется как провайдер единого входа (SSO) для ваших других приложений или других интеграций.

Я не думаю, что ответ «0 за сутки» верен:

Значение 0 отключает резервное копирование. Эта настройка определяет только количество дней между резервными копиями.

Кастомное частое резервное копирование БД от @Jagster звучит как более подходящее решение, если ежедневного недостаточно.

Да, я просто хотел подчеркнуть, насколько опасно ошибаются ИИ в своих предложениях людям.

Представьте, если кто-то увидит это и внедрит, потому что ему сказали именно так? :confused:

Похоже, источник взят с Staging/Test server ignored the environment variable - #2 by RGJ. Обновлю пост, чтобы сделать его понятнее.