Комментарии

Галерея

Опрос

Из каких стран идет больше всего спама, попыток взлома на ваши серверы?:

Резервное копирование с помощью rsnapshot

Аватар пользователя maximum

Серверов много, информация критична, что делать? Распространенный вопрос среди администраторов win и nix-систем. Проженные админы, наученные горьким опытом, в один голос скажут: "БЕКАПЫ СПАСУТ ЭТОТ МИР". Давай рассмотрим с тобой, мой милый друг, замечательную утилиту для инкрементального резервирования файловой системы - rsnapshot.

rsnapshot – Базирующаяся на rsync утилита на Perl для создания резервных копий. Особенностью является ориентация на создания полных снапшотов файловой системы через заданный интервал времени, для экономии места на диске, не изменившиеся с момента первого бэкапа файлы линкуются как hard link.

ставим:

# dpkg -l | grep rsnapshot
ii  rsnapshot                                  1.3.0-2                    all          local and remote filesystem snapshot utility

конфигурационный файл всего один, находится в /etc, зовется rsnapshot.conf
Как видно, конфигурация минимальна и проста, ВНИМАНИЕ! использовать только табы, никаких пробелов!

config_version	1.2
#директория для снапшотов, осторожно! подготовьте для резервного копирования раздел с избыточным местом, данных много - места будет кушать много
snapshot_root	/var/backups/
#утилиты, которые понадобятся для копирования
#################################
# EXTERNAL PROGRAM DEPENDENCIES #
#################################
cmd_cp			/bin/cp
cmd_rm			/bin/rm
cmd_rsync		/usr/bin/rsync
cmd_ssh			/usr/bin/ssh
cmd_logger		/usr/bin/logger
cmd_du			/usr/bin/du
cmd_rsnapshot_diff	/usr/bin/rsnapshot-diff
#тип, количество копий для каждого бекапа (часы, дни, недели, месяцы)
#########################################
#           BACKUP INTERVALS            #
#########################################
interval	hourly		12
interval	daily		7
interval	weekly		4
interval	monthly		3
 
############################################
#              GLOBAL OPTIONS              #
############################################
verbose		2 #уровень информирования, когда утилита запущена, это значение установлено по умолчанию - показывать только предупреждения и ошибки
loglevel	3 #почти тоже самое, что и verbose, но здесь мы указываем насколько детально писать в логи
lockfile	/var/run/rsnapshot.pid
link_dest	1 #поддержка ссылок
 
###############################
### BACKUP POINTS / SCRIPTS ###
###############################
#что копировать, куда копировать
#server 1
backup	root@server1.ru:/etc/			server1.ru/
backup	root@server1.ru:/home/			server1.ru/
backup	root@server1.ru:/var/backups/postgresql/	server1.ru/
#server2
backup	root@server2.com:/etc/			server2.com/
backup	root@server2.com:/home/someuser/	server2.com/
backup	root@server2.com:/usr/share/tomcat5.5/	server2.com/
 
#Также, делаем бекап локальной файловой системы
# local
backup	/etc/					local/
backup	/home/someuser/				local/

Теперь немного о том, как будет происходить бекап. Утилита rsnapshot работает через протокол rsync, а он в свою очередь работает через ssh, поэтому нам необходимо создать пару ключей для сервера, на котором и будет запускаться rsnapshot+rsyncd, естественно следует учесть, что бекапы мы должны делать от суперпользователя root, иначе мы просто не сможем забрать файлы например из /etc.
Создаем пару ключей:
root# ssh-keygen
в /root/.ssh/ появились два файла id_rsa и id_rsa.pub, копируем содержимое публичного ключа, и вставляем в файл /root/.ssh/authorized_keys на удаленной машине (на машине, которую хотим забекапить), это нужно для того, чтобы при автоматическом копировании через ssh у нас не спрашивали пароль пользователя, думаю это очевидно!
Нам осталось добавить расписание в cron:

# cat /etc/cron.d/rsnapshot 
MAILTO=mail@gmail.com
0 */4	* * *	root	/usr/bin/rsnapshot hourly
30 3  	* * *	root	/usr/bin/rsnapshot daily
0  3  	* * 1	root	/usr/bin/rsnapshot weekly
30 2  	1 * *	root	/usr/bin/rsnapshot monthly

По прошествии некоторого времени, мы сможем увидеть директории с бекапами, для этого выполним команду:

# rsnapshot du
223G	/var/backups/hourly.0/
65M	/var/backups/hourly.1/
67M	/var/backups/hourly.2/
67M	/var/backups/hourly.3/
65M	/var/backups/hourly.4/
66M	/var/backups/hourly.5/
66M	/var/backups/hourly.6/
66M	/var/backups/hourly.7/
66M	/var/backups/hourly.8/
66M	/var/backups/hourly.9/
66M	/var/backups/hourly.10/
69M	/var/backups/hourly.11/
68M	/var/backups/daily.0/
67M	/var/backups/daily.1/
66M	/var/backups/daily.2/
1.7G	/var/backups/daily.3/
47G	/var/backups/daily.4/
91M	/var/backups/daily.5/
305M	/var/backups/daily.6/
343M	/var/backups/weekly.0/
410M	/var/backups/weekly.1/
977M	/var/backups/weekly.2/
429M	/var/backups/monthly.0/
32G	/var/backups/monthly.1/
305G	total

Ну вот и все, важные файлы и директории будут постоянно бекапиться, данный пример понадобится при не супер критичном использования сервера, другой вопрос, если есть highload проект, в этом случае реализация резервного копирования перетекает в настройку синхронной/асинхронной репликации средствами кластерных ФС и блочных устройств, но об этом поговорим в другой статье.
Полезные команды:
rsnapshot configtest - проверяет конфигурационный файл на наличие синтаксических ошибок
rsnapshot du - выведет листинг директорий с бекапами и размер занимаемый этой директорией
rsnapshot с ключом -t - тест-режим, покажет только выполняемые команды, без их выполнения
Полезные ссылки:
http://www.rsnapshot.org/