Как выполнить инкрементное / непрерывное резервное копирование пула zfs?

Как можно непрерывно / постепенно создавать резервные копии пулов zfs вне офиса?

Я узнаю send/receive over ssh - это один из методов, который включает ручное управление снимками.

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

Один инструмент, который выглядит многообещающим, это https://github.com/jimsalterjrs/sanoid однако меня беспокоит то, что малоизвестный инструмент может принести больше вреда, чем пользы, поскольку он может повредить / удалить данные.

Как выполняются непрерывные / инкрементные резервные копии zfs?

3 ответа

Решение

ZFS - невероятная файловая система, которая решает многие из моих локальных и общих потребностей хранения данных.

Хотя мне нравится идея кластеризованной ZFS везде, где это возможно, иногда она не практична, или мне нужно географическое разделение узлов хранения.

Один из вариантов использования, который у меня есть, - высокопроизводительное реплицированное хранилище на серверах приложений Linux. Например, я поддерживаю устаревший программный продукт, который использует SSD-диски с низкой задержкой для своих данных. В приложении есть опция зеркального отображения на уровне приложения, которая может реплицироваться на вторичный сервер, но зачастую она неточна и представляет собой 10-минутный RPO.

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

zfs-auto-snapshot - https://github.com/zfsonlinux/zfs-auto-snapshot

Просто удобный инструмент для периодических снимков уровня файловой системы ZFS. Я обычно работаю со следующим графиком по объемам производства:

# /etc/cron.d/zfs-auto-snapshot

PATH="/usr/bin:/bin:/usr/sbin:/sbin"

*/5 * * * * root /sbin/zfs-auto-snapshot -q -g --label=frequent --keep=24 //
00 * * * * root /sbin/zfs-auto-snapshot -q -g --label=hourly --keep=24 //
59 23 * * * root /sbin/zfs-auto-snapshot -q -g --label=daily --keep=14 //
59 23 * * 0 root /sbin/zfs-auto-snapshot -q -g --label=weekly --keep=4 //
00 00 1 * * root /sbin/zfs-auto-snapshot -q -g --label=monthly --keep=4 //

Синкоид (Саноид) - https://github.com/jimsalterjrs/sanoid

Эта программа может запускать произвольную привязку / репликацию файловой системы ZFS к вторичной цели. Я использую только синкоидную часть продукта.

Предполагая, что server1 и server2, простая команда запускается с server2 для извлечения данных с server1:

#!/bin/bash

/usr/local/bin/syncoid root@server1:vol1/data vol2/data

exit $?

Monit - https://mmonit.com/monit/

Monit - чрезвычайно гибкий планировщик заданий и менеджер исполнения. По умолчанию он работает с 30-секундным интервалом, но я изменяю конфигурацию, чтобы использовать 15-секундный базовый временной цикл.

Пример конфигурации, которая запускает указанный выше сценарий репликации каждые 15 секунд (1 цикл)

check program storagesync with path /usr/local/bin/run_storagesync.sh
        every 1 cycles
        if status != 0 then alert

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


В результате у меня есть серверы, которые имеют несколько месяцев ежемесячных снимков и много точек отката и хранения в пределах: https://pastebin.com/zuNzgi0G - плюс непрерывная непрерывная 15-секундная атомная реплика:

# monit status

Program 'storagesync'
  status                            Status ok
  monitoring status                 Monitored
  last started                      Wed, 05 Apr 2017 05:37:59
  last exit value                   0
  data collected                    Wed, 05 Apr 2017 05:37:59
.
.
.
Program 'storagesync'
  status                            Status ok
  monitoring status                 Monitored
  last started                      Wed, 05 Apr 2017 05:38:59
  last exit value                   0
  data collected                    Wed, 05 Apr 2017 05:38:59

У вас есть два разных способа сделать это:

  1. Традиционный, независимый от файловой системы способ, который / использовался в течение последних десятилетий, с такими инструментами, как rsync или же Bacula, Там вы протестировали и (мы надеемся) стабильное, большое программное обеспечение, которое можно настроить для масштабных развертываний и использовать его, даже если вы переключаетесь с ZFS
  2. Один из инструментов, которые используют ZFS send/recv, Это может быть либо ваше собственное решение, либо скрипт, либо расширенный скрипт из различных приложений Github и др., Либо более многофункциональные инструменты, такие как Sanoid или ZnapZend (send / recv с поддержкой mbuffer и планами хранения). В этом случае вы, скорее всего, не найдете больших "корпоративных" (в негативном смысле) решений, но инструменты, которые выполняют только одну задачу и могут быть объединены с другими инструментами для удовлетворения ваших конкретных настроек.

В общем, я бы доверял только инструменту, исходный код которого доступен, и старался бы сделать его максимально простым. При использовании send/recvВам не нужно много управлять, вам просто нужно удалить снимок n-1 на локальной стороне, когда передача и создание снимка n на удаленной стороне были успешными.

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

Теперь, когда я думаю об этом, вы, вероятно, могли бы закодировать это в конечном автомате, а затем быть уверенным, что никакие непредвиденные случаи не могут ускользнуть.

Также проверьте авторезервное копирование ZFS. Он прост в использовании и очень мощный. Он имеет больше возможностей по сравнению с другими упомянутыми решениями: https://github.com/psy0rz/zfs_autobackup .

Другие вопросы по тегам