Трактат о сущности механизма бэкапов в Proxmox VE
В статье «Магия виртуализации: вводный курс в Proxmox VE» мы успешно установили на сервер гипервизор, подключили к нему хранилище, позаботились об элементарной безопасности и даже создали первую виртуальную машину. Теперь разберём, как реализовать базовые задачи, которые приходится выполнять, чтобы всегда иметь возможность восстановить работу сервисов в случае сбоя.
Штатные инструменты Proxmox позволяют не только выполнять резервное копирование данных, но и создавать наборы предварительно настроенных образов операционных систем для быстрого развёртывания. Это не только помогает при необходимости создать новый сервер для любого сервиса за несколько секунд, но и снижает время простоя до минимального.
Рассказывать о необходимости создания бэкапов мы не будем, поскольку это очевидно и уже давно является аксиомой. Остановимся на некоторых неочевидных вещах и особенностях.
Сначала рассмотрим, каким образом хранятся данные при процедуре резервного копирования.
Алгоритмы резервного копирования
Начнём с того, что Proxmox имеет неплохой штатный инструментарий для создания резервных копий виртуальных машин. Он позволяет легко сохранить все данные виртуальной машины и поддерживает два механизма сжатия, а также три метода создания этих копий.
Разберём сначала механизмы сжатия:
1. Сжатие LZO. Алгоритм сжатия данных без потерь, придуманный ещё в середине 90-х. Код был написан Маркусом Оберхюмером (реализуется в Proxmox утилитой lzop). Основной особенностью этого алгоритма является очень высокая скорость распаковки. Таким образом, любая резервная копия, созданная с помощью этого алгоритма, может быть при необходимости развёрнута за минимальное время.
2. Сжатие GZIP. При использовании этого алгоритма резервная копия «на лету» будет сжиматься утилитой GNU Zip, которая использует мощный алгоритм Deflate, созданный Филом Кацем. Основной упор делается на максимальное сжатие данных, что позволяет сократить место на диске, занимаемое резервными копиями. Главным отличием от LZO является то, что процедуры компрессии/декомпрессии занимают довольно много времени.
Режимы архивирования
Proxmox предлагает на выбор системному администратору три метода резервного копирования. С их помощью можно решить необходимую задачу, определив приоритет между необходимостью простоя и надёжностью сделанной резервной копии:
1. Режим Snapshot (Снимок). Этот режим можно назвать Live backup, поскольку для его использования не нужно останавливать работу виртуальной машины. Использование этого механизма не прерывает работу VM, но имеет два очень серьёзных недостатка — могут возникать проблемы из-за блокировки файлов операционной системой и самая низкая скорость создания. Резервные копии, созданные этим методом, нужно всегда проверять в тестовой среде. В противном случае есть риск, что при необходимости экстренного восстановления они могут дать сбой.
2. Режим Suspend (Приостановка). Виртуальная машина временно замораживает своё состояние до окончания процесса резервного копирования. Содержимое оперативной памяти не стирается, что позволяет продолжить работу ровно с той точки, где работа была прервана. Разумеется, это вызывает простой сервера на время копирования информации, зато нет необходимости выключения/включения виртуальной машины, что довольно критично для некоторых сервисов. Особенно если запуск части сервисов не является автоматическим. Тем не менее такие резервные копии также следует развёртывать в тестовой среде для проверки.
3. Режим Stop (Остановка). Самый надёжный способ резервного копирования, но требует полного выключения виртуальной машины. Отправляется команда на штатное выключение, после остановки выполняется резервное копирование и затем отдаётся команда на включение виртуальной машины. Количество ошибок при таком подходе минимально и чаще всего сводится к нулю. Резервные копии, созданные таким способом, практически всегда развёртываются корректно.
Выполнение процедуры резервирования
Для создания резервной копии:
1. Переходим на нужную виртуальную машину.
2. Выбираем пункт Резервирование.
3. Нажимаем кнопку Резервировать сейчас. Откроется окно, где можно будет выбрать параметры будущей резервной копии.Параметры резервной копии
4. В качестве хранилища указываем то, что мы подключали в предыдущей части.
5. После выбора параметров нажимаем кнопку Резервирование и ждём, пока резервная копия будет создана. Об этом будет говорить надпись TASK OK.
Теперь созданные архивы с резервными копиями виртуальных машин будут доступны для загрузки с сервера. Простейшим и самым банальным способом копирования является SFTP. Для этого воспользуйтесь популярным кроссплатформенным FTP-клиентом FileZilla, который умеет работать по SFTP-протоколу.
1. В поле Хост вводим IP-адрес нашего сервера виртуализации, в поле Имя пользователя вводим root, в поле Пароль - тот, который был выбран во время установки, а в поле Порт указываем "22" (или любой другой порт, который был задан для SSH-подключений).
2. Нажимаем кнопку Быстрое соединение и если все данные были введены правильно, то в активной панели Вы увидите все файлы, расположенные на сервере.
3. Переходим в директорию /mnt/storage. Все создаваемые резервные копии будут лежать в поддиректории «dump». Они будут иметь вид:
vzdump-qemu-номер_машины-дата-время.vma.gz в случае выбора метода сжатия GZIP;
vzdump-qemu-номер_машины-дата-время.vma.lzo при использовании метода LZO.
Резервные копии рекомендуется сразу загружать с сервера и хранить в надёжном месте, например, в нашем облачном хранилище. Если распаковать файл с разрешением vma, одноимённой утилитой, идущей в комплекте с Proxmox, то внутри будут файлы с расширениями raw, conf и fw. В этих файлах содержится следующее:
raw - образ диска;
conf - конфигурация VM;
fw — настройки файрвола.
Восстановление из резервной копии
Рассмотрим ситуацию, когда виртуальную машину случайно удалили и требуется её экстренное восстановление из резервной копии:
1. Открываем хранилище, где лежит резервная копия.
2. Переходим на вкладку Содержимое.
3. Выбираем нужную копию и нажимаем кнопку Восстановление.
Восстановление
4. Указываем целевое хранилище и ID, который будет присвоен машине после завершения процесса.
5. Нажимаем кнопку Восстановление.
Как только восстановление завершится, VM появится в списке доступных.
Клонирование виртуальной машины
Например, предположим, что в компании нужно внести изменения в любой критический сервис. Такое изменение реализуется через внесение множества правок в конфигурационные файлы. Результат при этом непредсказуем, и любая ошибка способна вызвать сбой сервиса. Чтобы подобный эксперимент не затронул работающий сервер, рекомендуется выполнить клонирование виртуальной машины.
Механизм клонирования создаст точную копию виртуального сервера, с которой можно проводить любые изменения, при этом не затрагивая работу основного сервиса. Затем, если изменения будут успешно применены, новая VM запускается в работу, а старая выключается. В этом процессе есть особенность, которую всегда следует помнить. На клонированной машине IP-адрес будет таким же, как и у исходной VM, то есть при её запуске возникнет конфликт адресов.
Расскажем, как избежать такой ситуации. Непосредственно перед выполнением клонирования следует внести изменения в конфигурацию сети. Для этого необходимо временно изменить IP-адрес, но не перезапускать сетевой сервис. После выполнения клонирования на основной машине следует вернуть настройки назад, а на клонированной машине установить любой другой IP-адрес. Тем самым мы получим две копии одного сервера на разных адресах. Это позволит быстро ввести новый сервис в работу.
Если этим сервисом является веб-сервер, достаточно лишь изменить А-запись у Вашего DNS-провайдера, после чего запросы клиентов по этому домену будут отправляться уже на адрес клонированной виртуальной машины.
Кстати, Selectel предоставляет всем своим клиентам услугу размещения любого количества доменов на серверах NS бесплатно. Управление записями осуществляется как с помощью нашей панели управления, так и с помощью специального API. Подробнее об этом читайте в нашей базе знаний.
Клонирование VM в Proxmox является очень простой задачей. Для его выполнения необходимо выполнить следующие действия:
1. Перейти на нужную машину.
2. Выбрать из меню More пункт Clone.
3. В окне заполнить параметр Имя.
4. Выполнить клонирование нажатием кнопки Clone.
Этот инструмент позволяет сделать копию виртуальной машины не только на локальном сервере. Если несколько серверов виртуализации объединить в кластер, с помощью этого инструмента можно сразу переместить созданную копию на нужный физический сервер. Полезной функцией является выбор дискового хранилища (параметр Target Storage), что очень удобно при перемещении виртуальной машины с одного физического носителя на другой.
Форматы виртуальных накопителей
Расскажем подробнее о форматах накопителей, используемых в Proxmox:
1. RAW. Самый понятный и простой формат. Это файл с данными жёсткого диска "байт в байт" без сжатия или оптимизации. Это очень удобный формат, поскольку его легко смонтировать стандартной командой mount в любой linux-системе. Более того, это самый быстрый «тип» накопителя, поскольку гипервизору не нужно его никак обрабатывать.
Серьёзным недостатком этого формата является то, что сколько вы выделили места для виртуальной машины, ровно столько места на жёстком диске и будет занимать файл в формате RAW (независимо от реально занятого места внутри виртуальной машины).
2. QEMU image format (qcow2). Пожалуй, самый универсальный формат для выполнения любых задач. Его преимущество в том, что файл с данными будет содержать только реально занятое место внутри виртуальной машины. Например, если было выделено 40 Гб места, а реально было занято лишь 2 Гб, всё остальное место будет доступно для других VM. Это очень актуально в условиях экономии дискового пространства.
Небольшим минусом работы с этим форматом является следующее: чтобы примонтировать такой образ в любой другой системе, нужно сначала загрузить особый драйвер nbd, а также использовать qemu-nbd утилиту, которая позволит операционной системе обращаться к файлу как к обычному блочному устройству. После этого образ станет доступным для монтирования, разбиения на разделы, проведения проверки файловой системы и других операций.
Следует помнить, что все операции ввода-вывода при использовании этого формата обрабатываются программно, что влечёт за собой замедление активной работы с дисковой подсистемой. Если стоит задача развернуть на сервере базу данных, лучше выбрать формат RAW.
3. VMware image format (vmdk). Этот формат является "родным" для гипервизора VMware vSphere и был включён в Proxmox для совместимости. Он позволяет выполнить миграцию виртуальной машины VMware в инфраструктуру Proxmox.
Использование vmdk на постоянной основе не рекомендуется, этот формат самый медленный в Proxmox, поэтому он годится лишь для выполнения миграции, не более. Вероятно, в ближайшем будущем этот недостаток будет устранён.
Работа с образами дисков
В комплекте с Proxmox есть очень удобная утилита под названием qemu-img. Одной из её функций является конвертирование образов виртуальных дисков. Чтобы воспользоваться ей, достаточно открыть консоль гипервизора и выполнить команду в формате:
qemu-img convert -f vmdk test.vmdk -O qcow2 test.qcow2
В приведённом примере vmdk-образ виртуального накопителя VMware под названием test будет преобразован в формат qcow2. Это очень полезная команда, когда нужно исправить ошибку при первоначальном выборе формата.
Благодаря этой команде можно принудительно создать нужный образ, используя аргумент create:
qemu-img create -f raw test.raw 40G
Такая команда создаст образ test в формате RAW размером 40 Гб. Теперь он подходит для подключения к любой из виртуальных машин.
Изменение размера виртуального диска
И в заключение покажем, как увеличить размер образа диска, если по каким-то причинам места на нём перестало хватать. Для этого воспользуемся аргументом resize:
qemu-img resize -f raw test.raw 80G
Теперь наш образ стал размером 80 Гб. Посмотреть подробную информацию об образе можно с помощью аргумента info:
qemu-img info test.raw
Не стоит забывать, что само расширение образа не увеличит размер раздела автоматически - просто добавит доступное свободное пространство. Для увеличения раздела воспользуйтесь командой:
resize2fs /dev/sda1
где /dev/sda1 – нужный раздел.
Автоматизация создания резервных копий
Использование ручного способа создания резервных копий – задача очень трудоёмкая и занимает много времени. Поэтому Proxmox VE содержит в себе средство для автоматического резервного копирования по расписанию. Рассмотрим, как это сделать:
1. Используя веб-интерфейс гипервизора, открываем пункт Датацентр.
2. Выбираем пункт Резервирование.
3. Нажимаем кнопку Добавить.
4. Устанавливаем параметры для планировщика.
5. Отмечаем галочкой пункт Включить.
6. Сохраняем изменения с помощью кнопки Создать.
Теперь планировщик будет автоматически запускать программу резервного копирования в указанное время, исходя из заданного расписания.
Заключение
Нами были рассмотрены штатные способы резервного копирования и восстановления виртуальных машин. Их использование позволяет без особых проблем сохранять все данные и экстренно восстановить их в случае внештатной ситуации.
Конечно, это не единственный возможный способ сохранения важных данных. Существует множество инструментов, например Duplicity, с помощью которых можно создавать полные и инкрементные копии содержимого виртуальных серверов на базе Linux.
При выполнении процедур резервного копирования всегда следует учитывать, что они активно нагружают дисковую подсистему. В связи с этим выполнять эти процедуры рекомендуется в моменты минимальной нагрузки, чтобы избежать задержек во время операций ввода-вывода внутри машин. Следить за статусом задержек дисковых операций можно непосредственно из веб-интерфейса гипервизора (параметр IO delay).
Если у Вас возникли вопросы, мы будем рады ответить на них в онлайн-чате или наших мессенджерах!.


