Для организации системы автоматического резервного копирования виртуальных машин, запущенных на сервере VMWare ESXi мы воспользуемся бесплатной утилитой MKSBackup , скачать которую можно (на момент написания статьи последняя доступная версия MKSBackup 1.0.4 от 24.01. 2013). Данная утилита является своеобразным фронтэндом, который интегрируется с различными скриптами резервного копирования, в том числе GhettoVCB (скрипт резервного копирования ВМ, написанный на perl и поддерживаемый энтузиастами). GhettoVCB позволяет в онлайн режиме создавать резервные копии запущенных виртуальных машин. Резервная копия ВМ создается путем создания ее снимка (снапшота).
Важно . GhettoVCB не работает с виртуальными машинами, имеющих собственные снимки. Для выполнения бэкапа виртуальной машины все снапшоты должны быть удалены (например, через Snapshot Manager).
MKSBackup одно из немногих средств резервного копирования, позволяющих выполнять онлайн бэкап виртуальных машин. MKSBackup можно использовать для бэкапа виртуальных машин, запущенных как на коммерческих редакция VMware ESXi , так и на бесплатном VMware Hypervisor. Утилита разработана на Python и является кроссплатформенной. Утилита MKSBackup не имеет графического интерфейса, работает через командную строку, и настраивается через конфигурационные файлы.
Естественно, удобство и управляемость решения для организации бэкапа виртуальных машин VMWare на базе MKSBackup, ниже чем у коммерческих продуктов, но во много компенсируется его бесплатностью, простотой настройки и скоростью развертывания.
Следующий этап – настройка параметров резервного копирования виртуальных машин, запущенных на сервере ESXi. Настройка проводится путем редактирования конфигурационного файла mksbackup.ini (по умолчанию находится в папке C:\Magik).
Откройте файл mksbackup.ini в любом текстовом редакторе. По своей структуре файл представляет собой несколько секций, имя каждой секции заключено в квадратные скобки.
Секция:
В данной секции можно задать параметры оповещения по электронной почте. Нам это не интересно, поэтому оставим
Следующая секция . Эта секция представляет собой задание резервного копирование и описывает различные параметры, обеспечивающие запуск бэкапа виртуальных машин в среде Windows. В нашем примере задание выглядит так:
Program=ghettovcb host=10.10.1.89 port=22 login=root password=LI&f3ccc23 local=C:\magik\vmware global_conf=ghettoVCB.conf vm_list=vm1_https winXPtest destination=C:\magik\${vm} scp_bin="D:\Install\Putty\pscp.exe" -scp -r
Подробнее остановимся на параметрах задания:
program – программа резервного копирования, оставляем ghettovcb
host – имя/ip хоста ESXi, на котором запущены виртуальные машины
port – порт для доступа (по умолчанию 22 порт – протокол SSH)
login – имя пользователя с правами доступа к серверу ESXi (по умолчанию это root, но с целью безопасности лучше завести на сервере ESXi отдельного пользователя)
password – пароль пользователя
local – локальная директория, в которой хранится скрипт резервного копирования и его конфигурация
global_conf – файл с настройками скрипта ghettoVCB
vm_list – список виртуальных машин, для которых необходимо создать резервную копию. Если нужно забэкапить все виртуальные машины, этот параметр нужно оставить пустым. Если нужно исключить некоторые виртуалки, воспользуйтесь параметром vm_exclude.
destination – параметр позволяет указать тип выполняемой операции. Это может быть
Остановимся на варианте move, как на более оптимальном. В этом случае на хосте ESXi создадутся локальные резервные копии виртуальных машин, которые затем будут перенесены на компьютер, запустивший скрипт.
mon-sun – предполагается, что скрипт может выполняться ежедневно (оставим так, так как периодичность запуска резервного копирования зададим через планировщик Windows).
Кроме того, укажем каталог, в который будут перемещаться резервные копии ВМ (C:\magik). Параметр ${vm} указывает, что для каждой виртуальной машины будет создан отдельный каталог с ее именем, куда и будут складываться фалы виртуальной машины.
Примечание . Подробное описание конфигурационных настроек скрипта и его синтаксиса приведено на сайте разработчика.
scp_bin – путь к утилите scp
Важно . Убедитесь, что на сервере ESXi включен демон SSH.
VM_BACKUP_VOLUME=/vmfs/volumes/msa2000/backup VM_BACKUP_ROTATION_COUNT=3
VM_BACKUP_VOLUME – каталог на сервере ESXi, в котором будут сохранятся копии виртуальных машин (естественно, что на VMFS разделе должно быть достаточно свободного места)
VM_BACKUP_ROTATION_COUNT – количество хранимых локальных копий (в нашем примере будут хранится 3 последние резервные копии)
Осталось с помощью утилиты plink (также входит в состав поставки Putty) сохранить ключ хоста в локальном кеше ssh. Например, так:
PLINK.EXE [email protected] ls /
Протестируем работу скрипта резервного копирования. Для это нужно открыть командную строку с правами администратора и выполнить команду:
C:\Magik\MKSBackup\mksbackup.exe -v -c C:\Magik\mksbackup.ini backup VMWARE_FROM_WINDOWS
Где ключ –v показывает, что нужно отображать подробную информацию, -c путь к файлу настроек mksbackup.ini, backup – означает что нужно запустить резервное копирование, в конце указывается имя задания из файла mksbackup.ini (в нашем примере задание VMWARE_FROM_WINDOWS).
Если все настроено корректно, утилита начнет в консоль выводить подробную информацию о процессе резервного копирования (сап процесс бэкапа довольно длительный, так что не стоит ожидать его быстрого завершения).
Процесс резервного копирования можно отследить по появлению событий создания/ удаления снапшотов в консоли VMware vSphere.
В процессе выполнения скрипта в каталоге назначения будут появляться папки, содержащие файлы виртуальных машин.
После выполнения тестового копирования можно перейти к автоматизации процесса создания резервных копий. Для этого создадим новое задание планировщика Windows.
Создадим, задание с именем «Backup ESXi», которое выполняется по пятницам и запускает команду: C:\Magik\MKSBackup\mksbackup.exe -v -c C:\Magik\mksbackup.ini backup VMWARE_FROM_WINDOWS
В настройках задания не забудьте указать, что его нужно запускать с правами администратора (опция «Run with highest privileges»).
Примечание . Если задание будет запускаться от имени другой учетной записи (не той, под которой выполнялось тестирование), необходимо не забыть, что в кэше новой учетной записи не будет нужного ключа. Для решений проблемы нужно выполнить указанную выше команду plink из-под новой учетной записи.
Недостатки данного данного метода резервного копирования виртуальных машин:
Указанные недостатки компенсируется его бесплатностью, но для крупных решений предпочтительно использовать коммерческие продукты резервного копирования, например Veeam или HP DataProtector.
Небольшой тест:
Локальная сеть - гигабит.
На локальное хранилище (аппаратный RAID 10 из 4 дисков 10К) - «time dd if=/dev/zero of=/vmfs/volumes/datastore/temp bs=1M count=1K» 8 секунд.
На «linux» хранилище (программный RAID 0 из 3 дисков 7,5К) - «time dd if=/dev/zero of=/vmfs/volumes/linbackup/temp bs=1M count=1K» 12 секунд.
На «windows» хранилище (аппаратный RAID 5 из 10 дисков 10К) - «time dd if=/dev/zero of=/vmfs/volumes/winbackup/temp bs=1M count=1K» 1 минута 44 секунды (сам в шоке).
Результаты говорят сами за себя. Да, на win-хранилище RAID 5, но врядли он один виноват в таком результате.
С СХД разобрались, теперь надо автоматизировать резервное копирование. Лучшим бесплатным средством является скрипт ghettoVCB , чтобы им воспользоваться, надо получить доступ к хосту ESXi по SSH. Как оказалось есть очень простой способ включения и выключения доступа прямо из vShere Client: Configuration > Software > Security Profile > Properties… > Remote Tech Support (SSH) > Options… > Start или Stop. По этим скриншотам думаю будет нагляднее:
Скачиваем последнюю версию скрипта. Можно пойти «тру» путём сделать как написано на страничке скрипта в секции «Setup:», но я поступил проще - распаковал архив у себя на компьютере, вместо редактирования конфигурационного файла - отредактировал сам скрипт, скопировал его на локальное хранилище (через «Browse Datastore»).
Вот основные параметры:
VM_BACKUP_VOLUME - путь к папке бэкапов, в моём случае /vmfs/volumes/linbackup
DISK_BACKUP_FORMAT - формат диска, thin для бэкапов подходит лучше всего
VM_BACKUP_ROTATION_COUNT - количество хранимых бэкапов (для каждой виртуальной машины), у меня 2
ADAPTER_FORMAT - тип адаптера, у меня lsilogic
Остальные параметры можно и не править, но если интересно - на страничке скрипта все параметры подробно описаны, правда на английском, почти все параметры расписаны по русски.
Итак, скрипт скопирован на локальное хранилище, подключаемся по ssh, переносим скрипт куда нибудь ближе к корню, например в /ghettovcb/ghettovcb.sh, если вам не нужно бэкапить все виртуальные машины - необходимо создать файл со списком бэкапируемых виртуалок:
cd /ghettovcb
vi vmlist
жмём «a» вписываем имена виртуалок, каждое на новой строке, нажимаем «esc» и чтобы сохранить изменения ":wq" или чтоб выйти без сохранения ":q"
Переносы строк должны быть "\n", при переносах "\r\n" скрипт будет выдавать ошибку, поэтому не стоит создавать список в блокноте, с последующим копированием на хранилище, если вы ни разу не пользовались Notepad+ или EmEditor и не знаете что такое "\n" и "\r\n" - лучше создавайте список в vi.
Пробуем запустить скрипт:
./ghettovcb.sh -f ./vmlist -l ./log.txt
./ghettovcb.sh -f ./vmlist -g ./ghettovcb.conf -l ./log.txt
Скрипт отрабатывает, выдавая много информации, если в конце вывода видим "###### Final status: All VMs backed up OK! ######" значит всё хорошо, иначе - читаем log.txt и разбираемся что сделали не так.
Теперь надо создать расписание для бэкапов.
cd /var/spool/cron/crontabs
chmod u+w root
vi root
жмём «a», пишем расписание, только учтите - время указывается в UTC, т.е. для Москвы это локальное время минус три часа
00 20 * * * /ghettovcb/ghettovcb.sh -f /ghettovcb/vmlist -l /vmfs/volumes/linbackup/logs/`date +%F`.txt
или если вы создали файл конфигурации
00 20 * * * /ghettovcb/ghettovcb.sh -f /ghettovcb/vmlist -g /ghettovcb/ghettovcb.conf -l /vmfs/volumes/linbackup/logs/`date +%F`.txt
жмём «esc» и сохраняемся ":wq"
в заключении
chmod u-w root
Теперь ежедневно в 20:00 по UTC (в 23:00 по Москве) будет запускаться скрипт, логи о его выполнении будут сохранятся на хранилище в папке logs, отдельный лог на каждый день.
По логам у меня на бэкап уходит примерно 4 часа, посчитал скорость - примерно 4ГБ в минуту, т.е. примерно 70МБ в секунду, весьма не плохо. Хранилища в 2,7ТБ хватает на хранение двух копий каждой виртуалки, этого вполне достаточно, плюс остаётся свободное место, а оно нужно, т.к. сначала делается третья резервная копия и только после её создания удаляется самая старая копия.
Ну и ещё один камень в огород «windows» хранилища - пробовал делать бэкапы скриптом на него, storage просто отваливался, ну и собственно скрипт завершался с ошибкой. Понимаю, что всё дело в неверной настройки записи по NFS, но настройки были по умолчанию и разбираться в «тюнинге» не очень то и хотелось.
Эксперимент прошёл удачно, можно закупать сервер с хорошими дисками, планируется RAID 10 на 5ТБ, этого должно с запасом хватить и на будущие виртуалки.
Теги: vmware, vsphere, esxi, backup, резервное копирование
Добрый день уважаемые читатели, не так давно, мы с вами разбирали процесс клонирования виртуальных машин Hyper-V , сегодня же мы с вами разберем, его главное конкурента, а именно гипервизор ESXI, в котором мы так же произведем клонирование виртуальной машины VMware . Сам процесс не сложный, но может у начинающих системных администраторов вызывать ряд вопросов, на которые я отвечу в этой статье.
Клонирование - это создание точной копии виртуальной машины, как с теми же настройками, так и с нужными изменениями. Очень удобно, как в тестовых целях, когда необходимо провести нужные изменения, но вы не знаете как поведет себя виртуальная машина, сделав ее копию вы это узнаете и сможете избежать простоя сервисов. Какие методы клонирования существуют:
Ниже опишу первый метод и последний, остальные уже имеют свои подробные статьи.
Находим нужный ESXI хост, выбираем нужный вам дисковый массив (Datastore) и щелкаем по нему правым кликом мыши, из контекстного меню выбирает "Browse Datastore".
Выбираем нужную папку и из контекстного меню пункт "Copy", далее с помощью встроенного проводника, перемещаем ее в нужное местоположение, можно назвать это таким клонированием виртуальной машины VMware, для бедных.
Далее, на новом месте, открываете папку и щелкаете правым кликом по файлу с расширением *.vmtx, это конфигурационный файл. По сути на этом все. Лично я, чтобы получить доступ к файловой системе ESXI использую WinSCP , либо вы еще можете воспользоваться функциями OVA шаблона .
Если в копируемой VM присутствую snapshot’ы их нужно или удалить перед копированием или скопировать вместе с другими файлами, иначе во время загрузки новой VM будет ошибка с сообщением о невозможности подгрузить файлы с snapshot’ами.
У тех товарищей, кто централизованно управляет своей инфраструктурой, данная функция присутствует при установке. Ее преимущество в том, что клонировать можно как работающую, так и не работающую виртуальную машину. Выбираем нужную и щелкаем по ней правым кликом, в контекстном меню видим пункт "Clone".
На первом окне мастера вас спросят выбрать локацию (Datacenter)
Указываем хост назначения, если он подходит, вы увидите сообщение "Validation succeded"
Если же нет, то вы увидите сообщения:
На следующем шаге клонирования, вам необходимо и место назначения копии машины.
На последнем шаге, вас спросят, хотите ли вы применить кастомные настройки к клону. Customise - это дополнительная настройка, позволяющая задать огромное количество установок. Выбрав пункт "Do not customise" вы закончите процесс мастера клонирования.
Существует отличный бесплатный скрипт для резервного копирования виртуальных машин на VMWare ESXi сервере, причем он работает на free версии ESXi 4 и 5 версий без установки всяких дополнительных приблуд типа VMA и т.п. Проблема только в том, что инструкция там не совсем точная, поэтому я долго возился с этим скриптом, чтобы он все-таки заработал именно в автоматическом режиме…
Подробно рассписывать как приконнектица к ESXi по SSH я не буду, распишу лишь шаги настройки, с которыми все заработало у меня.
Сначала качаем скрипт по ссылке выше и заливаем на сервер, заливать нужно прямо в архиве! Проще всего это сделать через vSphere Client. У меня на сервере два диска — на одном работают машины, а на другом лежат всякие iso-образы и сами бэкапы. Называются диски соответственно datastore1 и datastore2. Все бэкапы, скрипт и конфиги лежат в папке backup. Еще обратите внимание, что названия файлов и папок регистрозависимые, поэтому если папка называется backup , а вы пишите в скрипте Backup , то работать не будет!
1 этап завершен! Теперь если запустить StartBackup.sh , то начнется бэкап. На время отладки можете поменять 2ю строку на что-то типа вот этого ./ghettoVCB.sh -a -g ./ghettoVCB.conf -c BackupConfig -l ghettoVCB.log -d dryrun — это позволит запустить скрипт и отследить ход выполнения без самого копирования дисков. Чтобы резервное копирование проводилось более эффективно и быстро, рекомендую в настройках выставить тип диска thin .
Небольшое пояснение — почему нужно создавать скрипт StartBackup.sh , а не просто взять и его содержимое поместить в /var/spool/cron/crontabs/root ? Существует какое-то ограничение на размер этого файла и часть строк в нем просто не будет работать, хотя можете попробовать сделать и так, сначала у меня работало, но потом, видимо, вышли какие-то патчи и перестало. Более того, это просто удобнее — если потребуется изменить расписание резервного копирования, то вы просто правите файл StartBackup.sh и не нужно танцев с бубном вокруг cron с его перезапуском и внесением тех же изменений в /etc/rc.local .
PS: Время идет, все меняется, сам скрипт меняется, ESXi5 уже вышел, так что где-то, что-то может уже и не работать 🙂
Команда cron выглядит вот так:
1 2 3 4 5 /vmfs/volumes/datastore2/backup/StartBackup.sh
Где,
1: Минуты (0-59)
2: Часы (0-23)
3: Дни (0-31)
4: Месяцы (0-12 )
5: День недели (0-7 )
Несколько примеров: