LINUX.ORG.RU

Резервирование docker

 


0

2

Добрый день, товарищи. На боевом сервере, что мне доверили, в docker-контейнерах крутится следующее: postgres, nginx, gitea, certbot, youtrack, registry, portainer и корпоративное приложение на java. Все контейнеры описаны в docker-compose, а все тома именованные. Насколько неправилен следующий алгоритм бэкапа:

  • Останавливаю docker, чтобы не велась запись в тома;
  • Тарболю /var/lib/docker/volumes/ вместе с docker-compose.yaml;
  • Запускаю docker;
  • Заливаю полученный тарбол на резервный сервер. В случае уничтожения основного сервера на резервном распаковываю в /var/lib/docker/volumes тома, запускаю docker-compose up. Насколько описанный способ самодостаточен, охватывает ли он все нюансы? Как я понимаю, вопрос резервирования в докере можно разбить на три части: резервирование образов, резервирование контейнеров и резервирование томов и все это можно делать встроенным средствами docker. Но резервировать образы я не вижу смысла, так как все они есть в docker hub. Смысл резервировать контейнеры тоже не ясен, так как я использую именованные тома и бэкаплю их. Бэкап томов средствами докера выглядит сложнее, чем банальный тарбол.

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

Спасибо за совет. Инструмент выглядит привлекательно. Но вопрос, связанный с докером, остается открытым =)

popov-aa
() автор топика

я так понимаю у тебя нет каких-то важных данных.
т.к. если у тебя сломается продуктив докера за 5 минут до начала бакапа, ты потеряешь все изменения за 23 часа и 55 минут (с условием что бакап идет раз в сутки).

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

Не скажу, что данные совсем не важные, так как их полная потеря будет крайне нежелательна, но 24 часа - приемлемый откат. Останавливать контейнеры чаще не хотелось бы. Делать резервирование контейнеров не останавливая не получится, рискуем получить не консистентное состояние. Какие еще есть варианты?

popov-aa
() автор топика
Ответ на: комментарий от popov-aa

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

Есть скрипт, который запускает в работающем контейнере pg_dump баз данных в директорию, из которых получается backup/{service1.sql,service2.sql,service3.sql}. Эти дампы с помощью Restic заливаются на бекап-сервер.

Ещё для референса проекты: https://github.com/ZettaIO/restic-compose-backup и https://github.com/djmaze/resticker

Вещи ломались, прекрасно таким способом всё восстанавливал.

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

К резервированию баз данных никаких вопросов. Это самая простая часть. Вопросы именно по docker. Помимо постргреса есть файлы youtrack, gitea. Их тоже надо резервировать. Я предложил способ, который описан в посте, но так как опыта работы с docker мало, допускаю что я не учел какие-нибудь нюансы.

popov-aa
() автор топика

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

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

У тебя есть youtrack - у него есть свои средства бекапа и разворачивания из него, смотри на них (делай бекап почаще).

Остальные контейнеры, вроде как не должны иметь состояния, так что там имеем только контейнеры (если не так, то тоже надо рассматривать отдельно софты и думать как их резервировать).

Если продумаешь архитектуру, то немного тулинга и развертывания нового сервера со всеми твоими софтами будет происходить за минуты (как понимаю, тебе это ок).

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

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

popov-aa
() автор топика
Ответ на: комментарий от popov-aa

Всё зависит от того, что именно хранится в томах. Если там данные, которым важна консистентность, то для их копирования тебе надо останавливать приложение (мб есть какие хаки со снапшотами, но это уже хаки), а остановка ради бекапа - это роскошь, которую мало кто может себе позволить.

v9lij ★★★★★
()

postgres, nginx, gitea, certbot, youtrack, registry, portainer и корпоративное приложение на java

все, что нужно знать про деплоймент корпоративных приложений на java.

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

в docker-контейнерах крутится следующее: postgres

Всё, что нужно знать про специалистов по деплойменту в контейнерное окружение

Nastishka ★★★★★
()

Тома бэкапить не надо, надо бэкапить данные приложения средствами приложения (например, для постгреса - либо дамп, либо pg_basebackup). Если у приложения нет средства бэкапа, то прикрепляешь том к другому контейнеру и делаешь бэкап рабочих данных из него (нужно ли останавливать само приложение, реши сам).

Бэкап /var/lib/docker завязывается на неизменную структуру внутренностей докера. Что, если завтра объявят переход на podman? Или на другой драйвер томов?

deadNightTiger ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.