Продолжая знакомиться с Veeam Backup & Replication, я занялся изучением функции SureBackup, позволяющей проводить автоматическое тестирование резервных копий виртуальных машин.
Наш коллега, Владимир Ескин, выложил в своем блоге отличное
видео, описывающее процедуру настройки SureBackup в Veeam Backup & Replication. Поэтому, если вы еще не работали с данным продуктом, настоятельно рекомендую посмотреть его.
Каким же образом работает SureBackup?
Veeam Backup & Replication позволяет разворачивать и запускать образы виртуальных машин прямо из резервной копии в изолированной от остальной части инфраструктуры среде - виртуальной лаборатории (Virtual Lab). Каждая виртуальная лаборатория определяется набором изолированных сетей - виртуальных свитчей и групп портов, не имеющих связь с физическими сетями. При создании виртуальной лаборатории администратор выбирает один или несколько узлов ESX, на которых требуется разворачивать виртуальные машины, хранилище для временных файлов и настройки подсетей.
Перечень виртуальных машин, которые требуется протестировать задается на уровне группы приложений (Application Group). В простейшем случае группа может содержать одну единственную проверяемую машину, однако, в большинстве случаев для проверки серверов приложений (например, почтового или web-сервера) должны быть развернуты инфраструктурные службы (например, DNS, служба каталога, СУБД). В группе определяется порядок запуска ВМ и тесты, которые необходимо использовать для проверки каждой из них.
По умолчанию, в Veeam Backup & Replication есть несколько предустановленных тестовых наборов, называемых ролями (Server Roles). При создании группы приложений администратор может назначить для виртуальной машины одну из ролей, определив тем самым, какие тесты будут проводиться. Каждая роль хранится в отдельном файле в формате .xml в папке '%ProgramFiles%\Veeam\Backup and Replication\SbRoles' и может быть изменена по усмотрению администратора.
На выбор доступны следующие методы проверки работы ВМ:
- Прием Heartbeat сигнала от агента VMware Tools, установленного в ВМ.
- Отправка эхо запроса (Ping) на сетевой адрес виртуальной машины
- Запуск сценариев для проверки работы.
И если с Heartbeat все понятно, то два других варианта требуют дополнительных пояснений.
Каким образом серверу Veeam удается пинговать виртуальную машину в изолированной сети?
Доступ к изолированной сети осуществляется через специальную виртуальную машин - прокси сервер, которая автоматически создается для каждой виртуальной лаборатории. Один из интерфейсов прокси сервера подключается к производственной сети, другой - к изолированной. Если производственная инфраструктура включает в себя несколько подсетей, то прокси сервер также выполняет функции маршрутизатора между изолированными подсетями, назначая себе, как правило, первый адрес в каждой из подсетей.
Для избежания конфликта с адресацией (поскольку и в производственной сети и в изолированной используется одинаковый диапазон адресов) используются так называемые маскарадные сети (masquerade network). Для каждой IP адреса узла в изолированной сети ставится в соответствие аналогичный IP адрес в маскарадной сети (например 192.168.1.0/24 -> 192.168.254.0/24). В момент запуска виртуальной лаборатории на сервере Veeam Backup прописывается статический маршрут к маскарадной сети, в котором в качестве маршрутизатора указывается адрес прокси сервера.
Таким образом, когда серверу Veeam требуется получить доступ к тестируемой виртуальной машине, то вместо ее адреса в производственной сети, указывается аналогичный адрес из маскарадной сети (например 192.168.1.36 -> 192.168.254.36). По таблице маршрутизации пакет отправляется на прокси сервер.
Прокси сервер выступает в роли NAT устройства, и подменяет в принятом пакете адрес отправителя на свой собственный адрес в изолированной сети (в данном примере - 192.168.1.1), а также подменяет адрес назначения с маскарадной подсети (192.168.254.0) на адрес производственной подсети (192.168.1.0) и отправляет пакет получателю в изолированной подсети.
Таким образом, производственная сеть и тестовая сеть оказываются достаточно эффективно разделены, но сервер Veeam Backup не теряет возможности сетевого взаимодействия с тестируемыми машинами.
Наконец, Veeam Backup позволяет запускать сценарии для проверки ВМ. Для всех предустановленных ролей используется один единственный сценарий 'VmConnectionTester.exe' - этакий упрощенный аналог Telnet, принимающий в качестве аргументов IP адрес сервера и порт TCP, по которому следует проверить. Здесь важно сделать небольшое отступление и сказать, что Veeam Backup считает сценарий успешно отработавшим, если он был завершен с кодом возврата 0 и неуспешно - при любом другом.
Администратор может самостоятельно указывать любые произвольные сценарии (поддерживает запуск .exe, .bat, .cmd, .js, .vbs, .wsf). Все сценарии запускаются из-под учетной записи настроенной для запуска служб Veeam Backup & Replication.
В принципе, использование VmConenctionTester позволяют проверить доступность большинства сетевых служб в виртуальной машине. Однако, существуют службы, которые не используют для работы протокол TCP, предназначены для работы в качестве клиентских служб или выполняются локально. Для проверки таких служб может использоваться следующий сценарий (query-service.ps1) на powershell, проверяющий, что служба на удаленном компьютере запущена:
#query-service.ps1
param(
[string] $ip, #IP address of checked server
[string] $service ) #Service name
$result = (get-Service -ComputerName $ip -Name $service -ErrorAction SilentlyContinue)
if($result.status -eq "Running")
{
exit
}
else
{
write-host ("Error 1, Service '" + $service + "' not running or not found.") #if service not found or not running, then echo
$host.SetShouldExit(1)
exit
}
В качестве входных параметров сценарий принимает IP адрес сервера и имя службы.
Если служба не запущена или такой службы не существует, сценарий завершается и передает код ошибки 1 обработчику Veeam Backup.
Для работы сценария требуется соблюдение следующих условий:
Во-первых, требуется разрешить запуск сценариев .ps1 на сервере Veeam Backup. Сделать это можно, выполнив в консоли Powershell команду:
set-executionpolicy remotesigned
Во-вторых, требуется, чтобы учетная запись, от имени которой запускается сценарий, имела необходимые права на удаленном сервере для получения информации о запущенных службах (например, входила в группу локальных администраторов).
В-третьих, на удаленном сервере должен быть настроен брандмауэр Windows, разрешающий удаленные подключения. Сделать это можно, включив соответствующие правила или отключив брандмауэр полностью.
Поскольку Veeam Backup не поддерживает запуск .ps1 сценариев напрямую, можно использовать оболочку в виде batch файла (query-service.bat):
REM query-service.bat
@ECHO OFF
powershell.exe -noninteractive -noprofile -command "& {C:\Temp\query-service.ps1 %1 %2 }"
EXIT /B %errorlevel%
Теперь требуется сохранить оба файла в любую папку на сервере (по умолчанию я использовал 'C:\Temp\') и отредактировать одну из групп приложений, добавить скрипт, указать путь к сценарию query-service.bat в поле Path и указав в качестве аргументов IP адрес (задается переменной %vm_ip%) и имя службы. В данном примере в качестве проверяемой службы выбран DHCP клиент.
Теперь, при успешной отработке сценария, если служба запущена, виртуальная машина успешно пройдет проверку.
Если же, по какой-то причине, служба не будет запущена, Veeam Backup также уведомит об этом и автоматически завершит работу виртуальной лаборатории.
В данной статье я попытался показать один из вариантов, с помощью которого можно автоматизировать рутинную и довольно скучную для многих администраторов процедуру проверки резервных копий, а для кого-то и задуматься о том, чтобы начать это делать, ведь нет ничего бесполезнее, чем резервная копия, из которой не удается восстановить данные. :-)