MyTetra Share
Делитесь знаниями!
Резервное копирование с помощью rsnapshot
Время создания: 28.04.2016 04:03
Раздел: Компьютер - Linux - Резервное копирование и синхронизация
Запись: xintrea/mytetra_syncro/master/base/1461805418k96lwrbeew/text.html на raw.github.com

Серверов много, информация критична, что делать? Распространенный вопрос среди администраторов 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 - тест-режим, покажет только выполняемые команды, без их выполнения


 
MyTetra Share v.0.65
Яндекс индекс цитирования