Используем Veeam Backup Free Edition 9.5 для резервного копирования виртуальных машин с хоста Hyper-V на выделенный файловый сервер на базе Debian Linux 8.6 c дедупликацией от QUADStor

Возникла задача организации резервного копирования виртуальных машин Hyper-V с отдельных хостов виртуализации (без кластера) на нескольких удалённых площадках. В силу того, что одной из вводных этой задачи является наличие очень скромных и нестабильных каналов связи, идея использования единого сервера резервного копирования на центральной площадке отпала сама по себе. Ибо одно дело, когда можно стягивать резервные копии в одно центральное место с учётом блочных изменений, сокращая при этом нагрузку на сеть, например тем же System Center DPM, и совсем другое дело, если в сжатые сроки потребуется выполнить полное восстановление ВМ на определённый момент времени по этим же слабеньким каналам. Таким образом, нужно было подумать над тем, как организовать резервное копирование виртуальных машин непосредственно на удалённой площадке, при условии отсутствия увеличения текущих затрат на лицензируемое ПО и на имеющемся оборудовании.

Так получилось, что на этих удалённых площадках помимо хоста виртуализации имеется выведенный ранее из эксплуатации, но вполне рабочий, старенький сервер IBM System x3200, который можно использовать в качестве файлового сервера для хранения резервных копий виртуальных машин. Возникла идея установить на данный сервер дополнительные диски, в качестве базовой ОС развернуть Linux с пакетом QUADStor, с помощью которого, в свою очередь, создать виртуальный диск с поддержкой блочной дедупликации и по протоколу iSCSI презентовать этот диск хосту виртуализации Hyper-V, а уже на хосте виртуализации с помощью продукта Veeam Backup Free Edition 9.5 настроить «горячее» резервное копирование виртуальных машин на этот самый iSCSI диск. В итоге должно получиться «дёшево и сердито». В этой заметке я опишу процедуру настройки такой конструкции.

 

Подготовка файлового сервера на базе Debian Linux c QUADStor

Дисковая корзина нашего будущего файлового сервера IBM System x3200 в имеющейся конфигурации поддерживает не более 4 SAS/SATA дисков 3.5″. Учитывая то, что контроллер в этой модели сервера также очень скромный (LSI Logic SAS1064ET) и, упрощённо говоря, умеет только «страйп» или «зеркало», создадим две зеркальных пары дисков – первую на двух уже имеющихся SATA дисках малой ёмкости под операционную систему Linux, и вторую — на двух дополнительно установленных малобюджетных SATA дисках по 1TB для хранения резервных копий ВМ (под виртуальный диск QUADStor).

Итак, на первую зеркальную пару дисков без особых изысков устанавливаем ОС Debian GNU/Linux 8.6 (Jessie). Вторую зеркальную пару больших дисков при этом оставляем неразмеченными.

Переходим к установке и настройке QUADStor Storage Virtualization.

Порядок установки QUADStor на разные дистрибутивы Linux описан в документе Installation/Upgrading on RHEL/CentOS 5.x, 6.x, SLES 11 and Debian 6.x, 7.x. Исходя из того, что в нашем случае используется Debian, устанавливаем предварительно требуемые пакеты:

# apt-get install uuid-runtime build-essential sg3-utils iotop sysstat lsscsi apache2 psmisc firmware-qlogic linux-headers-`uname -r`

Включаем поддержку CGI для веб-сервера Apache:

# a2enmod cgi

Добавляем правило iptables, разрешающее входящие подключения к веб-серверу и сохраняем текущие правила:

# iptables -A INPUT -i eth0 -p tcp -m tcp --dport 80 -j ACCEPT
# iptables-save > /etc/iptables.conf

Перезагружаем сервер и убеждаемся в том, что служба веб-сервера успешно стартует при запуске системы:

# systemctl status apache2.service

Теперь скачиваем и устанавливаем основной пакет QUADStor Storage Virtualization (ссылку на актуальную версию пакета берём здесь: Storage virtualization downloads):

# mkdir ~/QUADStor-files
# wget http://www.quadstor.com/virtentdub3z/quadstor-virt-3.2.11-debian7-x86_64.deb -P ~/QUADStor-files
# dpkg -i ~/QUADStor-files/quadstor-virt-3.2.11-debian7-x86_64.deb

...
Performing post install. Please wait...
Synchronizing state for quadstor.service with sysvinit using update-rc.d...
Executing /usr/sbin/update-rc.d quadstor defaults
Executing /usr/sbin/update-rc.d quadstor enable
Building required kernel modules
Running /quadstor/bin/builditf. This may take a few minutes.
Processing triggers for systemd (215-17+deb8u5) ...

Установка пакета должна завершиться без ошибок.

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

# systemctl status quadstor.service

Проверяем доступ к веб-интерфейсу пройдя по ссылке http://{сервер}. Веб-сервер должен будет перенаправить нас по ссылке http://{сервер}/cgi-bin/system.cgi

После того как установка завершена QUADStor, выполняем первичную настройку, которая принципиально не отличается от ранее описанной, а именно:

  • Настраиваем ограничение доступа к веб-серверу Apache, а так же, при необходимости, настраиваем поддержку HTTPS;
  • Переходим в веб-интерфейс управления QUADStor и создаём там Storage Pool;
  • Добавляем диск (Physical Storage) в Storage Pool (при этом в качестве добавляемого диска используем вторую зеркальную пару дисков больших дисков на нашем сервере, которые в системе представлены как одно дисковое устройство) ;
  • Создаём виртуальный диск VDisk.

После того, как виртуальный диск QUADStor создан, настроим доступ к нему по протоколу iSCSI. Вообще информацию о том, каким образом возможно получить доступ к виртуальным дискам QUADStor, можно найти в документе Accessing Virtual Disks (VDisks).

Функционал iSCSI Target реализован в QUADStor с помощью службы ietd, которая открывает в системе TCP-прослушиватель на порту 3260, поэтому нам потребуется в iptables создать соответствующее разрешающее правило:

# iptables -A INPUT -i eth0 -p tcp -m tcp --dport 3260 -j ACCEPT
# iptables-save > /etc/iptables.conf

Чтобы задать настройки конфигурации iSCSI, касающейся созданного нами виртуального диска перейдём в свойства этого диска в веб-консоли QUADStor (Virtual Disks > Modify > iSCSI Configuration):

Здесь в поле IQN увидим автоматически сгенерированный идентификатор iSCSI-диска и для ограничения доступа к этому диску зададим значения полей Incoming User и Incoming Password. В эти поля пропишем произвольные имя пользователя и пароль, которые наш файловый сервер будет запрашивать у iSCSI клиента (Initiator) при подключении к этому виртуальному диску QUADStor. 

 

Подключение диска QUADStor к хосту виртуализации на Windows Server

Перейдя на наш хост виртуализации Hyper-V на базе Windows Server 2012 R2, откроем Панель управления и найдём в ней апплет iSCSI Initiator. При первом обращении к этому апплету система сообщит о потребности в запуске системной службы, необходимой для корректной работы с протоколом iSCSI. Соглашаемся с запуском этой службы и переводом её в состояние автоматического запуска при старте системы:

После запуска службы откроется апплет управления iSCSI, где на закладке Discovery нажмём кнопку Discover Portal, чтобы добавить информацию о нашем файловом сервере на базе Linux

В открывшемся окне введём FQDN имя или IP адрес Linux-сервера (порт оставляем предлагаемый по умолчанию — 3260) и нажмём ОК

После этого в табличной части поля Discovered targets должен появится ранее упомянутый IQN нашего виртуального диска QUADStor со статусом Inactive. То есть диск успешно обнаружен на удалённом Linux-сервере и теперь  для того, чтобы произвести подключение этого диска воспользуемся кнопкой Connect.

В открывшемся окне включим опцию Add this connection to the list of Favorite Targets для того, чтобы диск был добавлен в список автоматически подключаемых при старте системы дисков и нажмём кнопку расширенных настроек подключения диска — Advanced

В открывшемся окне включим опцию Enable CHAP log on и укажем имя пользователя и пароль для доступа к диску QUADStor, которые мы задали ранее.

Сохраним сделанные настройки, закрыв окна кнопкой ОК

Если всё сделано правильно, то статус диска должен измениться на Connected.

Перейдём на закладку Favorite Targets и убедимся в том, что диск присутствует в списке на автоматическое подключение при запуске операционной системы.

На этом подключение виртуального диска QUADStor по протоколу iSCSI можно считать законченным. Теперь нужно выполнить инициализацию этого диска в системе и создать на нём раздел с файловой системой NTFS. Для этого перейдём в оснастку Disk Management (diskmgmt.msc), выберем подключенный диск и переведём его в состояние Online 

Затем выполним инициализацию диска – Initialize Disk

Будет задан вопрос о выборе типа разметки диска. Так как мы используем виртуальный диск QUADStor, то, вероятно, со временем мы захотим увеличить размер диска, и он будет большего размера, чем сейчас. Напомню, что виртуальный диск QUADStor может быть в любое время увеличен до 64TB, несмотря на то, что реальный размер физических дисков, на которых расположен этот виртуальный диск будет невелик и/или будет оставаться на прежнем уровне. А учитывая то, что в MBR имеется ограничение на размер логических дисков в 2TB, то в нашем случае имеет смысл выбирать тип разметки GPT:

После того, как диск проинициализирован и на нём создана таблица разделов, создадим на этом диске раздел с файловой системой NTFS

Назначим этому диску отдельную букву, например E:\, и дождёмся окончания процесса форматирования, которое в зависимости от размера диска может занять некоторое время.

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

 

Установка Veeam Backup Free Edition 9.5

Для резервного копирования виртуальных машин Hyper-V мы будем использовать программу Veeam Backup Free Edition 9.5, которая позволит нам создавать полную резервную ВМ без её выключения.

Узнать об основных возможностях этого продукта можно из документа Product Overview.

С системными требованиями можно ознакомится загрузив документ Release notes.

Лицензионное соглашение EULA доступно по ссылке Veeam End User Software License Agreement.

Последняя версия 9.5.0.711, доступная на текущий момент, может быть загружена с сайта Veeam.

Файл образа VeeamBackup&Replication_9.5.0.711.iso размером в 1,5GB после загрузки копируем на наш хост виртуализации на базе Windows Server и монтируем его в систему. Например, с помощью PowerShell сделать это можно так:

Mount-DiskImage -ImagePath "С:\Temp\VeeamBackup&Replication_9.5.0.711.iso"

На смонтированном диске запускаем программу установки Setup.exe, читаем и принимаем лицензионное соглашение, жмём Next

На шаге ввода лицензионного ключа оставляем все без изменений. Без ключа программа будет работать в режиме Free Edition с ограниченной функциональностью, которой в рамках нашей задачи будет достаточно.

Стоит отметить то, что на самом деле в систему устанавливается полноценный экземпляр Veeam Backup & Replication, и если в процессе первичной установки не был указан лицензионный ключ, то его можно добавить в приложение в дальнейшем и повысить режим его работы до редакций Standard, Enterprise или Enterprise Plus. Подробнее узнать о различиях бесплатной и платных версий можно из документа Veeam Backup: Free vs Paid

На следующем шаге, не изменяя набора устанавливаемых компонент, снова жмём Next

Далее программа установки произведёт анализ системы на соответствие минимальным программным требованиям и предложит нам доустановить недостающие компоненты с помощью кнопки Install:

Компоненты доустанавливаются из дистрибутива, поэтому отдельно ничего загружать не придётся. После того, как нужные компоненты развёрнуты снова запускаем проверку с помощью кнопки Re-run и переходим к следующему этапу установки — Next.

Здесь мы увидим сводный экран текущих настроек, с которыми будет установлено приложение. Если включить опцию Let me specify different settings, то все указанные настройки можно будет изменить перед началом процесса непосредственной установки. Например, вместо устанавливаемого по умолчанию именованного экземпляра SQL Server 2012 Express, можно задать установку в уже существующий экземпляр SQL Server, поменять имя БД, сервисную учётную запись, расположение каталогов или номера портов. В большинстве случае предложенные настройки можно оставить в конфигурации по умолчанию и нажать кнопку Install.

В процессе установки на нашем хосте виртуализации будет развёрнут именованный экземпляр Microsoft SQL Server 2012 SP3 редакции Express (VEEAMSQL2012) и в нём будет создана база данных VeeamBackup. Дождёмся завершения процесса установки.

 

Регистрация хоста виртуализации в Veeam Backup

По окончании процесса установки, запускаем с рабочего стола или стартового меню ярлык Veeam Backup & Replication Console. В качестве сервера подключения используем localhost и порт по умолчанию 9392. Включим опцию использования учётных данных текущего пользователя Use Windows session authentication и нажмём Connect

В первую очередь выполним в программе регистрацию нашего хоста виртуализации, чтобы появилась возможность резервного копирования виртуальных машин, расположенных на этом хосте. Для этого на вкладке VIRTUAL MACHINES в дереве инфраструктуры выберем Microsoft Hyper-V и в контекстном меню или верхней ленте кнопок выберем Add server.

В открывшемся мастере добавления сервера введём FQDN имя нашего сервера… 

На шаге Type выберем тип Hyper-V сервера. В нашем случае это отдельно работающий хост – Standalone

На шаге Credentials потребуется указать административную учётную запись, с помощью которой Veeam Backup будет подключаться к хосту виртуализации и получать доступ к виртуальным машинам для операций резервного копирования. На мой взгляд, для этой цели правильней будет создать отдельную сервисную учётную запись. При этом можно использовать как локальную учётную запись, созданную на хосте виртуализации, так и доменную учётную запись. В нашем примере выбрана доменная учётная запись, которой на хосте виртуализации предоставлены административные права.

Далее нам сообщат о том, что на хост будут установлены компоненты интеграции Veeam Backup с Hyper-V.

Жмём Next и дожидаемся окончания конфигурации Veeam Backup и подключаемого хоста виртуализации

После закрытия мастера добавления хоста в консоли Veeam Backup должен появится перечень виртуальных машин, расположенных на добавленном хосте.

Теперь можно перейти к проверке функций резервного копирования виртуальных машин c помощью Veeam Backup.

 

Проверка резервного копирования ВМ в Veeam Backup

На подключённом нами ранее по протоколу iSCSI диске создадим каталог, в который будут помещаться полные резервные копии виртуальных машин, сделанные из Veeam Backup. В нашем случае это будет каталог E:\VMBackups.

Затем в консоли Veeam Backup выберем какую-нибудь виртуальную машину и вызовем для неё пункт меню VeeamZIP 

В открывшемся окне укажем путь к только что созданному каталогу для хранения резервных копий, если нужно, определим параметры удаления старых резервных копий и отключим компрессию. Компрессия резервных копий Veeam Backup, это вещь бесспорно интересная, однако в нашем случае включение компрессии приведёт к низким показателям дедупликации на диске QUADStor (проверено на практических опытах). Настроив все параметры текущей сессии резервного копирования жмём OK

Запуск задачи резервного копирования будет сопровождаться информационным окном с статусными показателями выполняемой задачи.

В ходе резервного копирования мы также сможем увидеть, что в консоли Hyper-V Manager виртуальная машина принимает соответствующий статус.

В результате выполнения задачи резервного копирования в указанном нами каталоге будет создана полная резервная копия ВМ в виде файла с расширением VBK. Этот тип фалов ассоциирован в системе с Veeam Backup и по его двойному клику будет автоматически запускаться консоль Veeam Backup и в ней будет открыта форма, из которой можно при необходимости произвести операцию восстановления как всей виртуальной машины, так и отдельных файлов внутри ВМ (Instant File-Level Recovery).

Таким образом считаем, что резервное копирование, как таковое, у нас работает, но теперь нужно решить ещё одну немаловажную задачу. Дело в том, что бесплатная редакция Veeam Backup имеет ограничения, которые не позволяют нам настраивать запуск резервного копирования по расписанию непосредственно из интерфейса программы. Однако в составе Veeam Backup есть набор командлетов PowerShell, с помощью которых можно вызывать задачу резервного копирования в Veeam Backup. И если совместить эту возможность с Планировщиком заданий Windows (Task Scheduler), то на выходе мы можем получить вполне работоспособное решение задачи автоматизации запуска резервного копирования по расписанию.

 

Автоматизация запуска резервного копирования ВМ

Получить онлайн-справку по PS-командлетам Veeam Backup можно по ссылке Veeam Backup & Replication 9.5 — PowerShell Reference. А уже готовый PowerShell скрипт, эксплуатирующий командлеты Veeam Backup, в частности Start-VBRZip, мы можем найти в статье Veeam Backup Free Edition: Now with PowerShell!. Я немного изменил этот скрипт, добавив возможность оповещений по электронной почте только в том случае, если в процессе резервного копирования возникла какая-то ошибка.

############################ User Defined Variables ############################

# Names of VMs to backup separated by comma (Mandatory). For instance, $VMNames = “VM1”,”VM2”
$VMNames = "KOM-AD01-WS305","KOM-AD01-DEV03"

# Name of Hyper-V host VMs to backup reside on (Mandatory)
$HostName = "KOM-AD01-VM14"

# Directory that VM backups should go to (Mandatory; for instance, C:\Backup)
$Directory = "E:\VMBackups"

# Desired compression level (Optional; Possible values: 0 - None, 4 - Dedupe-friendly, 5 - Optimal, 6 - High, 9 - Extreme) 
$CompressionLevel = 0

# 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 = "In1Week"
              
############################ Notification Settings ############################

# Enable notification (Optional)
# Possible values: 0 - None, 1 - Only Warnings&Errors, 2 - All notifications
$EnableNotification = "1"

$SMTPServer = "KOM-SMTP.holding.com"
$EmailFrom = "KOM-AD01-VM14@holding.com" 
$EmailTo = "DST-Backup-Operators@holding.com"
$EmailSubject = "VEEAM Backup Notification"
                  
############################ 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 ############################

Asnp VeeamPSSnapin
$Server = Get-VBRServer -name $HostName
$MesssagyBody = @()

foreach ($VMName in $VMNames)
{
  $VM = Find-VBRHvEntity -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 -in "1","2") 
  {
    $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 -in "1","2")
{
 If (($EnableNotification -eq "1") -And ($FailedSessions -eq $Null))
    { exit }
 Else {
    $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)
    }
}

Откроем с правами администратора консоль Windows PowerShell и выполним проверочный запуск скрипта выполнив команду:

& "C:\Tools\VeeamZip.ps1"

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

После того, как мы убедились в том, что скрипт успешно отрабатывает при ручном запуске, настроим периодический запуск скрипта с помощью Планировщика заданий Windows. В качестве команды, выполняемой в задании Планировщика, укажем запуск powershell.exe с параметрами:

powershell.exe -NoProfile -command "C:\Tools\VeeamZip.ps1"

Настройку резервного копирования можно считать законченной.

 

Проверяем результат

Итак, в нашем примере PS-скрипт по расписанию (ночью, один раз в сутки) выполняет резервное копирование двух виртуальных машин с автоматическим удалением резервных копий старше семи дней. По прошествии семи дней проверим результат на нашем хосте виртуализации.

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

На мой взгляд, результат выглядит совсем неплохо. И в данной ситуации, при необходимости, мы сможем увеличить срок хранения резервных копий до двух недель, а то и до месяца. Только нужно не забывать про то, что для этого нам потребуется увеличить размер виртуального диска QUADStor с последующим увеличением логического диска через оснастку Disk Management на хосте виртуализации.

Всего комментариев: 5 Комментировать

  1. Валерий /

    при подключении iscsi диска к Windows ругался на CHAP, решилось указанием пароля более 12 символов и при настройке указать такие же логин\пароль в Outgoing

    1. Алексей Максимов / Автор записи

      при подключении iscsi диска к Windows ругался на CHAP

      Не ощутил такой проблемы.

      при настройке указать такие же логин\пароль в Outgoing

      Если не сложно, поясните, пожалуйста, зачем. У меня и без этого работает.

      1. Валерий /

        без этого Windows server 2012R2 не подключал диск

        1. Валерий /

          видимо проблема была именно в сервере, на остальных подключается без проблем

  2. Алексей /

    Спасибо за статью, стянул себе скрипт PowerShell, на просторах сети за вечер поисков только этот нашелся рабочий!

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