Как можно непрерывно / постепенно создавать резервные копии пулов zfs вне офиса?
Я признаю, что send/receive
over ssh - это один из методов, который включает в себя необходимость управлять моментальными снимками вручную.
Я нашел некоторые инструменты, но большинство из них больше не поддерживаются.
Один инструмент, который выглядит многообещающим, это https://github.com/jimsalterjrs/sanoid, однако меня беспокоит то, что малоизвестный инструмент может принести больше вреда, чем пользы, поскольку он может повредить / удалить данные.
Как выполняются непрерывные / инкрементные резервные копии zfs?
Ответы:
ZFS - невероятная файловая система, которая решает многие из моих локальных и общих потребностей хранения данных.
Хотя мне нравится идея кластеризованной ZFS везде, где это возможно, иногда она не практична, или мне нужно географическое разделение узлов хранения.
Один из вариантов использования, который у меня есть, - высокопроизводительное реплицированное хранилище на серверах приложений Linux. Например, я поддерживаю устаревший программный продукт, который использует SSD-диски с низкой задержкой для своих данных. В приложении есть опция зеркального отображения на уровне приложения, которая может реплицироваться на вторичный сервер, но зачастую она неточна и представляет собой 10-минутный RPO .
Я решил эту проблему, имея дополнительный сервер (также работающий с ZFS на аналогичном или отличающемся оборудовании), который может быть локальным, удаленным или и тем, и другим. Объединив три утилиты, подробно описанные ниже, я создал решение для репликации, которое дает мне непрерывную репликацию, глубокое сохранение моментальных снимков и гибкие опции отработки отказа.
zfs-auto-snapshot - https://github.com/zfsonlinux/zfs-auto-snapshot
Просто удобный инструмент для периодических снимков уровня файловой системы ZFS. Я обычно работаю со следующим графиком по объемам производства:
Синкоид (Саноид) - https://github.com/jimsalterjrs/sanoid
Эта программа может запускать произвольную привязку / репликацию файловой системы ZFS к вторичной цели. Я использую только синкоидную часть продукта.
Предполагая, что server1 и server2 , простая команда запускается с server2 для извлечения данных с server1 :
Monit - https://mmonit.com/monit/
Monit - чрезвычайно гибкий планировщик заданий и менеджер исполнения. По умолчанию он работает с 30-секундным интервалом, но я изменяю конфигурацию, чтобы использовать 15-секундный базовый временной цикл.
Пример конфигурации, которая запускает указанный выше сценарий репликации каждые 15 секунд (1 цикл)
Это просто автоматизировать и добавить с помощью управления конфигурацией. Оборачивая выполнение снимка / репликации в Monit, вы получаете централизованный статус, управление заданиями и оповещения (электронная почта, SNMP, пользовательский сценарий).
Результатом является то, что у меня есть серверы, которые имеют несколько месяцев ежемесячных снимков и много точек отката и хранения в пределах: https://pastebin.com/zuNzgi0G - плюс непрерывная непрерывная 15-секундная атомная реплика:
# monit status
источник
У вас есть два разных способа сделать это:
rsync
илиBacula
. Там вы протестировали и (мы надеемся) стабильное, большое программное обеспечение, которое можно настроить для масштабных развертываний и использовать его, даже если вы переключаетесь с ZFSsend/recv
. Это может быть либо ваше собственное решение, либо сценарий, либо расширенный сценарий из различных приложений Github et al., Либо более многофункциональные инструменты, такие как Sanoid или ZnapZend (send / recv с поддержкой mbuffer и планами хранения). В этом случае вы, скорее всего, не найдете больших «корпоративных» (в негативном смысле) решений, но инструменты, которые выполняют только одну задачу и могут быть объединены с другими инструментами для удовлетворения ваших конкретных настроек.В общем, я бы доверял только инструменту, исходный код которого доступен, и старался бы сделать его максимально простым. При использовании
send/recv
вам не нужно много управлять, вам просто нужно удалить снимок n-1 на локальной стороне, когда передача и создание снимка n на удаленной стороне были успешными.Вы можете разделить ваш транспорт любым удобным вам способом, он может быть даже асинхронным (моментальные снимки не должны быть получены немедленно), если вы просто соблюдаете железное правило, согласно которому вы можете отправлять только разницу между локальным текущим / новым и локальным предыдущим снимком и что локальный предыдущий моментальный снимок является самым последним на удаленной стороне (до тех пор, пока резервное копирование не завершится и все не будет сброшено).
Теперь, когда я думаю об этом, вы, вероятно, могли бы закодировать это в конечном автомате, а затем быть уверенным, что никакие непредвиденные случаи не могут ускользнуть.
источник
rsync
масштабируемое решение будет масштабироваться для непрерывной репликации большой файловой системы масштаба предприятия. Изменения могут произойти быстрее, чемrsync
их обнаружить.