Средства для резервного копирования информации можно разделить на несколько категорий:
— Для домашнего/офисного применения (резервирование важных документов, фотографий и пр. на NAS либо в облако);
— Для средних и крупных (offline) предприятий (резервирование важных документов, отчетности, баз данных и пр. как на серверах так и на рабочих станциях сотрудников);
— Для малых веб-проектов (резервирование файлов и баз данных с хостинговой площадки либо VPS/VDS на удаленный хост (или наоборот));
— Для крупных веб-проектов с распределенной архитектурой (почти то же самое, что и на offline-предприятиях только с учетом работы в глобальной сети, а не локальной, и как правило с использование open source средств).
С программными продуктами для дома и офиса все достаточно просто есть масса решений как открытых так и проприетарных, от cmd/bash скриптов до решений известных производителей ПО.
В enterprise секторе все достаточно скучно есть масса программных продуктов которые давно и успешно работают на многих предприятиях, в крупных банках и пр, рекламировать никого не будем. Многие их этих продуктов хорошо упростили жизнь системных администраторов, за достаточно «скромные деньги» по меркам некоторых предприятий.
В данной статье более подробно рассмотрим open source решения для резервного копирования веб-проектов разного масштаба, а также проведем тест на скорость резервирования файлов.
Статья будет полезна веб-мастерам, небольшим веб-студиям, ну и возможно даже бывалый админ найдет здесь что-то полезное.
Что нужно для резервирования небольшого сайта или блога, или нескольких сайтов, например с VPS-ки на которой дискового пространства впритык?
Напрашивается резервирование на удаленный хост. Т.е. чтобы сэкономить драгоценное место на вашем хостинге или VPS, вы можете подключаться, например со своего домашнего/офисного компьютера (возможно у вас есть NAS), по протоколам ftp или sftp, вручную или по расписанию забирать файлики и бережно складывать их каком-то надежном месте. Сойдет любой клиент ftp или sftp, хороший вариант rsync.
С Rsync выглядит это примерно так:rsync -avzPch [email protected]:/path/to/copy /path/to/local/storage
И это вроде бы неплохо, но что если нужно хранить несколько версий бекапов БД? Или по каким-то причинам понадобилось делать инкрементальные копии, а еще бы неплохо и шифрование добавить. Можно немножко посидеть и сделать хороший велосипед скрипт под свои нужды (например наш rsync-backup), либо взять что-то из готовых утилит.
Рассмотрим несколько утилит которые подойдут для различных случаев применения, в частности и для случая описанного выше.
Duplicity
Duplicity консольная утилита для резервного копирования с достаточно широкими возможностями.
Существует несколько графических оболочек для Duplicity — Deja-dup для среды Gnome и test-drive для KDE. Также существует консольная обертка duply.
Duplicity производит бекап в зашифрованные тома в tar-формате локально или на удаленный хост. Делать инкрементальные записи файлов позволяет библиотека librsync, для компрессии используется gzip и gpg делает шифрование.
Конфигурационного файла нет. Автоматизировать процесс резервирования придется самому.
Примеры использования:
Резервирование локальной папки на удаленный хостduplicity /usr scp://host.net/target_dir
Резервирование с удаленного хоста в локальную папкуduplicity sftp://[email protected]/var/www /home/backup/var/www
Восстановлениеduplicity restore /home/backup/var/www sftp://[email protected]/var/www
Про Duplicity уже были статьи на Хабре, поэтому не будем заострять на ней внимание.
Rsnapshot
Про rsnapshot также не мало сказано на Хабре, тут и тут. А здесь еще хорошая статья. Rsnapshot в целом, хороший инструмент для создания инкрементальных бекапов (снапшотов). Написан на perl, использует rsync для копирования файлов. Достаточно быстрый (быстрее rdiff-backup) и неплохо экономит место на диске за счет жестких ссылок. Умеет делать pre и post-backup операции, не умеет (без костылей) шифровать и делать бекап на удаленный хост. Файлы хранятся в первозданном виде — легко восстанавливать. Достаточно удобно организовано конфигурирование. Поддерживает несколько временных уровней резервирования (дневной, недельный, месячный). Есть достаточно активное сообщество.
После того как вы пропишете в конфиге необходимые строки (что бекапить и куда), можно запустить бекап:rsnapshot -v hourly
По умолчанию будет храниться несколько ежечасных и дневных снапшотов. От прочих утилит Rsnapshot отличается тем что он из коробки автоматизирован (актуально для Debian/Ubuntu), т.е. в крон пропишутся необходимые строки, а в конфиге прописано резервирование каталогов «/home», «/etc», «/usr/local»
Rdiff-backup
Rdiff-backup очень похож на Rsnapshot, но в отличии от него написан на Python и использует библиотеку librsync для передачи данных. Умеет копировать файлы на удаленный хост, чем кстати мы довольно успешно пользовались и кое где еще пользуемся. Также можно делать бекап с удаленного хоста, но предварительно нужно установить там Rdiff-backup. Хранит информацию об изменениях файлов (дельты) в сжатом виде, хорошо для больших файлов, позволяет экономить место на диске даже по сравнению с rsnapshot.
Метаданные (права, даты, владелец) хранятся в отдельных файлах.
Запуск бекапа производится из консоли:rdiff-backup remote.host::/home/web/sites/ /home/backup/rdiff/
Наличие конфигурационного файла не предполагается. Автоматизировать придется самому.
Obnam
Obnam — открытое клиент-серверное приложение для резервного копирования, код программы написан на языке Python для передачи данных используется протокол SSH. Может эксплуатироваться в двух видах:
— Push резервирование с локального хоста на удаленный сервер на котором работает демон Obnam.
— Pull демон сам забирает файлы с удаленных хостов по протоколу ssh. В этом случае клиент Obnam не нужен.
Умеет делать снапшоты, дедупликацию и шифрование GnuPG. Резервные копии файлов хранятся в томах. Метаданные хранятся в отдельных файлах. Восстановление производится через консоль.
Небольшая выдержка из описания на Opennet (http://www.opennet.ru/opennews/art.shtml?num=39323):
«Предлагаемый в Obnam подход к резервному копированию нацелен на достижение трёх целей: обеспечение высокой эффективности хранения, простоты использования и безопасности. Эффективность хранения достигается благодаря размещению резервных копий в специальном репозитории, данные в котором хранятся в оптимальном представлении с использованием дедупликации. В одном репозитории могут храниться бэкапы разных клиентов и серверов. При этом объединение дубликатов осуществляется для всех хранимых бэкапов, независимо от их типа, времени создания и источника резервной копии. Для проверки целостности репозитория и его восстановления после сбоя предоставляется специальный вариант утилиты fsck.
Если на группе серверов используется одинаковая операционная система, то в репозитории будет сохранена только одна копия повторяющихся файлов, что позволяет существенно сэкономить дисковое пространство при организации резервного копирования большого числа типовых систем, например, виртуальных окружений. Репозиторий для хранения резервных копий может быть размещён как на локальном диске, так и на внешних серверах (для создания сервера для хранения резервных копий не требуется установка дополнительных программ, достаточно доступа по SFTP). Возможен доступ к резервным копиям через монтирование виртуального раздела при помощи специально подготовленного FUSE-модуля.»
Все это хорошо, НО для копирования на удаленный хост используется scp со всеми вытекающими.
Bacula
Bacula — кроссплатформенное клиент-серверное программное обеспечение, позволяющее управлять резервным копированием, восстановлением, и проверкой данных по сети для компьютеров и операционных систем различных типов. На данный момент Bacula можно использовать практически на любых unix-подобных системах (Linux (включая zSeries), NetBSD, FreeBSD, OpenBSD, Solaris, HP-UX, Tru64, IRIX, Mac OS X) и на Microsoft Windows.
Bacula также может выполняться полностью на единственном компьютере или, распределённо, на нескольких, и может записывать резервные копии на различные типы носителей, включая ленты, ленточные библиотеки (autochangers/libraries) и диски.
Bacula — это сетевая клиент-серверная программа для резервного копирования, архивирования и восстановления. Предлагая широкие возможности для управления хранилищами данных, облегчает поиск и восстановление потерянных или повреждённых файлов. Благодаря модульной структуре, Bacula масштабируется и может работать как на маленьких так и на крупных системах, состоящих из сотен компьютеров, расположенных в большой сети.
К Bacula имеются GUI и веб-интерфейсы (Almir, Webmin) различной степени сложности.
Некоторое время назад мне пришлось сильно и безрезультатно повозится с Almir чтобы запустить его на Debian Wheezy.
Bacula это надежная проверенная временем система резервного копирования в том числе хорошо зарекомендовавшая себя на многих крупных предприятиях. От Obnam принципиально Bacula отличается схемой работы. В случае варианта клиент-сервер Bacula будет являться 100% централизованной системой. Также необходимо наличие клиентского приложения на хосте который нужно бекапить. На сервере работают одновременно три демона SD, FD. DIR — Storage Daemon, File Daemon и Director соответственно. Нетрудно догадаться кто за что отвечает.
Резервные копии файлов Bacula хранит в томах. Метаданные хранятся в БД (SQLite, MySQL, PostgreSQL) Восстановление производится с помощью консольной утилиты либо посредством графической оболочки. Процесс восстановления через консоль, прямо скажем, не самый удобный.
Цифры
Я решил проверить скорость резервирования небольшой папки (626M) с несколькими сайтами на WP.
Для этого я даже не поленился развернуть и настроить весь этот софт. :)
Тест состоит из двух частей:
1. Участники Duplicity, Rsync, Rsnapshot, Rdiff-Backup. Копируем с удаленного сервера на домашний компьютер, при этом поскольку Rsnapshot не умеет делать remote-бекап, то он и Rdiff-backup (для сравнения) будут работать домашней машине, т.е. будут тянуть (pull) с файлы с сервера, а остальные наоборот, будут толкать (push) на домашнюю машину.
Все утилиты запускались с минимально необходимыми опциями.
Rsyncrsync -az /home/web/sites/ home.host:/home/backup/rsync
Full backup
Время выполнения:
real 4m23.179s
user 0m31.963s
sys 0m2.165s
Incremental
Время выполнения
real 0m49.883s
user 0m5.637s
sys 0m0.562s
Занимаемое место:626M /home/backup/duplicity/
Duplicityduplicity full /home/web/sites/ rsync://home.host//home/backup/duplicity
Full backup
Время выполнения:
real 5m52.179s
user 0m46.963s
sys 0m4.165s
Incremental
Время выполнения
real 0m49.883s
user 0m5.637s
sys 0m0.562s
Занимаемое место:450M /home/backup/duplicity/
Rsnapshotrsnapshot -v hourly
Full backup
Время выполнения:
real 4m23.192s
user 0m32.892s
sys 0m2.185s
Incremental
Время выполнения
real 0m5.266s
user 0m0.423s
sys 0m0.656s
Занимаемое место:626M /home/tmp/backup/rsnap/
Rdiff-backup
rdiff-backup remote.host::/home/web/sites/ /home/backup/rdiff/
Full backup
Время выполнения:
real 7m26.315s
user 0m14.341s
sys 0m3.661s
Incremental
Время выполнения
real 0m25.344s
user 0m5.441s
sys 0m0.060s
Занимаемое место:638M /home/backup/rsnap/
Результаты достаточно предсказуемы. Самый быстрый оказался Rsync, практически такой же результат у Rsnapshot. Duplicity немного медленней но меньше занимает места на диске. Rdiff-backup ожидаемо хуже.
2. Теперь интересное. Проверим как работают Obnam и Bacula. Оба решения достаточно универсальны плюс имеют некоторые сходства. Посмотрим кто шустрее.
Obnam
Первый раз я запустил копирование с удаленного хоста на свой домашний, ждать пришлось долго:
obnam backup —repository sftp://home.host/home/backup/obnam/ /home/web/sites/
Full backup
Backed up 23919 files, uploaded 489.7 MiB in 1h42m16s at 81.7 KiB/s average speed
Время выполнения:
real 102m16.469s
user 1m23.161s
sys 0m10.428s
obnam backup —repository sftp://home.host/home/backup/obnam/ /home/web/sites/
Incremental
Backed up 23919 files, uploaded 0.0 B in 3m8s at 0.0 B/s average speed
Время выполнения
real 3m8.230s
user 0m4.593s
sys 0m0.389s
Занимаемое место:544M /home/tmp/backup/rsnap/
Не очень хороший результат как мне кажется, хотя понятный.
Попробуем второй раз, но уже на соседний сервер по гигабитной сети и добавим компрессию.
obnam backup —compress-with=deflate —repository sftp://remote.host/home/backup/obnam/ /home/web/sites/
Full backup
Backed up 23919 files, uploaded 489.7 MiB in 2m15s at 3.6 MiB/s average speed
Время выполнения:
real 2m15.251s
user 0m55.235s
sys 0m6.299s
obnam backup —compress-with=deflate —repository sftp://remote.host/home/backup/obnam/ /home/web/sites/
Incremental
Backed up 23919 files, uploaded 0.0 B in 8s at 0.0 B/s average speed
Время выполнения
real 0m7.823s
user 0m4.053s
sys 0m0.253s
Занимаемое место:434M /home/tmp/backup/rsnap/
Так побыстрее и размер бекапа поменьше. Шифрование я не стал пробовать, может быть позже, если будет время.
Bacula
Для Bacula я подготовил полноценный клиент-сервер вариант. Клиент и сервер в одной гигабитной сети.
Задание я запустил в фоновом режиме и пошел пить чай. Когда вернулся обнаружил, что уже все готово, а в логе следующее:
...
Scheduled time: 23-Apr-2014 22:14:18
Start time: 23-Apr-2014 22:14:21
End time: 23-Apr-2014 22:14:34
Elapsed time: 13 secs
Priority: 10
FD Files Written: 23,919
SD Files Written: 23,919
FD Bytes Written: 591,680,895 (591.6 MB)
SD Bytes Written: 596,120,517 (596.1 MB)
Rate: 45513.9 KB/s
...
Я даже немного удивился. Все сделалось за 13 секунд, следующий запуск прошел за одну секунду.
Итого
С помощью rsnapshot вы можете легко решить задачу резевного копирования файлов и БД (c дополнительным скриптом) вашего VPS на ваш домашний компьютер/ноутбук/NAS. Также неплохо rsnapshot справится с небольшим парком серверов 10-25 хостов (можно и больше конечно, зависит от вашего желания). Rdiff будет хорош для бекапа больших файлов (Видео-контент, базы данных и пр.)
Duplicity поможет не только сохранить ваши данные в целости но защитить их в случае кражи (к сожалению от себя самого защититься нельзя, будьте внимательны и осторожны, храните ключи в надежном и недоступном никому постороннему месте).
Bacula — open source промышленный стандарт, поможет держать в сохранности данные большого парка компьютеров и серверов любого предприятия.
Obnam интересный инструмент имеющих ряд полезных достоинств, но я пожалуй рекомендовать никому не буду.
Если же, вас все таки, по каким-то причинам, не устраивает ни одно из этих решений, не стесняйтесь изобретать свои велосипеды. Это может стать полезным как для вас лично, так и для многих людей.