Расскажу кратенько, как я стараюсь делать бэкапы сервисов на конкретном примере. Это не... — 18 августа 2026 г. в 06:11:02.293
Расскажу кратенько, как я стараюсь делать бэкапы сервисов на конкретном примере. Это не значит, что я всегда делаю именно так, но этот пример взял с работающего сервера. Речь пойдёт не о хранении и проверки бэкапов, а о подходе к их снятию. Для примера возьму Rocket.Chat. Он запущен в Docker в виртуальной машине и состоит из двух контейнеров: ▪️сам сервис rocket.chat, из полезного в нём файлы пользователей в директории upload; ▪️СУБД MongoDB, где хранится всё состояние сервера с перепиской пользователей. Бэкапы делаю трёх видов: 1️⃣ Бэкап целиком виртуальной машины. Он состоит в основном из инкрементов, снимается быстро, регулярно разворачивается в автоматическом режиме и проверяется. Если что-то случится с сервером, самой системой в VM, то первое, что я сделаю - восстановлю бэкап виртуальной машины. Это самый простой и быстрый вариант. Не требуется ничего вспоминать, дополнительно настраивать и т.д. Эта виртуальная машина небольшая, поэтому каких-то нюансов и проблем с ним нет. 2️⃣ Бэкап на уровне docker volume. Использую, кстати, вот эту штуку - docker-volume-backup. Делаю им бэкап вольюма с MongoDB. Это не полноценный бэкап, потому что бэкапить так СУБД нельзя, она часть данных хранит в памяти, бэкап с некоторой долей вероятности может быть неконсистентным. Если СУБД не сильно нагружена по записи, то чаще всего всё ОК. Но как единственный вариант бэкапа это категорически не подходит, хотя регулярно вижу, как некоторые люди бэкапят так базы на постоянке. Обычно это те, кто не особо во всём этом разбирается - некоторые разработчики или просто случайные люди. 3️⃣ Делаю дамп базы данных средствами самой монги и забираю его как обычный файл, вместе с файлами директории upload из соседнего контейнера с рокетом. С таким подходом ты прикрыт со всех сторон. На первый взгляд кажется, что как-то это избыточно. Можно обойтись бэкапом только VM. Если у тебя хороший инструмент, всё проверяется, восстанавливается, инфраструктура большая, то наверное одних VM достаточно. Я в основном работаю с небольшими инфраструктурами с десятком сервисов. Мне не трудно аккуратно каждый из них забэкапить вручную. Точнее настроить один раз, а потом всё это годами работает. Здесь я страхуюсь от проблем, в том числе накопившихся со временем, виртуальных машин и ОС на них. Бывают ситуации, что у тебя какие-то проблемы, ты восстанавливаешь бэкап месячной давности, а там по какой-то причине эта проблема уже есть из-за вируса или каких-то ещё проблем. Это редкие проблемы, но они бывают. Если виртуалка очень большая, а бэкап приходится по какой-то причине тянуть по интернету, то это может оказаться очень долго, или вообще невозможно из-за постоянных обрывов связи. Ну и отдельная история, когда твой сервис бэкапов по какой-то причине ложится и быстро добраться до бэкапов не получается. Или не быстро, а вообще не получается, потому что он полностью умер или его убили. В таком случае тебя выручает бэкап на уровне файлов. Ты просто берёшь дамп базы и остальные файлы, разворачиваешь всё это на новой VM с запущенным чистым сервисом. А бэкап всех файлов самой СУБД иногда помогает посмотреть на какие-то данные помимо непосредственно базы - журналы, конфиги, сертификаты и т.д. Для подстраховки не помешает. Это актуально не только для монги, а в том числе для mysql/postgresql. Когда вот так всё настроено, замониторено и проверяется, я чувствую себя спокойно и комфортно. Хоть какой-то бэкап да окажется рабочим. Главное, чтобы это всё не лежало в одном месте. #backup

