Снапшоты в VMware vSphere и все о них

Обновлено 13.05.2020

Снапшоты в VMware vSphere и все о них

Всем привет сегодня хочу затронуть вопрос снапшотов (snapshots) в VMware vSphere. Поговорим, что это такое, из чего состоит, плохо это или хорошо и где применяется. Думаю это актуальный вопрос и многие хотели бы в нем разобраться, да и я освежу это в памяти, и что то может переосмыслить.

Что такое snapshot

Снапшот (Snapshot - снимок) - это сохранение состояния виртуальной машины в определенной точке, необходимой именно вам, его еще называют снимком виртуальной машины. Еще можно дать вот такое определение: Snapshot VMware - это копия файла диска виртуальной машины (VMDK) в определенный момент времени. Снимки предоставляют журнал изменений для виртуального диска и используются для восстановления виртуальной машины в определенный момент времени, когда происходит сбой или системная ошибка. Снимки сами по себе не обеспечивают резервное копирование, если проще SNAPSHOT это НЕ БЭКАП.

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

Где применим снапшот

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

Где применим снапшот

Как создать снапшот в VMware vSphere

Сама процедура очень простая и сейчас будет описана. Если же вы захотите ее автоматизировать, то советую почитать Как создать snapshot виртуальной машины по расписанию в VMware vCenter 5.5.

сразу подчеркиваю shapshot это не замена бэкапа, запомните это

Выбираете любую виртуальную машину, щелкаете по ней правым кликом и из контекстного меню выбираете Snapshot > Take Snapshot

снапшот vmware esxi 5.5

В следующем окне задаем имя snapshot и при желании описание в поле description. Обратите внимание на две возможные галки

В ESXI 6.5 и выше, создание снимка виртуальной машины делается подобным образом, но уже из веб-интерфейса. Вы так же выбираете нужный сервер, вызываете его контекстное меню "Snaphots - Tale Snapshot"

Создание snapshot в ESXI 6.5

Описание параметров снимка

  • Snapshot the virtual machine's memory > данная опция нужна для того, чтобы во время снятия snapshot esxi виртуалки было состояние оперативной памяти, что при откате даст работающую виртуальную машину. Если вы ее снимите, то вернувшись из снапшота виртуальная машина будет выключена, но зато такой снапшот будет создаваться быстрее, так как нет необходимости сохранять оперативную память в файл, особенно если память большая и постоянно обновляется.
  • Quiesce guest file system (need VMware Tools installed) > Это процесс при котором подготавливаются данные на виртуальном диске в состояние требуемое для резервного копирования. Заморозить гостевую файловую систему (требуется установка VMware Tools и ее драйвер Sync Driver) позволяет гарантировать, что данные гостевой операционной системы останутся не поврежденными в снимке.

В итоге VMware Tools с помощью VMware Snapshot Provider запускает создание VSS snapshot внутри гостевой ОС. После чего все VSS writers (смотрим их командой "vssadmin list writers") в гостевой ОС получают запрос и подготавливают соответствующие приложения к бэкапу (происходит запись всех транзакций из памяти на диск). Когда все VSS writers заканчивают работу, они сообщают службе VMware Tools через VMware Snapshot Provider, который, в свою очередь, говорит VMware о том, что снапшот можно снять.
Таким образом все приложения резервного копирования для VMware vSphere используют следующие комбинации при отдании команды на создание снапшота VMware (заметьте, что процесс непосредственно создания снапшота целиком и полностью контролируется самой VMware)

esxi snapshot

Если делать бэкап без опции Quiesce guest file system, то могут быть большие проблемы при восстановлении контроллера домена или Exchange сервера.

Как создать снимок виртуальной машины через PowerCLI

Тут есть две конструкции, которые вы можете использовать в PowerCLI. В первом примере, мы вызываем виртуальную машину "Terminal", а далее создаем там снапшот с именем "Untill Update".

Get-vm -name "Terminal" | New-Snapshot -Name "Untill Update"

Во втором примере, мы воспользовались командлетом New-Snapshot, и обратились к виртуальному серверу, где создали снапшот с именем "Untill Update".

New-Snapshot -VM "Terminal" -Name "Untill Update"

Структура файлов виртуальной машины при снятии Snapshot

Вот как выглядит структура файлов до снятия снапшота в VMware vSphere. Более подробно о форматах esxi файлов читайте по ссылке.

до снятия снапшота в VMware vSphere

Теперь посмотрим, что изменится после снятия снимка виртуальной машины esxi 5.5. Как видите добавились файлы с форматом vmsn и добавленным в название 000001. Это и есть жесткий диск новых данных после снапшота.

после снятия снапшота в VMware vSphere

Если посмотреть на эти же файлы в консоли ssh, то этот файл на самом деле состоит из четырех. У меня на скриншоте два снапшота и в сумме они занимают 8 фалов.

vmware snapshots

  • <name VM>-[шесть цифр]-delta.vmdk - файл данных диска отличий от базового диска
  • <name VM>-[шесть цифр].vmdk - заголовочный файл
  • <name VM>.vmsd - текстовый файл с параметрами снапшота (связи в дереве, SCSI-нода, время создания и т.п.)
  • <name VM>.vmsn - файл с сохраненной памятью виртуальной машины

Как можно предположить основной файл это delta, который включает в себя все отличительные данные после снапшота от основного виртуального диска. Данный виртуальный диск состоит из блоков данных хранимых в формате redo-логов (или просто дочерний диск - child disk). Он же sparse-диск, то есть диск, который использует технологию Copy-On-Write (COW) при работе с данными. Идея технологии copy-on-write — при копировании областей данных создавать реальную копию только когда ОС обращается к этим данным с целью записи. Таким образом, этот виртуальный диск содержит только измененные от родительского диска области данных (delta).

файл.vmsd. Это текстовый файл, открыв в редакторе вы увидите все отношения между родительским и дочерними дисками, а также другую интересную информацию

файл.vmsd

Хочу напомнить, что снапшоты лежат вместе с виртуальной машиной но их расположение можно поменять.

В гостевой ос

Что вы обнаружите например в событиях гостевой системы при создании снапшота без галки Snapshot the virtual machine's memory и включенной на Quiesce guest file system. Вы в просмотре событий, в журнале Приложения обнаружите ошибку VSS с кодом 12289 (Ошибка теневого копирования тома: Непредвиденная ошибка DeviceIoControl). Можете на нее забить, так как она происходит из за флоппи диска в конфигурации виртуальной машины.

Quiesce guest file system

так же если посмотреть через клиента VMware vSphere датастор на котором лежит виртуалка то вы обнаружите файл архив vss_manifests*.zip с конфигами с описанием всех найденных VSS writers в гостевой ОС.

Снапшоты в VMware vSphere и все о них-01

Содержимое vss_manifests*.zip.

Снапшоты в VMware vSphere и все о них-02

если в  архиве vss_manifests.zip только файл backup.xml — это означает, что снапшот по факту был сделан без использования VSS

Также стоит добавить некоторые требования к Quiesce guest file system

  • Поддержка Операционной системой консистентных снимков (VSS)
  • VSS компоненты VMware Tools установлены
  • Отсутствие динамических дисков внутри гостевой машины (Если внутри гостевой системы будет присутствовать хоть один динамический диск — не важно системный он или нет, то VSS задействован не будет. Снапшот будет создаваться успешно, но vss_manifests.zip будет пустым, как и логи событий внутри гостевой ОС. Это правило действует для гостевых ОСей Windows 2008 и выше)
  • Должна работать служба VSS в гостевой ОС

VSS- это сервис, который всего навсего перед бэкапом заставляет базу данных записать все транзакции на диск, далее БД приостанавливает свою работу, затем создаётся теневая копия тома, на что уходит несколько секунд, Далее БД продолжает свою работу в обычном режиме, а бэкап сливается уже с теневой копии. В VMWare теневая копия не создаётся, а создаётся delta vdmk, при этом исходный vdmk становится доступным на чтение и содержит консистентные данные, что позволяет его скопировать в качестве бэкапа.

Чем плохи снапшоты

На своей практике могу точно сказать, что минусов в разы больше чем плюсов.

Плюсы снапшотов

  • Возможность тестирования новых настроек или обновлений с возможностью легкого отката
  • Резервное копирование виртуальных машин на лету без остановки

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

Минусы снапшотов

  • snapshot быстро растут особенно при часто обновляемых данных. Растут они блоками по 16 мб. Если у вас например приложение СУБД, которое имеет много транзакций, то оно заполонит ваш датастор очень быстро, и может получиться так что на нем кончится место и виртуальная машина может перестать работать.
  • Еще большой проблемой являются длинные цепочки снапшотов, сделанных на разных этапах настройки, штук так по 15 или 20. Все это вызывает торможение виртуальной машины и хранилище отжирая лишние iops.  Чем больше у вас цепочка тем дольше по ней идти до последнего снимка.

Минусы снапшотов

  • Так же когда снапшот делает или удаляется хранилище испытывает дополнительную нагрузку, так как на датастор сбрасывается память и снимок
  • Из за снапшотов вы не сможете использовать  Fault Tolerance или Storage VMotion, так как привязаны к хранилищу с вашими snapshot.
  • Вы не сможете расширить виртуальный диск со снапшотом
  • Снимки виртуальных машин с дисками в режиме RDM или гостевыми операционными системами, использующими инициатор iSCSI в гостевой системе, не поддерживаются.
  • Снимки не поддерживаются устройствами ввода-вывода PCI vSphere Direct Path
  • Если виртуальная машина имеет виртуальные жесткие диски размером более 2 ТБ, выполнение снимка может занять значительно больше времени

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

Консолидация и удаление снапшотов / Удаление snapshot vmware

И так рассмотрим процедуру удаления снапшота. Выше мы узнали, что это снимки это зло, и вот еще почему. Не совсем понятное поведение снапшота при его удалении и слиянии с основным виртуальным диском vm машины. Для удаления и слияния вам потребуется свободное место на вашем дисковом массиве VMFS, это еще более актуально когда снимков несколько. Выше я привет снапшот как это может выглядеть. Предположим у вас виртуальная машина с тремя снимками вот таких вот размеров.

  • 10 гб
  • 20 гб
  • 30 гб

Удаление snapshot vmware-01

Вы допустим хотите удалить все снапшоты и нажимаете "Delete All в Snapshot Manager", далее идет вот такая операция Snapshot 3 сливается со Snapshot 2, но при этом сам Snapshot 3 остается на томе VMFS

Удаление snapshot vmware-02

В итоге первого шага мы получаем уже 90 гб (60+30). Теперь Snapshot 2 который весит уже 50 гб сливается с Snapshot 1, при этом Snapshot 2 и 3 не удаляются пока. Из этого следует что у нас уже занято 140 гб на хранилище.

Удаление snapshot vmware-03

Как только результирующий Snaphot 1 в 60 гб сольется с основным виртуальным диском при этом сам виртуальный диск flat в размере не меняется, поскольку он фиксирован (изменяется только содержимое блоков). И только затем все снапшоты удаляются (все 140 ГБ).

так что видите запас нужно всегда иметь, минимум 10 процентов.

Консолидация snapshot vmware

И так consolidation или консолидация, это по сути удаление снапшота со слиянием дисков, чаще всего оставленного каким нибудь средством резервного копирования, например veeam. Процесс consolidation vm я уже описывал, там все просто, но не понятно на сколько это влияет на датастор в плане производительности.

Что влияет на время консолидации в виртуальной машине

  • Размер delta-дисков - очень важный параметр. Чем больше данных в дельта-диске, тем дольше их нужно применять к основному (базовому) диску.
  • Число снимков и их размеры. Чем их больше, тем все будет дольше идти по времени. Кроме того, при нескольких снапшотах консолидация происходит в несколько этапов, описано выше.
  • Производительность подсистемы хранения, включая FC-фабрику, Storage Processor хранилищ, LUN (число дисков в группе, тип RAID массива).
  • Тип данных в файлах снапшотов (нули или случайные данные).
  • Нагрузка на хост-сервер ESXi при создании снапшота.
  • Нагрузка виртуальной машины на подсистему хранения в процессе консолидации. Например, почтовый сервер, работающий на полную мощность, может очень долго находится в процессе консолидации снапшотов.

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

Замирание stun виртуальной машины в VMware vSphere

Если вы как и я долго уже работаете с гипервизором Vmware ESXI 5.5, то наверняка обращали внимание, что бывают случаи, что виртуальная машина подвисает на какое то время, или дико тормозит, а потом работает как ни в чем не бывало. За это в vmware отвечает параметр stun или как мы выше смотрели quiescence. Когда это происходит виртуалка не может ничего делать, она чаще всего падает по Ping и недоступна, и перестает отвечать на операции ввода/вывода. Если сказать по простому то ее как будто поставили на паузу,  а на уровне ввода-вывода совершаются только операции, касающиеся выполняемой задачи (например, закрытие прежнего VMDK-диска и переключение операций чтения-записи на новый диск при операциях со снапшотами).

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

Когда может быть заметен stun виртуальной машины

  1. Во время выполнения процедуры приостановки виртуальной машины (suspend). Тут происходит такое подмораживание, чтобы скинуть память VM на диск, после чего перевести ее в приостановленное состояние.
  2. Ну как все уже поняли во время создания снапшота, нужно закрыть старый диск и начать писать в новый.
  3. Консолидация (удаление) снапшота, подробно описано выше.
  4. При выполнении миграции с помощью vMotion. Слегка напомню данный механизм, во первых оперативная память передается от одной машины к целевой VM без подмораживания, но затем происходит такой же stun, как и при операции suspend, с тем только отличием, что маленький остаток памяти (минимальная дельта) передается не на диск, а по сети. После этого происходит операция resume уже на целевом хосте. Пользователь этого переключения, как правило, не замечает, так как время этого переключения очень жестко контролируется и чаще всего не достигает 1 секунды. Если память гостевой ОС будет меняться очень быстро, то vMotion может затянуться именно во время этого переключения (нужно передать последнюю дельту).
  5. Горячая миграция хранилищ Storage vMotion. Здесь stun случается дважды: сначала vSphere должна поставить Mirror Driver, который будет реплицировать в синхронном режиме операции ввода-вывода на целевое хранилище. При постановке этого драйвера происходит кратковременный stun (нужно также закрыть диски). Но и при переключении работы ВМ на второе хранилище происходит stun, так как нужно удалить mirror driver, а значит снова пере открыть диски уже на целевом хранилище.

Как правильно удалить Snapshot в ESXI

У вас существует несколько методов удаления снимков:

  • Через веб-интерфейс
  • Через PowerClI
  • Через команды esxi cli

Как исключить диски из снимка

Могут быть случаи, когда вы не хотите, чтобы диски виртуальной машины подвергались воздействию моментальных снимков. Для достижения этой цели, вам нужно изменить режим жесткого диска виртуальной машины из "Disk Mode" в "Independent – Persistent или Independent – Nonpersistent. Два варианта немного различаются в соответствии с объяснением VMware:

    • Independent – Persistent: Диски в постоянном режиме ведут себя как обычные диски на вашем физическом компьютере. Все данные, записанные на диск в этом режиме, постоянно записываются на диск.
    • Independent – Nonpersistent: изменения в дисках в непостоянном режиме отменяются при отключении питания или перезагрузке виртуальной машины. Изменения на диске записываются и считываются из файла журнала повторов, который удаляется при отключении питания или сбросе.

исключить диск из снимка

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

Автор - Сёмин Иван

4 Responses to Снапшоты в VMware vSphere и все о них

  1. Артём:

    Спасибо за статью.
    Хочу заметить, что начиная с версии ESX 4.0 Update 2 консолидация дисков при операции «Delete all» работает по другому принципу. Для thick-дисков слияние снимков происходит напрямую в parent-диск, без создания промежуточного диска, если VM выключена. Для thin-дисков размер растет ровно на столько, сколько необходимо для применения дельты к parent-диску. Если виртуальная машина запущена во время консолидации — создается промежуточный sparse-диск, который аккумулирует I/O во время работы виртуальной машины, в конце происходит финальное слияние с основным диском.
    В то же время, если вы захотите сделать удалить промежуточный снимок — все будет происходить по описанному в статье принципу.

  2. Иван Семин:

    Добрый день Артем,я с 4 не сталкивался, спасибо за экскурс в историю. А вы еще 4-ки используете?

  3. Денис:

    Здравствуйте, возникла небольшая проблема со снапшотами. Veeam Backup хотел сделать резервную копию виртуальной машины но выдал ошибку в процессе работы. В виртуальной машине подключённые HDD заканчиваются на 000001 но в Snaphot Manager нет никаких снапшотов. Место на datastore заканчивается но новые диски с 000001 растут понемножку в объёме. И вот вопрос когда закончиться место на datastore виртуалки не запустятся как можно удалить эти снапшоты но так чтоб потом можно было запустить виртуалки. Поменять в настойках VM путь к нормальных дискам без 00001 но тогда навернека не будет видно последних изменений?

  4. Eldar:

    Очень Крутой сайт потому что, кроме обяснения технологии и + даете место на теорию

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *