Я работаю с Citrix XenServer уже много лет, и управление всеми серверами виртуализации через приложение XenCenter, которое установлено на моём компьютере с ОС Windows. До сегодняшнего дня мы регулярно производили резервное копирование виртуальных машин вручную, так же приходилось останавливать сервера для их копирования. Большинство владельцев серверов не могут позволить себе их отключение на длительное время. Поэтому я нашёл способ, как копировать виртуальные машины без их выключения и, соответсвенно, простоя.
В этой статье мы по шагам научимся делать резервные копии запущенной виртуальной машины, а так же, будет представлен готовый скрипт, который может делать резервные копии всех серверов через cron.
Ручной бекап запущенной машины
- Поиск UUID виртаульной машины
xe vm-list is-control-domain=false is-a-snapshot=false
Данна команда покажет список виртуальных машин и их UUID, которые нам нужные для следующего шага.
- Создание снепшота
Параметр uuid необходимо заменить на свой, полученный на первом шаге, убедитесь, что он правильный.
xe vm-snapshot uuid=8ac95696-94f3-83c1-bc89-8bb2603f832b new-name-label=testvmsnapshot
А эта команда вернёт uuid снепшота, по которому его можно будет сохранить в файл
xe template-param-set is-a-template=false ha-always-run=false uuid=b15c0531-88a5-98a4-e484-01bc89131561
- Сохранение снепшота в файл
Теперь можно сохранить полученный снепшот в .xva-файл, который можно использовать для восстановления сервера как из командной строки, так и из XenCenter
xe vm-export vm=b15c0531-88a5-98a4-e484-01bc89131561 filename=vm-backup.xva
- Удаление снепшота
После сохранения .xva-файла можно удалить снепшот из самого XenServer
xe vm-uninstall uuid=b15c0531-88a5-98a4-e484-01bc89131561 force=true
Скрипт автоматического бекапа запущенных виртуальных машин
Для резервного копирования всех виртуальных машин, работающих на базе xenserver можно использовать следующий bash-скрипт. Данный скрипт создаёт снепшоты и экспортирует их на NFS-диск. У меня этот скрипт работает отлично, чего может не буть у вас, поэтому используйте его на собственный страх и риск.
#!/bin/bash
#
# Written By: Mr Rahul Kumar
# Created date: Jun 14, 2014
# Last Updated: Jan 22, 2016
# Version: 1.2
# Visit: http://tecadmin.net
#
DATE=`date +%d%b%Y`
XSNAME=`echo $HOSTNAME`
MOUNTPOINT=/xenmnt
UUIDFILE=/tmp/xen-uuids.txt
NFS_SERVER_IP="192.168.10.100"
### Create mount point
mkdir -p ${MOUNTPOINT}
### Mounting remote nfs share backup drive
[ ! -d ${MOUNTPOINT} ] && echo "No mount point found, kindly check"; exit 0
mount -F nfs ${NFS_SERVER_IP}:/backup/citrix/vms ${MOUNTPOINT}
BACKUPPATH=${MOUNTPOINT}/${XSNAME}/${DATE}
mkdir -p ${BACKUPPATH}
[ ! -d ${BACKUPPATH} ] && echo "No backup directory found"; exit 0
# Fetching list UUIDs of all VMs running on XenServer
xe vm-list is-control-domain=false is-a-snapshot=false | grep uuid | cut -d":" -f2 > ${UUIDFILE}
[ ! -f ${UUIDFILE} ] && echo "No UUID list file found"; exit 0
while read VMUUID
do
VMNAME=`xe vm-list uuid=$VMUUID | grep name-label | cut -d":" -f2 | sed 's/^ *//g'`
SNAPUUID=`xe vm-snapshot uuid=$VMUUID new-name-label="SNAPSHOT-$VMUUID-$DATE"`
xe template-param-set is-a-template=false ha-always-run=false uuid=${SNAPUUID}
xe vm-export vm=${SNAPUUID} filename="$BACKUPPATH/$VMNAME-$DATE.xva"
xe vm-uninstall uuid=${SNAPUUID} force=true
done < ${UUIDFILE}
umount ${MOUNTPOINT}
P.S. Не знаю, почему у автора возникли проблемы с бекапом запущенных машин — XenCenter позволяет создавать снепшоты и сохранять их в файл, не выключая машину (конечно, если на ней установлен XenTools. А вот его скрипт автоматизации мне очень помог, кроме этого его можно изменить под различные условия, например монтировать не NFS, а SMB или просто внешний диск
Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
Комментарии (6)
ifaustrue
12.12.2016 11:22А только я ловил проблемы при использовании снепшотов в XenServer?
В том плане, что вот такой подход в итоге привел меня к тому, что производительность диска VM оочень замедлилась, а краткое расследование показало наличие десятков дельта файлов, которые Xen никак не мог смёржить с основным разделом и делал снепшоты один поверх другого, с каждой новой итерацией «поедая» драгоценные IOPS.
В итоге конечно всё решилось — пара часов машина полежала выключенной и всё смёржилось, но осадочек остался.iriswind
12.12.2016 13:37Также сталкивался с подобной проблемой. При типе хранилища lvm, если диск VM большой в объеме и свободного места в хранилище мало, то удалить снепшот была задача нетривиальная.
iriswind
12.12.2016 12:07Продолжительное время использую скрипт Andy Burton.
http://www.andy-burton.co.uk/blog/.
xxz
12.12.2016 17:13XenCenter позволяет создавать снепшоты и сохранять их в файл, не выключая машину (конечно, если на ней установлен XenTools.
Это vm-snapshot-with-quiesce зависит от установленных xentools, а для vm-snapshot этого не требуется.
Мы раньше бэкапили не все запущенные виртуалки, а только с тэгом backup:
xe vm-list tags:contains=backup ...
Добавляешь к виртуалке тэг — она начинает бэкапится, убираешь — перестает. Нам так было удобнее.
Позднее, чтобы ничего не запускать на хостнодах и не монтировать всякие NFS, вынесли бэкапы на отдельный хост, который общается с xen'ом через XenAPI. Пример получения списка виртуалок для бэкапа:
... all_vms = xen_session.xenapi.VM.get_all_records() for vm in all_vms: record = all_vms[vm] if not record["is_control_domain"] and not record["is_a_template"] and record["power_state"] == "Running" and not 'Transfer' in record["name_label"] and "backup" in record["tags"]: backup_vms.append((vm, record["name_label"])) logging.info("%s added for backup" % record["name_label"]) ...
Бэкапить надо не только сами виртуалки, но еще и метаданные пула и сами хостноды.
Сейчас переходим на vdi-export, поскольку это позволяет в каких-то случаях исключать из бэкапа ненужные диски, а так же делает возможным делать incremental-бэкапы, как это реализовано в XO.
bravo-ej
13.12.2016 11:24Кто бы сделал доброе дело и написал бы просто про Xen, свободно распространяемый.
D1abloRUS
Есть у меня роль ansible, https://github.com/D1abloRUS/xenserver-backupvm, бэкапит вм из списка на стордж подключенный, можете переписать как вам угодно. На стордж, потому что время восстановления из бэкапа меньше 5 сек, так же там есть в репе есть роль, которая апдейты на ксен накатывает разных версий, тож ansible и нотификации шлет если новый апдейт вышел, вроде как работает начиная с версия ксена 6.2 и по 7