Безопасно ли отправлять моментальные снимки ZFS, постепенно игнорируя некоторые промежуточные снимки?

Немного предыстории.

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

Кроме того, я создаю резервные копии всех основных наборов на сервере на некотором NAS с помощью rsync . NAS работает довольно медленно, и для успешного резервного копирования требуются часы, поэтому реализованный подход заключается в приостановке виртуальных машин, создании одного снимка, восстановлении виртуальных машин и разрешении rsync запускаться из созданного снимка. Важно то, что созданный вручную снимок не соответствовал соглашению об именах ZREP и был уничтожен сразу после повторного завершения rsync . Сначала ZREP продолжал работать одновременно, запущенный cron .

Проблема.

Но время от времени случалось, что ZREP переходил в какое-то состояние , которое больше не могло синхронизироваться . Чтобы решить эту проблему, коллега сказал мне, что ему нужно удалить моментальные снимки и полностью выполнить процесс инициализации ZREP. Эта проблема была решена тем, что ZREP больше не запускался параллельно с rsync и нашим собственным снимком.

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

cannot receive incremental stream: most recent snapshot of zfs-pool/vbox/tori does not match incremental source
cannot open 'zfs-pool/vbox/tori@zrep_0001b7': dataset does not exist

Мое понимание того, как работает инкрементальная отправка / получение.

Из моего понимания документов и других вопросов ],для успешной пошаговой отправки моментальных снимков ведущему устройству-отправителю и принимающему объекту необходимо совместно использовать один моментальный снимок, который используется в качестве аргумента 1 для zfs send , и этот моментальный снимок дополнительно должен быть текущим на принимающей цели.

Второй аргумент - это произвольный более новый моментальный снимок, используемый ZFS для вычисления различий между одним главным и целевым устройством моментальных снимков, которые являются общими, и отправки этих различий целевому объекту репликации. Поскольку оба используют один и тот же снимок, указанный в качестве аргумента 1, различия имеют смысл для цели и могут быть просто применены как есть.

Аргументы -i vs. -I из Насколько я понимаю, это либо приведет к отправке одного логического снимка, содержащего все рассчитанные инкрементные данные главной стороны, либо отправит все промежуточные снимки, содержащие их инкрементные изменения. Так, например, -i всегда приводит к ОДНОМУ новому снимку на целевом объекте, тогда как -I может привести к N дополнительным снимкам.

Создание и уничтожение промежуточных снимков между тем, что предоставляется как arg 1 и 2 до zfs send -i не должно быть проблемой, потому что ZFS всегда вычисляет различия только между этими двумя предоставленными аргументами и не заботится о каких-либо других промежуточных снимках. В случае ZREP это теоретически означает, что до тех пор, пока я не вмешиваюсь в снимки, управляемые ZREP, это не должно иметь никакого значения, будут ли созданы дополнительные снимки во время его работы или нет. Просто потому, что специальные снимки ZREP доступны всегда, управляются ZREP и используются для расчета различий для репликации. Так что теоретически дополнительное создание снимков для rsync и резервного копирования не должно быть проблемой.

Верны ли эти предположения?

Вопросы, не связанные с ZREP.

Безопасно ли это в вообще отправлять ZFS-снимки, игнорируя какие-то промежуточные? Или необходимо отправить ВСЕ промежуточные моментальные снимки, созданные когда-либо, на цель репликации, чтобы получить рассинхронизацию или прочее? Как все зависит от -i vs. -I ?

2
задан 21 July 2019 в 17:32
1 ответ

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

Если у вас есть снимки 1,2 и 3 и только удаленный пул есть снимок 1, вы можете дать ему снимок 3 и пропустить 2 .. он просто не сможет вернуться в состояние «2». Но данные все равно будут там.

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

Если вы передумаете, вам нужно будет удалить снимок «3» в удаленном пуле, и только тогда вы сможете отправить » 2 ', затем снова' 3 '.

https://www.reddit.com/r/zfs/comments/cfzdb3/is_it_safe_to_send_zfssnapshots_incrementally/euensuy/

0
ответ дан 3 December 2019 в 13:41

Теги

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