Выкладываю инструкцию по настройке автоматического резервного копирования виртуальных машин, работающих на платформе 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
# 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.