Комментарии 23
В этой статье мы сделали, скорее, обзор различных подходов к резервному копированию. Постарались осветить плюсы и минусы каждого из них.
Создание бэкапов и их восстановление, как нам кажется, хорошая тема для отдельной статьи. Если вы с нами согласны, дайте знать :) Соберем материал и поделимся подробностями в следующей статье.
Мы считаем, что тема про восстановление достойна отдельной статьи. В ней бы начали с выбора протокола сетевого доступа к файловым системам, далее рассказали про способ защиты пользовательских данных при подключении и копировании и закончили системой снятия дампов mysql.
И ещё по поводу бекапов мне в приниципе интересно, как народ решает вопрос о объеме дисковой системы для бекапов: для каждого условного 1Тб данных, сколько Тб дискового пространства вы резервируете на бекап-сервере?
А требования к оперативной памяти разных ФС сравнивали? Про ZFS говорят, что ей нужно много ОЗУ — у вас такое было?
Размер потребляемой ОЗУ на ARK кэш задается в параметрах модуля zfs_arc_max. В нашем случае он вычислялся эмпирически, чтобы не мешать работе основных сервисов, но при этом давать файловую производительность.
И ещё по поводу бекапов мне в приниципе интересно, как народ решает вопрос о объеме дисковой системы для бекапов: для каждого условного 1Тб данных, сколько Тб дискового пространства вы резервируете на бекап-сервере?
Тут все очень индивидуально, так как размер снапшота в ZFS зависит от размера добавленных данных. У нас это 1 к 2 для хранения сроком в 30 дней. То есть на 1 терабайт данных приходится 2 терабайта на бэкап-сервере.
А почему не завести NAS с множеством zfs пулов и не делать zfs send | ssh backup@nas zfs recv, выбирая пул на NAS по каким-то признакам, например по группе серверов или имени кластера, если их несколько. И потом слать инкрементальные копии между 2-я snapshot-ами: старым (который уже отправлен) и новым (выполненным сейчас) через тот же send/recv. Для целей автоматизации старый, после передачи, можно грохнуть а новый переименовать в старый…
И ZFS у вас на Linux?
А почему не завести NAS с множеством zfs пулов и не делать zfs send | ssh backup@nas zfs recv, выбирая пул на NAS по каким-то признакам, например по группе серверов или имени кластера, если их несколько. И потом слать инкрементальные копии между 2-я snapshot-ами: старым (который уже отправлен) и новым (выполненным сейчас) через тот же send/recv. Для целей автоматизации старый, после передачи, можно грохнуть а новый переименовать в старый…
Вы правы, это основная схема работы системы резервного копирования. Поскольку статей на эту тему достаточно много, как и обзоров крутых инструментов для автоматизации типа ZREPL, мы решили осветить немного другую сторону вопроса.
И ZFS у вас на Linux?
Да, на Linux.
В случае ZFS немногим экономнее: одна копия + изменённые блоки. Хранить вообще только изменения не выйдет и тут.
К тому же, не всегда требуется копировать(да и считывать) всю файловую систему, часто достаточно работать только с данными какого-нибудь приложения, и тут rsync может быть уже намного выгоднее, и по скорости, и по объёму.
Довольно много работаю и с rsynс и с zfs. Если коротко, то rsync имеет пожалуй только 1 профит, что он более переносимый. Но если у вас *nix, то проблем нет. Впрочем, через сетевые диски все прелести zfs доступны и для win.
У zfs много плюшек, перечислять нет смысла, даже на хабре не одна статья была. В мире бесплатных инструментов я не знаю альтернатив. А за большие деньги — Netapp, и Co, там тоже всё есть, но это совсем другой уровень....
У XFS с новыми ядрами доступна еще такая штука, как reflink-и. Позволяют быстро создавать копии директорий/файлов, без копирования блоков данных. Новые блоки выделяются только при изменении. Т.е некий такой симбиоз хардлинков и снапшотов, если можно так сказать.
Около года пользую этот механизм на одном из бэкап серверов и что-то всё больше склоняюсь таки к zfs. В реальности reflink-копирование выполняется далеко не мгновенно, иногда минуты (на нескольких сотнях гб данных). Плюс невозможность оценить реально доступное свободное место, из-за чего вроде бы 85% заполнения, а уже иногда (!) начинаются ошибки no free space on device :(
Но для не очень крупных бэкапов/горячих копий может для кого-то будет интересной альтернативой.
вот пример: сделал ddrescue для 1тб диска, сохранял образ сразу на fs которая поддерживает reflink — btrfs, дальше делаю cp --reflink=always и работаю с копией файла, если надо check disk и всё вот это.
мне в такой ситуации не нужен снапшот диска, но «снапшот» файла — то что доктор прописал.
и делается по времени на btrfs это вроде как достаточно быстро.
Рабочие и резервные LVM группы отличаются и расположены на различных RAID группах. Если интересны подробности, у меня статья про «LVM и Матрешки» в профиле.
Что именно у Вас копируется по SCP? Данные из конкретного снапшота, создаваемого на ноде виртуального хостинга? Клиентские приложеньки работают на ФС ZFS и там же создаются снапшоты?
Как работает восстановление клиентов в случае сбоя — берётся последний снапшот и наливается на новый/резервный сервер или есть какая-то другая логика?
Попробуем ответить подробно на ваш комментарий.
Есть два вида серверов: клиентский и бэкапный. Файловая система, на которых находятся клиентские данные, — ZFS.
На клиентском сервере работают клиентские приложения. На бэкапном сервере хранятся бэкапы.
Снапшоты делаются на клиентском сервере и копируются на бэкапный сервер.
Схема бэкапа достаточно проста:
1. На клиентском сервере есть снапшот 1.
2. Перед копированием создается снапшот 2.
3. Снапшот 1 копируется / импортируется на бэкапный сервер. Для этого могут использоваться разные средства: ssh, scp, netcat и др. В нашем случае используется приложение, построенное на базе ssh.
4. По окончании успешного копирования снапшот 1 мержится / удаляется с основными данными, его место занимает снапшот 2.
5. При бэкапе переходим к пункту 1.
Восстановление отдельных файлов или директорий работает через копирование данных с сервера бэкапов из снапшота на клиентский сервер.
Восстановление целого сервера возможно из последнего снапшота, но по времени быстрее переставить диски в новую платформу.
Выход дисков из строя отслеживается. Все данные обязательно зеркалируются на разные диски.
Все ли понятно объясняли? На все ли вопросы ответили?
Почему Hetzner умеет делать бэкапы и снапшоты VPS без qemu-agent и прочего обвеса, а вы нет?
Вот бы ещё на таймвебе сайтики которые посещает только мониторинг агент периодически не уходили в даун, цены бы не было вашему zfs с бекапами.
В разы быстрее rsync, шлет и хранит только изменения.
Да и rsync тоже шлёт, и может хранить только изменённые файлы с помощью хардлинков.
К тому же, не так уж правильно сравнивать отдельно инструмент для синхронизации и более законченное решение именно для резервного копирования. Скорее тогда с rsnapshot надо сравнивать его и подобными вещами.
С btrfs видел еще такой метод бекапов/восстановления: делается снимок, который можно как передавать, так и принимать по сети: https://btrfs.wiki.kernel.org/index.php/Incremental_Backup#Incremental_Operation
На место pipeline идеально встает например ssh, или другие инструменты с обменом через pipeline - стеки можно собирать какие угодно, буквально на коленке.
Таков путь! Эволюция бэкапов в Timeweb: от rsync до ZFS