Перейти к основному содержимому

Резервное копирование кластер-кластер

Проблема и зачем​

Снимок диска лежит в том же пуле, что и сама виртуальная машина. Такая копия спасает от ошибки внутри ВМ, но не от потери пула или узла-владельца: оригинал и копия уходят вместе. Чтобы копия переживала аварию слоя хранения, её нужно унести на другой кластер.

Этим занимается подсистема резервного копирования кластер-кластер. Один кластер отдаёт поток данных ВМ, второй принимает его и хранит историю. Оба конца — обычные кластеры vStack Center; выделенного сервера резервного копирования в схеме нет.

vStack Center даёт для этого набор примитивов, а не готовый продукт резервного копирования. Кластер умеет создать цепочку, открыть приём потока, отдать историческую точку восстановления и удалить лишнее. Расписание, реестр копий и политику хранения держит вызывающая сторона — GI, федерация кластеров. Кластер сам ничего не планирует и историю копий не ведёт.

Модель и сущности​

Цепочка резервных копий — служебный датасет на кластере-хранителе. Полное имя складывается из пула, служебного префикса и листового имени: <pool>/.backup/<leaf>. Листовое имя выбирает вызывающая сторона, а кластер проверяет его состав: длина от 1 до 128 символов, латинские буквы, цифры и знаки _, ., -. Пробел, кириллица, слеш и @ отклоняются кодом -25430. Смысл имени кластер не разбирает. Цепочка не ВМ: она не принадлежит ни одному ВЦОД (Виртуальный Центр Обработки Данных) и в списках ВМ не появляется.

Точка восстановления — снимок внутри цепочки. Адресуется коротким именем, суффиксом после @, а не полным путём. Одна цепочка держит столько точек, сколько в неё положили: кластер не ограничивает их число и не удаляет старые сам.

Пул под цепочку кластер выбирает сам, без участия вызывающей стороны. Он берёт потребляющие пулы, у которых узел-владелец жив, и выбирает среди них пул с наибольшим свободным местом. Оценка размера копии, если её передали при создании, работает префильтром. К оценке кластер прибавляет 20 % запаса на рост цепочки и отбрасывает пулы, где свободного места меньше этой суммы. Фильтр включается при оценке больше нуля.

СущностьЧем адресуетсяКто задаёт имя
Цепочкаполный путь <pool>/.backup/<leaf>вызывающая сторона задаёт лист, пул выбирает кластер
Точка восстановлениякороткое имя снимка (суффикс после @)сторона, которая писала поток

Путь цепочки — единственная защита от лишнего доступа к слою хранения: на узлы ретранслируются только пути вида <pool>/.backup/<leaf>. Любой другой путь кластер отклоняет с ошибкой -25430, не доводя запрос до узла. Поэтому попытка адресовать датасет ВМ операциями цепочек не сработает — это сделано намеренно.

Роли кластеров​

В одном сценарии участвуют до трёх кластеров, и один кластер может играть сразу несколько ролей.

РольЧто делает
Источникотдаёт поток данных своей ВМ на приёмник хранителя
Хранитель (цель)держит цепочки, принимает поток, отдаёт историю, ротирует снимки и удаляет цепочки
Восстанавливающийпринимает поток обратно и разворачивает ВМ из него

Хранитель — центральная роль этой страницы. Он единственный, у кого есть цепочки: у источника данные лежат в датасете ВМ, у восстанавливающего — в карантинном датасете приёма.

Как работает​

Данные между кластерами идут напрямую по TCP, а не через вызывающую сторону. Отсюда порядок: сначала приёмник, потом отправитель. Кластер-хранитель открывает приём в цепочку: выделяет порт и возвращает координаты приёмника — адрес узла-владельца пула и номер порта. Отправитель подключается на эти координаты и льёт поток. Таймаут приёма задаёт, сколько приёмник ждёт подключения, прежде чем закрыть порт.

Такой ответ приходит немедленно и означает лишь то, что запрос ушёл на узел. Это подтверждение ретрансляции, а не итог передачи.

Операции делятся на две группы по режиму. Синхронные отвечают результатом сразу: цепочка создана, порт выделен, снимок удалён. Асинхронная выгрузка отвечает подтверждением ретрансляции, а итог передачи приходит обратным вызовом от узла.

ОперацияРежимЧто делаетЧто в ответе
Создание цепочкисинхроннаясоздаёт цепочку, выбрав пулпуть цепочки, пул, адрес узла
Открытие приёмасинхроннаяоткрывает приём потока в цепочкуадрес узла и порт приёма
Выдача точки восстановленияасинхроннаяотдаёт точку восстановления на внешний приёмникподтверждение ретрансляции, итог — обратным вызовом
Удаление точки восстановлениясинхроннаяудаляет одну точку восстановленияподтверждение
Удаление цепочкисинхроннаяудаляет цепочку целикомподтверждение

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

Доступ и включение​

Все пять операций подсистемы работают под одной привилегией — 14002, управление цепочками резервных копий. Область действия у неё уровня кластера: цепочка не привязана к ВЦОД, поэтому роль администратора ВЦОД такие запросы не проходит. Модель привилегий разобрана в справочнике «Роли и привилегии».

Поверх привилегии стоит выключатель уровня кластера: параметр feature.backup в cluster.options. По умолчанию он равен 0, и тогда любая из пяти операций отвечает ошибкой -25420. Это отдельный выключатель на каждый кластер: хранитель можно включить, оставив остальные кластеры без подсистемы.

Границы охвата​

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

  • Не ведёт реестр. Операций, которые перечисляют цепочки кластера или снимки внутри цепочки, у подсистемы нет. Учёт держит вызывающая сторона: путь цепочки, полученный при её создании, нужно сохранить у себя, иначе к ней не вернуться. Пул и адрес узла в том же ответе информационные — они меняются вместе с размещением пула, привязываться к ним не нужно.
  • Не планирует. Расписания и политики хранения на уровне кластера нет. Ротацию ведёт внешний планировщик, удаляя устаревшие точки восстановления по одной.
  • Не отдаёт инкременты. Выгрузка из цепочки в текущей версии всегда полная: инкрементальная выдача зарезервирована и не работает.
  • Не создаёт снимки при выгрузке. Выгрузка отдаёт существующую точку по имени. Если нужной точки в цепочке нет, она не появится — операция закончится ошибкой.
  • Не показывает цепочки в интерфейсе. Экранов для цепочек в веб-интерфейсе кластера нет: операциями управляет вызывающая сторона.

См. также​

Методы API​

Операции этой страницы в API: backup-dataset-create, backup-dataset-receive, backup-dataset-send, backup-snapshot-remove, backup-dataset-remove, vm-backup-send, vm-backup-restore — см. Справочник API.