Как выполнять добавочный / непрерывный резервные копии пула zfs?

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

Я понимаю, что отправка / получение по ssh - это один из методов, однако он требует управления снимками вручную .

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

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

Как выполняется непрерывное / добавочное резервное копирование zfs?

25
задан 4 April 2017 в 18:59
3 ответа

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

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

Один из вариантов использования - высокопроизводительное реплицированное хранилище на серверах приложений Linux. Например, я поддерживаю устаревший программный продукт, который использует SSD-диски NVMe с малой задержкой для хранения своих данных. В приложении есть опция зеркалирования на уровне приложения, которая может реплицироваться на вторичный сервер, но часто неточна и составляет 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 //

Syncoid (Sanoid) - 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
33
ответ дан 28 November 2019 в 20:12

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

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

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

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

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

6
ответ дан 28 November 2019 в 20:12

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

0
ответ дан 18 September 2021 в 07:03

Теги

Похожие вопросы