Резервное копирование кластер-кластер
Проблема и зачем
Снимок диска лежит в том же пуле, что и сама виртуальная машина. Такая копия спасает от ошибки внутри ВМ, но не от потери пула или узла-владельца: оригинал и копия уходят вместе. Чтобы копия переживала аварию слоя хранения, её нужно унести на другой кластер.
Этим занимается подсистема резервного копирования кластер-кластер. Один кластер отдаёт поток данных ВМ, второй принимает его и хранит историю. Оба конца — обычные кластеры 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.