7.6. Резервное копирование и восстановление

Интерфейс командной строки openstack предоставляет инструменты для создания резервной копии тома и обратной операции – восстановления из неё тома, зарезервированного в определенный момент времени.

Внимание.

Восстановить том из резервной копии можно при условии, что связанная с резервной копией информация (или метаданные резервной копии) не повреждена в БД блочного хранилища (Cinder).

7.6.1. Создание резервной копии виртуального диска

Используйте скрипт (Cinder backup), который выглядит следующим образом:

#!/bin/bash

# Настройка окружения OpenStack
source /root/admin-openrc.sh

# Указать ID тома (диска), который необходимо забэкапить
volume_id=3f0c987e-706a-4099-855e-a4522493fc95

# Имя образа диска, которое получим на выходе c расширением qcow2
image_name=test-603

# Раздел для переконвертации образа диска
temp_dir=/home/tionix/tmp

# Переменная, добавляющая текущее время-дату к названию образа
now=$(date +"%H%M_%d%m%Y")

# Целевой раздел, куда складывается бэкап
backup_dir=/home/tionix

set -e

# Создаем снимок тома (диска)
openstack volume snapshot create --volume $volume_id --force snap-for-backup
for i in {1..120}
do
status=$(openstack volume snapshot list |grep snap-for-backup | awk '{print$8}')
  if [ "$status" == "available" ] then break fi
  sleep 10
done

# Создаем том (диск) из снимка
openstack volume create --snapshot snap-for-backup disk-for-backup
for i in {1..120}
do
  status=$(openstack volume list |grep disk-for-backup | awk '{print$6}')
  if [ "$status" == "available" ] then break fi
  sleep 10
done

# Создаем образ из тома (диска)
cinder upload-to-image disk-for-backup image-to-backup
for i in {1..120}
do
  status=$(openstack image list |grep image-to-backup | awk '{print$6}')
  if [ "$status" == "active" ] then break fi
  sleep 10
done

# Сохраняем образ в локальной директории
openstack image save --file $temp_dir/backup_file_disk.raw image-to-backup

# Сжимаем (оптимизируем) образ в формат QCOW2
qemu-img convert -f raw -O qcow2 -c -p $temp_dir/backup_file_disk.raw $temp_dir/$image_name-$now.qcow2

# Сохраняем в целевой раздел
rsync -auvP $temp_dir/$image_name-$now.qcow2 $backup_dir

# Очищаем пространство от промежуточных объектов (временных файлов)
openstack snapshot delete snap-for-backup
openstack volume delete disk-for-backup
openstack image delete image-to-backup
rm -f $temp_dir/backup_file_disk.raw
rm -f $temp_dir/$image_name-$now.qcow2

echo Backup successfully completed.
echo Path to copy: $backup_dir/$image_name-$now.qcow2

7.6.2. Восстановление диска (из резервной копии)

Скопируйте с помощью команды scp (безопасное копирование SSH) на один из контроллеров (отказоустойчивого кластера). Подключитесь к этому контроллеру (УУ) и выполните команду:

openstack image create \\
--container-format bare \\
--disk-format qcow2 \\
--public \\
--file /backup/stor/backup_file_disk.qcow2 \\
--property hw_scsi_model='virtio-scsi' \\
--property hw_disk_bus='scsi' \\
--property hw_qemu_guest_agent='yes' \\
--property hw_video_model='qxl' \\
<название_образа>

где

/backup/stor/backup_file_disk.qcow2 – полный путь к файлу образа.

После успешного завершения операции загрузки создайте ВМ, с указанием загруженного резевного образа диска с помощью интерфейса управления TIONIX.Dashboard.

7.6.3. Создание резервной копии тома (моментального снимка)

Для создания резервной копии тома необходимо выполнить команду:

$ openstack volume backup create [--incremental] [--force] VOLUME

где:

VOLUME – имя или идентификатор тома;

--incremental – параметр, указывающий, следует ли выполнять инкрементное резервное копирование;

--force – параметр, разрешающий или запрещающий резервное копирование тома присоединенного к виртуальной машине.

Со значением параметра --incremental создается инкрементная резервная копия. При отсутствии параметра создается полная резервная копия (по умолчанию).

При отсутствии параметра --force резервное копирование тома будет выполняться при условии, что статус тома – available. При указании этого параметра том будет создаваться независимо от его статуса (available/in-use).

Статус in-use означает, что том используется – присоединен к виртуальной машине. Резервное копирование тома со статусом in-use означает, что данные идентичны и непротиворечивы. По умолчанию, параметр --force не указан.

Инкрементное резервное копирование основано на родительской резервной копии, которая является существующей резервной копией с последней меткой времени. Родительская резервная копия может быть полной резервной копией или инкрементной резервной копией в зависимости от метки времени. Первая резервная копия тома должна быть полной резервной копией.

Примечание.

Попытка выполнить инкрементное резервное копирование без существующих резервных копий завершится неудачей. Также применяется параметр „is_incremental“, который указывает (при отображении сведений о резервной копии), является ли резервная копия инкрементной.

Другой параметр – „has_dependent_backups“ – возвращается при отображении сведений о резервном копировании, указывает, имеет ли резервная копия зависимые резервные копии. Если значение параметра – true, то попытка удалить эту резервную копию завершится неудачей.

Параметр „configure backup_swift_block_size“ введен в конфигурационный файл (cinder.conf) для драйвера резервного копирования Swift (по умолчанию). Значение этого параметра – размер в байтах, который отслеживается для инкрементных резервных копий.

Параметр „backup_swift_object_size“ – размер в байтах объектов Swift backup, должен быть кратным значению параметра „backup_swift_block_size“. Значения параметров по умолчанию:

-32768 – для „backup_swift_block_size“; 52428800 – для „backup_swift_object_size“.

Параметр „backup_swift_enable_progress_timer“ в конфигурационном файле (cinder.conf) используется при резервном копировании тома в хранилище объектов. Этот параметр включает или отключает таймер.

По умолчанию, включена отправка периодических уведомлений о ходе выполнения в службу телеметрии (TCP3_base-metrics).

Эта команда также возвращает идентификатор резервной копии, который необходимо использовать при восстановлении тома, выполняемом командой:

openstack volume backup restore BACKUP_ID VOLUME_ID

7.6.4. Восстановление тома и моментальных снимков

Восстановление из полной резервной копии – это полное восстановление.

Восстановление из инкрементной резервной копии сопровождается построением списка резервных копий на основе идентификаторов родительских резервных копий: сначала выполняется полное восстановление на основе полной резервной копии; далее, восстановление выполняется на основе инкрементной резервной копии; копии располагаются упорядоченно.

Просмотр списка резервных копий осуществляется с помощью команды:

openstack volume backup list

где необязательные аргументы для уточнения статуса резервных копий:

  • --name;
  • --status;
  • --volume;

Данные аргументы могут использоваться для фильтрации резервных копий: по указанному имени, по статусу или по идентификатору тома.

Поиск с параметром --all-projects для получения подробной информации о проектах, связанных с перечисленными резервными копиями.

Поскольку резервные копии томов зависят от базы данных хранения блоков, необходимо также регулярно создавать резервные копии базы данных хранения блоков для обеспечения восстановления данных.

Примечания.

Кроме того, можно экспортировать и сохранять метаданные выбранных резервных копий томов. Это исключает необходимость резервного копирования всей базы данных хранения блоков.

Если при настройке спецификаций тома указать ключ шифрования UUID, метаданные резервного копирования гарантируют, что ключ останется действительным при резервном копировании и восстановлении тома.

По умолчанию, хранилище объектов (Swift) используется для хранилища резервных копий. Если требуется использовать экспорт NFS в качестве хранилища резервных копий, то необходимо добавить в конфигурационный файл (cinder.conf) следующие параметры:

[DEFAULT]

backup_driver = cinder.backup.drivers.nfs
backup_share = HOST:EXPORT_PATH

Далее перезапустите службу блочного хранения.

Для параметра „backup_share“ замените значение HOST с разрешенным именем хоста DNS или IP-адресом сервера хранения для общего ресурса NFS, а значение EXPORT_PATH – значением пути к этому общему ресурсу (NFS back-store).

Если требуется, чтобы для общего ресурса были указаны параметры монтирования, отличные от стандартных, то следует задать их:

backup_mount_options = MOUNT_OPTIONS

где

MOUNT_OPTIONS – разделенная запятыми строка параметров монтирования NFS (как описано на справочной странице NFS).

Существует несколько других параметров, значения по умолчанию которых могут быть переопределены в зависимости от конкретного окружения:

backup_compression_algorithm = zlib
backup_sha_block_size_bytes = 32768
backup_file_size = 1999994880

Параметр „backup_compression_algorithm“ может иметь значения: zlib, bz2, zstd или none.

Примечание.

Значение none может быть полезным, когда сервер, предоставляющий общий ресурс для хранилища резервных копий, сам выполняет дедупликацию или сжатие данных резервной копии.

Параметр конфигурации „backup_max_operations“ позволяет указать максимальное количество операций резервного копирования и восстановления, которые могут выполняться одновременно.

Параметр „backup_file_size“ должен иметь значение кратное значению „backup_sha_block_size_bytes“. Фактически, это максимальный размер файла, который будет использоваться, с учетом конкретного окружения, для хранения резервных данных. Тома большего размера будут храниться в нескольких файлах в хранилище резервных копий.

Параметр „backup_sha_block_size_bytes“ определяет размер блоков резервного копирования тома cinder, для которых вычисляются цифровые подписи, чтобы включить возможность инкрементного резервного копирования.

Также, есть возможность сбросить состояние резервной копии. В процессе создания или восстановления резервной копии иногда возникает проблема, такая как сбой базы данных или очереди сообщений RabbitMQ. В подобных ситуациях сброс состояния резервной копии может восстановить ее функциональное состояние.

Для восстановления состояния резервной копии выполнить команду:

$ cinder backup-reset-state [--state STATE] BACKUP_ID-1 BACKUP_ID-2 ...

Для создания резервной копии моментального снимка выполнить команду:

$ openstack volume backup create [--incremental] [--force] \[--snapshot SNAPSHOT_ID] VOLUME

где

VOLUME – имя или идентификатор тома;

SNAPSHOT_ID – идентификатор моментального снимка тома.

7.6.5. Отмена текущей операции резервного копирования

Текущую операцию резервного копирования можно отменить для драйверов типа: Chunk Backup, Swift, NFS, Google, GlusterFS и Posix.

Для отмены резервного копирования необходимо запросить принудительное удаление резервной копии, выполнив команду:

$ openstack volume backup delete --force BACKUP_ID

Примечание.

Политика принудительного удаления по умолчанию используется только для администратора.

Чтобы выполнить отмену восстановления резервной копии, необходимо изменить ее статус с «восстановление» на состояние «ошибка», во избежание путаницы в том, было ли восстановление успешным или нет:

$ openstack volume backup set --state error BACKUP_ID

Параметр „backup_max_operations“ позволяет выбрать максимальное количество операций резервного копирования и восстановления, которые могут выполняться одновременно. Данный параметр имеет значение по умолчанию 15, означающее, что есть возможность иметь 15 одновременных резервных копий, или 15 одновременных восстановлений, или любую комбинацию резервных копий и восстановлений, если сумма двух групп операций не превышает 15.

Ограничение параллелизма этого параметра конфигурации также применяется при запуске нескольких процессов для одной и той же службы резервного копирования с помощью параметра „backup_workers“.

Это – глобальное ограничение для службы, а не для каждого процесса. Поэтому, параметр будет работать на всех запущенных процессах из одной и той же службы резервного копирования.

Объем памяти (ОЗУ), используемый во время операции, зависит от настроенного размера блока, а также от степени сжатия, достигнутой для данных во время операции.