BackUp ESXi VMs скриптами ghettoVCB

Выкладываю инструкцию по настройке автоматического резервного копирования виртуальных машин, работающих на платформе ESX(i) с помощью свободных скриптов ghettoVCB.


Работоспособность проверена на версиях 6.x. Бэкап будет производиться на NFS-сервер. Отчёт о результатах выполнения будет направлен в почту.

Во время бэкапа делается снимок виртуальной машины (в том числе и работающей), копируются VMDK диски машины и снимок удаляется. Надеюсь, что инструкция будет полезна системным администраторам.

Для начала нужно приготовить NFS-сервер, куда будут сливаться бэкапы. В моём случае это OpenMediaVault. Настройка на ESXi сервере производится по SSH от пользователя root.


Включаем SSH на хосте, берём скрипты отсюда, помещаем содержимое на сервер и распаковываем. В моем случает это datastore с именем system, где 598c312c-52d5a7c9-cef9-e4115bd9c13c - внутрисистемное имя папки system (у вас будет отличаться) , в корне которого лежит папка ghettoVCB-master. Ставим бандл и заходим в эту папку и обязательно ставим бит исполнения, иначе скрипты работать не будут:


esxcli software vib install -d /vmfs/volumes/598c312c-52d5a7c9-cef9-e4115bd9c13c/ghettoVCB-master/vghetto-ghettoVCB-offline-bundle.zip -f
cd /vmfs/volumes/598c312c-52d5a7c9-cef9-e4115bd9c13c/ghettoVCB-master/
chmod +x ghettoVCB.sh
chmod +x ghettoVCB-restore.sh

Резервное копирование виртуальных машин (далее ВМ) будем производить ежедневно с ротацией в 3 копии. Разберем содержимое файла ghettoVCB.conf:


BACKUP_VOLUME=/vmfs/volumes/backup_nfs
DISK_BACKUP_FORMAT=thin
VM_BACKUP_ROTATION_COUNT=3
POWER_VM_DOWN_BEFORE_BACKUP=0
ENABLE_HARD_POWER_OFF=0
ITER_TO_WAIT_SHUTDOWN=3
POWER_DOWN_TIMEOUT=5
ENABLE_COMPRESSION=0
ALLOW_VMS_WITH_SNAPSHOTS_TO_BE_BACKEDUP=1
ENABLE_NON_PERSISTENT_NFS=1
UNMOUNT_NFS=1
# NFS сервер, куда будут лететь бэкапы
NFS_SERVER=192.168.88.22
NFS_MOUNT=/export/nfs
NFS_LOCAL_NAME=backup_nfs
NFS_VM_BACKUP_DIR=88.99
SNAPSHOT_TIMEOUT=15
EMAIL_LOG=1
EMAIL_SERVER=mail.server.ru
EMAIL_SERVER_PORT=25
EMAIL_DELAY_INTERVAL=1
EMAIL_TO=it @ server.ru
EMAIL_FROM=ghettoVCB @ server.ru
WORKDIR_DEBUG=1
VM_SHUTDOWN_ORDER=
VM_STARTUP_ORDER=

Разбор параметров


VM_BACKUP_VOLUME=/vmfs/volumes/backup_nfs/ - путь на сервере ESXi, куда будет монтироваться nfs раздел;
DISK_BACKUP_FORMAT=thin - формат VMDK диска, который будет создан при бэкапе;
VM_BACKUP_ROTATION_COUNT=3 - количество хранимых бэкапов;
POWER_VM_DOWN_BEFORE_BACKUP=0 - не выключаем машину перед бэкапом;
ENABLE_COMPRESSION=0 - не жмём данные, оставляем это на zfs;
ALLOW_VMS_WITH_SNAPSHOTS_TO_BE_BACKEDUP=1 - бэкап машин со снапшотами;
ENABLE_NON_PERSISTENT_NFS=1 - nfs диск будет подключатся только на время бэкапа;
UNMOUNT_NFS=1 - а после отключатся;
NFS_SERVER=192.168.88.22 и NFS_MOUNT=/backups - координаты nfs диска;
NFS_LOCAL_NAME=backup_nfs - имя, которое будет присвоено подключенному массиву (datastores identification);
NFS_VM_BACKUP_DIR=88.99 - путь, куда будут складываться копии (относительно VM_BACKUP_VOLUME);
EMAIL_LOG=1 - включаем отправку отчёта по почте;
EMAIL_* - настройки параметров вашего почтовика.

Создаём список машин, которые необходимо бэкапить командой:


esxcli vm process list

Редактируем файл vms.list, куда заносим названия виртуальных машин (каждую отдельной строкой):


vi vms.list

xp
1c-server
sql-server

Настраиваем cron на выполнение регулярное выполнение задачи:


vi /var/spool/cron/crontabs/root

добавляя в конце файла строку:


00   18   *   *   *  /vmfs/volumes/598c312c-52d5a7c9-cef9-e4115bd9c13c/ghettoVCB-master/ghettoVCB.sh -f /vmfs/volumes/598c312c-52d5a7c9-cef9-e4115bd9c13c/ghettoVCB-master/vms.list -g /vmfs/volumes/598c312c-52d5a7c9-cef9-e4115bd9c13c/ghettoVCB-master/ghettoVCB.conf

vi /etc/rc.local.d/local.sh

добавляя в конце файла строки:


/bin/kill $(cat /var/run/crond.pid)
/bin/echo "00   18   *   *   *  /vmfs/volumes/598c312c-52d5a7c9-cef9-e4115bd9c13c/ghettoVCB-master/ghettoVCB.sh -f /vmfs/volumes/598c312c-52d5a7c9-cef9-e4115bd9c13c/ghettoVCB-master/vms.list -g /vmfs/volumes/598c312c-52d5a7c9-cef9-e4115bd9c13c/ghettoVCB-master/ghettoVCB.conf > /var/log/ghettoVCB-backup-week-$((($(date +\%d)-1)/4+1)).log" >> /var/spool/cron/crontabs/root
/bin/echo "" >> /var/spool/cron/crontabs/root
crond

Некоторые пользователи пишут, что после редактирования файла не могу его сохранить, т.к. получают ошибку записи. Чтобы она не возникала после окончания редактирования необходимо нажать Esc, затем :wq! (двоеточие и восклицательный знак обязательны). Т.к. восклицательный знак принудительно перезаписывает файл.

Параметры времени запуска


* * * * *   - выполняемая команда
- - - - -
| | | | |
| | | | ----- День недели (0 - 7) (Воскресенье =0 или =7) | | | ------- Месяц (1 - 12) | | --------- День (1 - 31) | ----------- Час (0 - 23) ------------- Минута (0 - 59)

Системное время идёт в UTC, потому необходимо делать поправку на текущий часовой пояс. В моём случае +4 часа, т.е. скрипт запустится в 22.00. Логи писать обязательно (или переправлять в /dev/null), иначе при переполнении буфера, отведённого для пользователя, скрипт может зависнуть. Конструкция $((($(date +\%d)-1)/7+1)) выдаёт номер недели в месяце, таким образом не наплодим мусора.

Далее команды в терминале:


esxcli software vib install -v /vmfs/volumes/598c312c-52d5a7c9-cef9-e4115bd9c13c/ghettoVCB-master/mailFirewall.vib -f
esxcli software vib list | grep mail
esxcli network firewall refresh
kill $(cat /var/run/crond.pid)
crond

Далее в командной строке:


nc mail.server.ru 25

Отступление о postfix


# vi /etc/postfix/accepted_unauth_senders
ghettoVCB @ server.ru OK
192.168.0.98 OK
# postmap hash:/etc/postfix/accepted_unauth_senders

Добавляем строки в файл /etc/postfix/main.cf в раздел smtpd_sender_restrictions и приводим к следующему виду:


# vi /etc/postfix/main.cf
smtpd_sender_restrictions = check_sender_access hash:/etc/postfix/accepted_unauth_senders
mynetworks = 127.0.0.1, 192.168.0.98

Добавляем строки в файл /opt/iredapd/settings.py


# vi /opt/iredapd/settings.py

ALLOWED_FORGED_SENDERS = ['ghettoVCB @ server.ru']
MYNETWORKS = ['192.168.0.98', '192.168.0.0/24']

соответственно вашу подсеть подставляем и адрес почтовика ваш.

Запустить тестовую проверку бэкапа машины с именем «xp» можно следующей командой:


/vmfs/volumes/598c312c-52d5a7c9-cef9-e4115bd9c13c/ghettoVCB-master/ghettoVCB.sh -g /vmfs/volumes/598c312c-52d5a7c9-cef9-e4115bd9c13c/ghettoVCB-master/ghettoVCB.conf -m xp -d dryrun

Запустить в ручную для списка машин:


/vmfs/volumes/598c312c-52d5a7c9-cef9-e4115bd9c13c/ghettoVCB-master/ghettoVCB.sh -f /vmfs/volumes/598c312c-52d5a7c9-cef9-e4115bd9c13c/ghettoVCB-master/vms.list -g /vmfs/volumes/598c312c-52d5a7c9-cef9-e4115bd9c13c/ghettoVCB-master/ghettoVCB.conf

Учтите, что ВМ, резервирование которой производилось на горячую, после восстановления будет как после внезапного выключения питания - возможна потеря данных внутри машины.
Подключаем хранилище с бэкапом на целевой ESXi сервер по NFS, либо просто копируем туда данные по ssh.


Fuse

Адрес электронной почты защищен от спам-ботов. Для просмотра адреса в браузере должен быть включен Javascript.