How-to`s — OpenVZ: простейший бекапинг контейнеров c помощью vzdump
Когда я нечаянно форматнул выделенный сервер одного пользователя и вспомнив о 5 нодах, на каждой из которых находится 10-15 клиентов, я ощутил то, что в простонародьи называют попаболь. Рецепт от сиих неприятных ощущений прост - делать ежедневные бекапы. На нодах имеется несколько винчестеров, и наипростейшим решением является бекап заархивированных контейнеров на него. Если у вас похожая ситуация - это руководство отлично вам подойдёт. Это относительно надёжный и эффективный способ сохранения данных пользователей.
Итак, приступим.
1. Разбиваем на разделы нужный нам винчестер (в моём случае sdb, главное не перепутать проверьте 5 раз!) с помощью fdisk:
Если у вас на этом винчестере остались старые и ненужные разделы, которые вы хотите удалить - вводите d, потом номер раздела
Для создания нового раздела - n, потом p (primery), потом 1, потом два раза ввод (в этом случае под основной раздел будет использован весь, если вам нужно несколько разных разделов - разбирайтесь в fdisk, там всё крайне просто)
Записываем изменения на диск - w, выходим q.
2. Форматируем новый раздел, ext3 меня вполне устраивает для хранения крупных файлов:
и монтируем его в стандартную папку для бекапа контейнеров
и не забываем прописать это дело в /etc/fstab:
Теперь место для хранения бекапов подготовлено и можно приступать к основному действу.
3. Ставим vzdump. В зависимостях у него cstream и perl(LockFile::Simple). В стандартных репах этих штук нет, можно можно найти и скачать нужные rpm пакеты из интернетов, но я не стал париться и просто подключил rpmforge:
Для CentOS 5 i386:
Для CentOS 5 x86_64:
После чего ставим нужные пакеты:
Качаем непосредственно vzdump, ссылки на последние версии обычно можно найти здесь. На данный момент это 1.2:
vzdump готов к применению.
4. Составляем нужные параметры для vzdump:
Наиболее замечательными параметрами для vzdump являются следующие:
--all бекапить все контейнеры
--exclude VPSID исключить из бекапа VPS с идентификатором VPSID
--exclude-path REGEX исключить из бекапа впсов определённые папки, которые можно задать с помощью регэкспа REGEX
--stdexcludes исключать временные файлы и логи из бекапа
--compress сжать бекапы, используется gzip
--dumpdir DIR папка, в которую непосредственно сливать бекапы
--mailto EMAIL почта, на которую уведомлять о результатах работы
--restore FILENAME запустить восстановление впса из файла бекапа
У меня получилось следующее:
Эта комманда запустит бекап всех контейнеров, исключая временные файлы и логи в них, в папку /vz/dump и с уведомлением на почту руту.
5. Создаем задание для крона для еженедельного бекапа всех контейнеров:
Я пошёл путём создания файла с заданием в /etc/cron.weekly:
Назовём файл допустим weekly.dump, сохраняем в /etc/cron.weekly и не забываем поставить на него права на исполнение:
Готово, можно идти пить чай :-)
Итак, приступим.
(!) Данное руководство подходит только для серверов на CentOS 5 i386 или x86_64! Не используйте его пожалуйста на других дистрибутивах, если вы плохо понимаете, что вы делаете!
1. Разбиваем на разделы нужный нам винчестер (в моём случае sdb, главное не перепутать проверьте 5 раз!) с помощью fdisk:
fdisk /dev/sdb
Если у вас на этом винчестере остались старые и ненужные разделы, которые вы хотите удалить - вводите d, потом номер раздела
Для создания нового раздела - n, потом p (primery), потом 1, потом два раза ввод (в этом случае под основной раздел будет использован весь, если вам нужно несколько разных разделов - разбирайтесь в fdisk, там всё крайне просто)
Записываем изменения на диск - w, выходим q.
2. Форматируем новый раздел, ext3 меня вполне устраивает для хранения крупных файлов:
mkfs.ext3 /dev/sdb1
и монтируем его в стандартную папку для бекапа контейнеров
1 2 |
mkdir -p /vz/dump |
и не забываем прописать это дело в /etc/fstab:
/dev/sdb1 /vz/dump ext3 defaults 1 1
Теперь место для хранения бекапов подготовлено и можно приступать к основному действу.
3. Ставим vzdump. В зависимостях у него cstream и perl(LockFile::Simple). В стандартных репах этих штук нет, можно можно найти и скачать нужные rpm пакеты из интернетов, но я не стал париться и просто подключил rpmforge:
Для CentOS 5 i386:
rpm -Uhv http://apt.sw.be/redhat/el5/en/i386/rpmforge/RPMS/rpmforge-release-0.3.6-1.el5.rf.i386.rpm
Для CentOS 5 x86_64:
rpm -Uhv http://apt.sw.be/redhat/el5/en/x86_64/rpmforge/RPMS/rpmforge-release-0.3.6-1.el5.rf.x86_64.rpm
После чего ставим нужные пакеты:
yum -y install perl-LockFile-Simple cstream
Качаем непосредственно vzdump, ссылки на последние версии обычно можно найти здесь. На данный момент это 1.2:
rpm -ivh http://www.proxmox.com/cms_proxmox/cms/upload/vzdump/vzdump-1.2-4.noarch.rpm
vzdump готов к применению.
4. Составляем нужные параметры для vzdump:
Наиболее замечательными параметрами для vzdump являются следующие:
--all бекапить все контейнеры
--exclude VPSID исключить из бекапа VPS с идентификатором VPSID
--exclude-path REGEX исключить из бекапа впсов определённые папки, которые можно задать с помощью регэкспа REGEX
--stdexcludes исключать временные файлы и логи из бекапа
--compress сжать бекапы, используется gzip
--dumpdir DIR папка, в которую непосредственно сливать бекапы
--mailto EMAIL почта, на которую уведомлять о результатах работы
--restore FILENAME запустить восстановление впса из файла бекапа
У меня получилось следующее:
vzdump --all --stdexcludes --mailto root@localhost --dumpdir /vz/dump
Эта комманда запустит бекап всех контейнеров, исключая временные файлы и логи в них, в папку /vz/dump и с уведомлением на почту руту.
5. Создаем задание для крона для еженедельного бекапа всех контейнеров:
Я пошёл путём создания файла с заданием в /etc/cron.weekly:
1 2 3 4 5 6 7 8 9 10 11 12 |
#!/bin/bash |
Назовём файл допустим weekly.dump, сохраняем в /etc/cron.weekly и не забываем поставить на него права на исполнение:
chmod 755 /etc/cron.weekly/weekly.dump
Готово, можно идти пить чай :-)