Резервное копирование ВМ ESXi скриптами ghettoVCB

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

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

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

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


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

# cd /vmfs/volumes/system/ghettoVCB-master
chmod u+x ghettoVCB.sh
chmod u+x ghettoVCB-restore.sh

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

VM_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.0.59
NFS_MOUNT=/export/backups
NFS_LOCAL_NAME=backup_nfs
# папка на NFS сервере (для каждого ESXi своя)
NFS_VM_BACKUP_DIR=autobackup/vm01
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=it @ 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.0.59 и NFS_MOUNT=/backups - координаты nfs диска;
NFS_LOCAL_NAME=backup_nfs - имя, которое будет присвоено подключенному массиву (datastores identification);
NFS_VM_BACKUP_DIR=autobackup/vm01 - путь, куда будут складываться копии (относительно VM_BACKUP_VOLUME);
EMAIL_LOG=1 - включаем отправку отчёта по почте;
EMAIL_* - настройки параметров вашего почтовика.

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

# esxcli vm process list

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

# vi week.list

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

# vi /var/spool/cron/crontabs/root

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

00    18   *   *   *    /vmfs/volumes/598c312c-52d5a7c9-cef9-e4115bd9c13c/ghettoVCB-master/ghettoVCB.sh -g /vmfs/volumes/598c312c-52d5a7c9-cef9-e4115bd9c13c/ghettoVCB-master/4week.conf -f /vmfs/volumes/598c312c-52d5a7c9-cef9-e4115bd9c13c/ghettoVCB-master/week.list > /var/log/ghettoVCB-backup-week-$((($(date +\%d)-1)/4+1)).log

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

Небольшое пояснение по параметрам времени запуска:

* * * * *   - выполняемая команда</span>

- - - - -

|  |  |  |  |

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

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

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

# kill $(cat /var/run/crond.pid)
# crond
# chmod 644 /etc/vmware/firewall/email.xml
# chmod +t /etc/vmware/firewall/email.xml
# vi /etc/vmware/firewall/email.xml

Приводим его к следующему виду:

<ConfigRoot>
  <service>
    <id>email</id>
    <rule id="0000">
      <direction>outbound</direction>
      <protocol>tcp</protocol>
      <porttype>dst</porttype>
      <port>25</port>
    </rule>
    <enabled>true</enabled>
    <required>false</required>
  </service></span>
</ConfigRoot>

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

# esxcli network firewall refresh
esxcli network firewall ruleset list | grep email
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']

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

Сначала копируем из папки vmfs/volumes/1c/ghettoVCB-master файл mailFirewall.vib в папку /tmp

# cp -R vmfs/volumes/1c/ghettoVCB-master/mailFirewall.vib /tmp
# esxcli software vib install -v /tmp/mailFirewall.vib -f
# esxcli software vib list | grep mail
# esxcli network firewall refresh

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

# /ghettoVCB-master/ghettoVCB.sh -g /ghettoVCB-master/4week.conf -d dryrun -m xdc

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

/ghettoVCB-master/ghettoVCB.sh -g /ghettoVCB-master/4week.conf -f /ghettoVCB-master/week.list

Едем дальше:

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

выходим с сохранением

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


Вот и всё. Спасибо за внимание.

Надеюсь, что у вас всё получилось.
Если же нет, то добро пожаловать в раздел КОНТАКТЫ

Компонент комментариев CComment

IT-admins

IT-admins

8.00 - 17.00

☎ +7 (8512) 755-888
☎ +7 (905) 480-5470
☎ +7 (917) 199-8113
info@it-admins.ru


IT-admins © 2018