Защита и восстановление виртуальных машин Microsoft Azure с помощью моментальных снимков

Опубликовано: 2 Марта, 2023
Защита и восстановление виртуальных машин Microsoft Azure с помощью моментальных снимков

При использовании IaaS (инфраструктура как услуга) в Microsoft Azure администратор облака может создавать моментальные снимки диска, которым может быть ОС или диск данных. — это доступная только для чтения копия виртуального жесткого диска (также известного как VHD). При создании моментального снимка рекомендуется сначала остановить виртуальную машину. Поскольку на дисках не будет никакой активности, процесс моментального снимка сохранит данные нетронутыми без риска открытия файлов.

Если вы запускаете этот процесс для одной виртуальной машины или пары дисков, это проще и быстрее сделать с помощью портала Azure. Однако вам, возможно, придется сделать это для всей фермы виртуальных машин. В таком сценарии рекомендуется использовать согласованный процесс, например сценарий, особенно когда у нас есть виртуальные машины с несколькими подключенными к ним дисками.

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

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

snap.ps1 -VMName apvm006 -Snapname patch171 -backup

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

snap.ps1 -VMName apvm006 -Snapname patch77 -restore

Ввод и проверка скрипта

Первая цель — убедиться, что у нас есть надежный процесс ввода, чтобы сохранить проверку кода в будущем. Эти следующие параметры будут доступны конечному пользователю при запуске скрипта.

  • VMName (строка: мы сделаем его обязательным и проверим, существует ли виртуальная машина в разделе Param() скрипта.
  • Имя моментального снимка (строка): это обязательный параметр, представляющий собой простую строку для идентификации имени моментального снимка.
  • Резервное копирование (переключатель): если этот параметр включен, мы запустим процесс для создания моментального снимка текущей виртуальной машины.
  • Восстановление (переключение): если этот параметр включен, мы запустим процесс создания управляемых дисков из предыдущего моментального снимка и заменим вновь созданные диски на существующей виртуальной машине.

В теле скрипта мы выполняем проверку, чтобы убедиться, что пользователь не вводит -backup и -restore одновременно.

Защита виртуальных машин Azure

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

VMSnap.ps1 -VMName <VMName> -Backup

На изображении ниже показано все тело скрипта. При использовании -backup мы будем использовать две функции: VMInventory и VMSnapshot.

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

Мы переименовываем все диски, добавляя к ним суффикс «.<SnapshotName>». Итак, прежде чем двигаться дальше, мы удостоверимся, что все диски используют одну и ту же «версию», то есть один и тот же моментальный снимок.

И последнее, но не менее важное: мы сохраняем файл JSON с именем виртуальной машины в текущем местоположении, используя следующий формат .

Функция VMSnapshot получит имя текущих дисков (если у них уже есть.<snapshot> в их именах, мы удалим это), добавит .snap.<SnapshotName> и предоставит вывод для каждого отдельного обработанного диска.

Весь процесс резервного копирования занимает всего несколько минут.

Восстановление виртуальных машин Azure

Процесс восстановления ВМ так же прост, как и защита. Для всего процесса требуются две функции: RestoreSnap и VMRestore.

Функция RestoreSnap будет искать существующие снимки в группе ресурсов, соответствующие предоставленному параметру -Snapshot. Для каждого моментального снимка будет создан управляемый диск в формате .

После того, как все диски будут доступны, функция VMRestore заменит существующие диски в существующей виртуальной машине на диски, созданные на предыдущем шаге.

До этого момента все операции выполнялись помимо существующей виртуальной машины как таковой. Только в последней функции мы заменили диски на уровне ВМ.

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

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

Получите скрипт, но учтите это ограничение

Скрипт создавался для решения некоторых вопросов моего заказчика. Однако это не универсальный вариант. У вас могут быть другие требования.

Сценарий, который мы рассмотрели в этой статье, можно найти на моем GitHub.

Одним из ограничений является то, что в настоящее время файл JSON предназначен только для целей документации. Улучшение, о котором я думаю, заключается в использовании того же файла JSON для восстановления виртуальной машины вместо использования текущего состояния виртуальной машины. Основная причина заключается в том, что на протяжении всего жизненного цикла виртуальной машины у нас могут добавляться или удаляться диски. В нашем текущем сценарии мы будем использовать существующие диски для замены старых, и иногда это может быть не идеально.

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

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