Pull to refresh

Comments 8

Есть у меня роль ansible, https://github.com/D1abloRUS/xenserver-backupvm, бэкапит вм из списка на стордж подключенный, можете переписать как вам угодно. На стордж, потому что время восстановления из бэкапа меньше 5 сек, так же там есть в репе есть роль, которая апдейты на ксен накатывает разных версий, тож ansible и нотификации шлет если новый апдейт вышел, вроде как работает начиная с версия ксена 6.2 и по 7
А только я ловил проблемы при использовании снепшотов в XenServer?

В том плане, что вот такой подход в итоге привел меня к тому, что производительность диска VM оочень замедлилась, а краткое расследование показало наличие десятков дельта файлов, которые Xen никак не мог смёржить с основным разделом и делал снепшоты один поверх другого, с каждой новой итерацией «поедая» драгоценные IOPS.
В итоге конечно всё решилось — пара часов машина полежала выключенной и всё смёржилось, но осадочек остался.
Также сталкивался с подобной проблемой. При типе хранилища lvm, если диск VM большой в объеме и свободного места в хранилище мало, то удалить снепшот была задача нетривиальная.
Продолжительное время использую скрипт Andy Burton.
http://www.andy-burton.co.uk/blog/.
XenCenter позволяет создавать снепшоты и сохранять их в файл, не выключая машину (конечно, если на ней установлен 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.
Кто бы сделал доброе дело и написал бы просто про Xen, свободно распространяемый.
Интересно, почему автор (tecadmin) ни слова не упомянул о консистентности при таком типе бэкапа?
А если внутри работает СУБД, так можно и в ногу себе выстрелить :)
Таким подходом хорошо бэкапить файловые помойки, например, но если внутри MySQL или еще чего, что в памяти хранит/обрабатывает транзакции — я бы рекомендовал останавливать базу или делать дамп перед снапшотом.
Ох, простите за некропостинг. :)
Sign up to leave a comment.

Articles