«Есть системные администраторы, которые не делают резервное копирование, и есть те, которые уже делают резервное копирование».
(с) Из этих ваших интернетов.
Добрый день.
В данной статье речь пойдет о таком необходимом и насущном вопросе в системном администрировании, как средства резервного копирования для виртуальных машин (ВМ). Данную статью можно справедливо считать логическим продолжением пары предыдущих, где рассматривались процессы развертывания систем гипервизоров на базе продуктов VMware и Microsoft соответственно. На этот раз разговор о том, как настроить сервер, который будет отвечать за создание и хранение резервных копий виртуальных машин платформ vSphere ESXi и Hyper-V.
Для обоих вариантов основой будет служить бесплатная версия программы резервного копирования Veeam Backup & Replication (далее Veeam B&R). В качестве «сервера бэкапов» в моем случае был выбран обычный ПК с ОС Windows 7 (64 бит). Про разрядность ОС в скобках упомянуто не случайно — с некоторой версии (вероятно с 7-й или ранее) Veeam B&R поставляется как 64-битное приложение, отказавшись от 32-разрядных систем для сервера Veeam Backup & Replication.
Полную информацию со списком поддерживаемых версий ОС сервера можно найти в справочнике к свежему релизу (на момент написания статьи — v9), который в свою очередь всегда можно найти на странице FAQ Veeam.
Желая получить бюджетный вариант проекта и максимально возможный выигрыш в стоимости, насколько это возможно в рамках соблюдения лицензионных соглашений, будем использовать бесплатную версию пакета Veeam Backup & Replication. Это в свою очередь несколько ограничит рабочий функционал пакета. В частности в бесплатной версии нет доступа к планировщику заданий и, например — режима инкрементного копирования (только цельные полные копии ВМ, вместо частичных — по изменениям между версиями бэкапов). Если без второго худо-бедно можно жить, хотя и с оговорками, то в первом случае мы в качестве альтернативы воспользуемся встроенным планировщиком Windows.
Запускать же наш планировщик будет задания, основанные на исполняемых сценариях Windows Powershell, для которых в дистрибутиве Veeam B&R (начиная с версии 8 +update 3) имеются необходимые командлеты, что очень хорошо.
Полагаю логично сохранить «хронологичный» порядок повествования и начать с описания работы с виртуальными машинами (ВМ) VMware.
Если вы будете работать с гипервизором ESXI 6-й версии (как в данной статье), то поверх установленного Veeam B&R v8 должно быть установлено обновление kb2068 или более поздняя версия самой программы — в противном случае вы не сможете подключиться к ESXI (ошибка Failed to login to «SERVER_IP» by SOAP, port 443, user «root», proxy srv: port:0 Unknown API version format: «dev»).
Содержание
- Установка, настройка и проверка работы Veeam Backup & Replication
- Создание задания для планировщика в Windows PowerShell
- Добавление задания в планировщик задач Windows
- Источники
Резервное копирование ВМ VMware vSphere ESXi
Полагаю описывать процесс установки Veeam Backup & Replication на будущий сервер бэкапов нет необходимости — он мало отличается от большинства windows-инсталляторов, если не считать большой длительности из-за установки всех необходимых компонентов, поэтому сразу приступим к обзору пакета от Veeam.
Установка, настройка и проверка работы Veeam Backup & Replication
После установки, запускаем Veeam B&R – для запуска требуются права администратора.
После первого запуска перед вами предстанет главное окно программы.
Первым делом нужно добавить в конфигурацию новый сервер, для чего выбираем соответствующий под-пункт:
Add Server – VMware vSphere.
Следующие шаги демонстрируют процесс добавления нового сервера ESXi, помимо IP-адреса, большей частью это заведение аккаунта администратора сервера (Credentials).
На следующей вкладке добавляем сам аккаунт администратора ESXi (root)
По завершении добавления, в ноде «VMware vSphere», в списке серверов, мы увидим наш новый гипервизор. Кликнув на его имени, можно увидеть список размещенных на сервере виртуальных машин и их краткое описание.
Перед дальнейшими действиями по настройке, выполните тестовое резервное копирование виртуальной машины, для чего в списке ВМ, кликните на любой из них правой кнопкой мышки и дайте команду VeeamZIP.
Откроется диалог с выбором расположения будущего архива с образом ВМ. Выбираете локацию и подтверждаете изменения.
После этого будет запущен процесс создания резервной копии всей системы удаленной виртуальной машины в выбранное хранилище.
По завершении процесса в назначенном каталоге будет записан архив с резервной копией нашей ВМ (файл с расширением *.vbk).
Скорость процесса во многом зависит как от размера файловой системы ВМ (занимаемое место на диске), характеристик бэкап-сервера и гипервизора (дисковая система, скорость сетевого интерфейса), так и от архитектуры сети, через которую данная операция выполняется.
В моем примере диски SATA-II и гигабитные сетевые контроллеры, как на бэкап-сервере так и на гипервизоре, между ними коммутатор — также с портами на 1GB/s, сетевые патчкорды небольшой длины и обжаты соответственно под работу на данном стандарте пропускной способности (аналог «стоечной» кроссировки соединений).
Помимо прочего, могу порекомендовать на все ВМ работающие на продуктах VMware, устанавливать в гостевых ОС пакет VMware Tools для оптимизации работы всех взаимосвязанных служб и утилит внутри инфраструктуры VMware.
Идем далее.
Создание задания для планировщика в Windows PowerShell
После того, как мы убедились, что в ручном режиме нет никаких затруднений, приступаем к добавлению задания в планировщик заданий Windows. Но перед этим, создадим собственно сам исполняемый объект, который будет нашим заданием — сценарий powershell.
Можете создать сценарий с нуля, а можете воспользоваться готовым, который можно позаимствовать в блоге (он же на русском языке) одного из разработчиков из компании Veeam. Из свежих рекомендаций — версия powershell должна быть начиная с 3-й, дабы избежать вероятных проблем в работе командлетов со старой версией (если надо, то обновите перед началом творческих изысканий). Узнать текущую версию можно набрав команду в консоли powershell:
$host.version
или
$PSVersionTable
Если тут все как надо, двигаемся далее.
В моем ленивом случае я взял готовые сценарии и редактировал нужные мне поля, приводя к требуемым значениям.
Ниже можно увидеть, как выглядит мой сценарий после изменений (файл с именем VeeamZIP2.ps1). Измененные поля с моими значениями подсвечены красным цветом.
# Author: Vladimir Eremin # Created Date: 3/24/2015 # http://forums.veeam.com/member31097.html # ################################################################## # User Defined Variables ################################################################## # Names of VMs to backup separated by semicolon (Mandatory) # example from V. Eremin: # $VMNames = "VM1", "VM2", "VM3" $VMNames = "win_xp1", "zabbix" # Name of vCenter or standalone host VMs to backup reside on (Mandatory) $HostName = "192.168.55.100" # Directory that VM backups should go to (Mandatory; for instance, C:\Backup) $Directory = "d:\backup\arch\veeam-esxi\" # Desired compression level (Optional; Possible values: 0 - None, 4 - Dedupe-friendly, 5 - Optimal, 6 - High, 9 - Extreme) $CompressionLevel = "5" # Quiesce VM when taking snapshot (Optional; VMware Tools are required; Possible values: $True/$False) $EnableQuiescence = $True # Protect resulting backup with encryption key (Optional; $True/$False) $EnableEncryption = $False # Encryption Key (Optional; path to a secure string) $EncryptionKey = "" # Retention settings (Optional; By default, VeeamZIP files are not removed and kept in the specified location for an indefinite period of time. # Possible values: Never , Tonight, TomorrowNight, In3days, In1Week, In2Weeks, In1Month) $Retention = "In3days" ################################################################## # Notification Settings ################################################################## # Enable notification (Optional) $EnableNotification = $False # Email SMTP server $SMTPServer = "" # Email FROM $EmailFrom = "" # Email TO $EmailTo = "" # Email subject $EmailSubject = "" ################################################################## # Email formatting ################################################################## $style = "<style>BODY{font-family: Arial; font-size: 10pt;}" $style = $style + "TABLE{border: 1px solid black; border-collapse: collapse;}" $style = $style + "TH{border: 1px solid black; background: #dddddd; padding: 5px; }" $style = $style + "TD{border: 1px solid black; padding: 5px; }" $style = $style + "</style>" ################################################################## # End User Defined Variables ################################################################## #################### DO NOT MODIFY PAST THIS LINE ################ Asnp VeeamPSSnapin $Server = Get-VBRServer -name $HostName $MesssagyBody = @() foreach ($VMName in $VMNames) { $VM = Find-VBRViEntity -Name $VMName -Server $Server If ($EnableEncryption) { $EncryptionKey = Add-VBREncryptionKey -Password (cat $EncryptionKey | ConvertTo-SecureString) $ZIPSession = Start-VBRZip -Entity $VM -Folder $Directory -Compression $CompressionLevel -DisableQuiesce:(!$EnableQuiescence) -AutoDelete $Retention -EncryptionKey $EncryptionKey } Else { $ZIPSession = Start-VBRZip -Entity $VM -Folder $Directory -Compression $CompressionLevel -DisableQuiesce:(!$EnableQuiescence) -AutoDelete $Retention } If ($EnableNotification) { $TaskSessions = $ZIPSession.GetTaskSessions().logger.getlog().updatedrecords $FailedSessions = $TaskSessions | where {$_.status -eq "EWarning" -or $_.Status -eq "EFailed"} if ($FailedSessions -ne $Null) { $MesssagyBody = $MesssagyBody + ($ZIPSession | Select-Object @{n="Name";e={($_.name).Substring(0, $_.name.LastIndexOf("("))}} ,@{n="Start Time";e={$_.CreationTime}},@{n="End Time";e={$_.EndTime}},Result,@{n="Details";e={$FailedSessions.Title}}) } Else { $MesssagyBody = $MesssagyBody + ($ZIPSession | Select-Object @{n="Name";e={($_.name).Substring(0, $_.name.LastIndexOf("("))}} ,@{n="Start Time";e={$_.CreationTime}},@{n="End Time";e={$_.EndTime}},Result,@{n="Details";e={($TaskSessions | sort creationtime -Descending | select -first 1).Title}}) } } } If ($EnableNotification) { $Message = New-Object System.Net.Mail.MailMessage $EmailFrom, $EmailTo $Message.Subject = $EmailSubject $Message.IsBodyHTML = $True $message.Body = $MesssagyBody | ConvertTo-Html -head $style | Out-String $SMTP = New-Object Net.Mail.SmtpClient($SMTPServer) $SMTP.Send($Message) }
Как видно из примера выше, я изменял только несколько полей:
$VMNames = "win_xp1", "zabbix"
имена виртуальных машин из списка в Veeam B&R
$HostName = "192.168.55.100"
IP-адрес гипервизора ESXi
$Directory = "d:\backup\arch\veeam-esxi\"
каталог для хранения архивов образов виртуальных машин
$EnableEncryption = $False
отключение шифрования архивов
$Retention = "In3days"
автоматическое удаление архива образа виртуальной машины по истечении указанного в переменной периода времени.
Тут вы можете выставить свое значение. — возможные варианты перечислены в комментариях сценария.
$EnableNotification = $False
Здесь я отключил уведомления на e-mail т. к. пока не планировал такую функцию для себя. При желании вы можете настроить это, если потребуется.
Когда все опции определены, необходимо проверить работу нашего сценария.
Запустите консоль CMD от имени администратора и выполните команду:
Powershell –file “c:\bin\VeeamZIP\vmware\VeeamZIP2.ps1”
Если все настроено правильно, вы увидите выполнение сценария:
По завершении данного шага приступаем к следующему этапу.
Добавление задания в планировщик задач Windows
Запускаем от имена администратора «Планировщик заданий Windows».
Правой кнопкой мышки кликаем на папке «Библиотека планировщика заданий» и выбираем «Создать простую задачу». Даем нашей задаче имя: «VeeamZIP-test» и задаем свойства новой задачи.
Опишем характер задачи при необходимости
Установим график для новой задачи
Зададим действия, которые надо выполнить для задачи.
Обратите внимание на данный шаг, а именно на то, как распределены команда и ее аргументы по форме:
— в моем случае планировщик согласился выполнять мой сценарий только при таком методе заполнения полей (Отдельно 2 строки: «Программа…» и «Добавить аргументы…»).
После настройки задания, выполним его принудительно вне графика, для отладки.
Надо заметить, что механизм VeeamZIP начинает работу не моментально, а через некоторый промежуток времени, необходимый для служебных процедур подготовки выполнения работы по копированию. Имейте это ввиду при ожидании, во время выполнения проверок работы резервного копирования.
Должно отработать также, как в предыдущем примере, за одним отличием — процесс будет запущен в фоне, без запуска каких-либо окон на экране.
По этой причине, отслеживать его удачный запуск можно несколькими путями, среди которых:
— диспетчер задач (загрузка ЦП и сетевого интерфейса);
— создание в хранилище нового файла-архива образа ВМ;
— в целях отладки — записи событий в журнале нашего задания.
Ниже показан характерный пик активности на интерфейсе lan-pci во время загрузки образов ВМ с ESXi на сервер Veeam B&R:
Записанные архивы образов ВМ в каталоге назначения (хранилище резервных копий).
Осталось убедиться, что резервное копирование работает как в ручном режиме так и по назначенному графику.
Хотелось бы несколько слов сказать касательно типов лицензий.
Для функционирования вышеописанного метода резервного копирования необходимо соблюдения следующих условий по используемому ПО:
ОС бэкап-сервера — Windows 7 x64 sp1/ Server 2008R2 / 2012 или новее;
Veeam Backup & Replication (Free, не ниже v8 +обязательная установка последних обновлений, но не ниже upd v.3);
VMware ESXi 6 (вполне возможно будет работать с v5.5) Essential Kit или выше (более расширенная лицензия). Бесплатная (ESXi Freeware) версия блокирует возможность создавать бэкапы ВМ.
По состоянию на первую половину 2016 года, стоимость лицензий при вышеприведенной схеме будет в пределах 45 т. руб. (ESXi Essential Kit x 3 servers) + 10 т. руб. на Windows 7 (8).
По поводу ESXi можно отдельно заметить, что лицензия Essential Kit позволит получить доступ к функционированию механизма резервного копирования цельных копий виртуальных машин. В случае наличия финансовой возможности расширить лицензию, скажем до Enterprise, для использования откроется режим частичного копирования (инкрементная схема и еще ряд других полезных и интересных опций).
Этот режим конечно еще более оптимален, если не смотреть на итоговую смету. Более того, если есть средства на полные корпоративные пакеты VMware ESXi, то тут уже видимо можно вести речь про закупку полной коммерческой версии для Veeam Backup & Replication, что уже откроет дорогу к использованию всех опций данного ПО, включая планировщик. Нетрудно заметить, что такой вариант заставляет задуматься о целесообразности использовать описанную в статье технику работы с бэкапами и очевидно, приведен для общего ориентирования по теме.
В случае, если лишних финансов на расширенные лицензии у вас не наблюдается, то полагаю использование описанной в статье связки выглядит более чем оптимально и бюджетно.
На этом пожалуй завершу первую часть статьи посвященной резервному копированию виртуальных машин с гипервизора VMware ESXi 6 в хранилище сервера Veeam Backup & Replication v8. Во второй части будет рассмотрена настройка бэкап-сервера для работы с виртуальными машинами на базе Hyper-V.
Удачи.
Источники
https://www.veeam.com/blog/veeam-backup-free-edition-now-with-powershell.html
https://www.veeam.com/blog/ru/veeam-backup-free-edition-now-with-powershell.html
https://helpcenter.veeam.com/backup/hyperv/add_hyperv_server.html
https://helpcenter.veeam.com/backup/hyperv/smb.html
http://system-administrators.info/?p=3565
Спасибо. Статья очень помогла начинающему.
Вопрос в восстановлении.
Если бэкап делается на машину с Veeam — вопросов нет.
НО, если он делается на другую сетевую машину (в частности win2008 x32), то при попытке восстановления ошибка: Veeam.Backup.AgentProvider.AgentClosedException
Поскольку начинающий — просьба помочь в определении ошибки.
Валерий, та ситуация, что вы описываете, наводит на мысли, что вам имеет смысл подумать о настройке конфигурации Veeam с разделением ролей. Это тот случай, когда Veeam Backup & Replication устанавливается сразу на две машины:
1-я выполняет роль бэкап-прокси (veeam backup proxy)
2-я выполняет роль хранилища (veeam storage server).
Название типов серверов думаю говорит само за себя.
Почитайте в этом направлении для большего погружения в эту технологию)
Еще в догонку пара полезных видео от Veeam:
https://www.youtube.com/watch?v=tupUmDwC4ho
https://www.youtube.com/watch?v=vWS9JwDu97c
Добрый день.
Не срабатывает скрипт при попытке бэкапить ВМваре.
Что имеем: vSphere with Operations Management 6 Standard, Veeam B&R 9 Free. Вицентр — одна виртуалка, сервер Вима — другая виртуалка.
На сервере Вима в консоль добавляю Вицентр — там доступны хосты, видны виртуалки. Запускаю скрипт, для отладки в PoSh. Вылетает ошибка:
PS C:\Windows\system32> .\veeambkp.ps1
Find-VBRHvEntity : Cannot validate argument on parameter ‘Server’. The argument is null. Provide a valid value for the
argument, and then try running the command again.
At C:\Windows\system32\veeambkp.ps1:72 char:46
+ $VM = Find-VBRHvEntity -Name $VMName -Server $Server
+ ~~~~~~~
+ CategoryInfo : InvalidData: (:) [Find-VBRHvEntity], ParameterBindingValidationException
+ FullyQualifiedErrorId : ParameterArgumentValidationError,Veeam.Backup.PowerShell.Cmdlets.FindVBRHvEntity
Start-VBRZip : Cannot validate argument on parameter ‘Entity’. The argument is null. Provide a valid value for the argu
ment, and then try running the command again.
At C:\Windows\system32\veeambkp.ps1:82 char:36
+ $ZIPSession = Start-VBRZip -Entity $VM -Folder $Directory -Compression $Compress …
+ ~~~
+ CategoryInfo : InvalidData: (:) [Start-VBRZip], ParameterBindingValidationException
+ FullyQualifiedErrorId : ParameterArgumentValidationError,Veeam.Backup.PowerShell.Cmdlets.StartVBRZip
You cannot call a method on a null-valued expression.
At C:\Windows\system32\veeambkp.ps1:87 char:1
+ $TaskSessions = $ZIPSession.GetTaskSessions().logger.getlog().updatedrecords
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : InvalidOperation: (:) [], RuntimeException
+ FullyQualifiedErrorId : InvokeMethodOnNull
Я так понимаю, проблема в нахождении хоста и виртуалки. Окей, удаляю из консоли Вима Вицентр, подключаю хосты ВМваре по отдельности. Запускаю скрипт — та же ошибка.
Что может быть не так?
ремонт окон в иркутске