Настройка удалённого резервного копирования с помощью rsnapshot
- Главная
- >
- Статьи и переводы
- >
- Настройка удалённого резервного копирования с помощью rsnapshot
- >
Итак, мы имеем удаленный хост под управлением ubuntu, с некоторым массивом довольно критичных данных. Довольно логичным было бы настроить бэкап прямо на удаленном хосте, с помощью tar по крону, rsyns и т.д. Но, т.к. место на виртуальном выделенном хостинге довольно дорого и использовать его лучше по делу, идеально было бы, чтобы данные автоматически копировались на какую нибудь локальную машину, место на которой хоть отбавляй. В моем случае это файловый сервис в офисе, под управлением все той же Ubuntu.
rsnapshot — утилита для создания копий состояния файловых систем на базе rsync. Она упрощает создание периодических копий с локальной и удаленных машин по ssh.
Она использует, по возможности, жесткие связи, что позволяет существенно уменьшить объем необходимого дискового пространства. (цитата отсюда )
Подготовка - на локальной машине
Данные будем переливать с помощью SSH, поэтому давайте сначала настроим public и private ключи для локального и удаленного серверов.
Делаем это для того, чтобы программа, которая будет переливать данные могла заходить по SSH без пароля.
$ ssh-keygen -t rsa
Оставьте папку по-умолчанию, а пароль сделайте пустым.
Эта команда должна создать в папке ~/.ssh(по умолчанию) два файла — private и public key. private предназначается для локальной машины, pub отправляется на удаленный.
Теперь копируем private key в папку /root/.ssh, чтобы пользователь root так мог пользоваться им
$ cd ~/.ssh
$ sudo mkdir /root/.ssh
$ sudo cp id_rsa /root/.ssh
Теперь надо скопировать public key на удаленную машину, с которой мы хотим копировать данные.
Предварительно создайте пользователя backup на удаленной машине - команда adduser - или .
Не забудьте дать этому пользователю права на чтение каталогов, которые вы хотите копировать.
$ ssh-copy-id -p 2200 -i .ssh/id_rsa.pub backup@remotehost.ru
-p - указывает порт (нужно если только ваш порт отличается от стандартного 22)
-i - единственно возможный ключ
или, если у вас старая версия ssh и нет утилиты ssh-copy-id :
$ cat ~/.ssh/id_rsa.pub | ssh backup@remotehost.ru "cat >> ~/.ssh/authorized_keys2"
Теперь можем попробовать зайти через ssh на удаленную машину:
$ ssh backup@remotehost.ru
В случае, если все сделано правильно, нас впустит без пароля.
На удаленной машине ставим нормальные права на чтение публичного ключа:
remotehostru$ chmod 700 .ssh
remotehostru$ chmod 400 .ssh/authorized_keys2
remotehostru$ exit
Подготовка - на удалённой машине
Проверьте - на удалённой машине должна быть установлена утилита rsync. если нет - то установить:
yum install rsync
Устанавливаем rsnapshot:
$ sudo apt-get install rsnapshot
Если вы используете не debian-подобный дистрибутив, rsnapshot наверняка тоже есть в репозиториях вашего дистрибутива. Для CentOS, при включенных RPMForge это делается, например, так:
# yum install rsnapshot
Теперь нам нужно создать директорию, где мы собираемся хранить наши «снимки»:
$ sudo mkdir /var/snapshots
Настройка
$ sudo nano /etc/rsnapshot.conf
Вместо nano вы можете использовать любой другой редактор, например vi, или gedit, если работаете в GNOME.
Настроить нужно следующие параметры:
snapshot_root - директория, в которую вы хотите сохранять "снимки".
interval xxx yy # здесь - ххх - название интервала(например hourly, daily), yy - количество снимков для каждого. Например:
interval hourly 6
interval daily 7
Означает, что мы хотим хранить 6 ежечасных копий и 7 ежемесячных. Если уже доступно указанное количество копий, rsnapshot будет заменить старую более новой.
Расскомментируйте cmd_cp. cmd_ssh расскоментируйте и измените на
cmd_ssh /usr/bin/ssh
Настройка бэкапа осуществляется командой backup <откуда> <куда>:
#Добавляем папку /etc/ с локальной машины в папку localhost/
backup /etc/ local/
#Добавляем папку /var/svn с удаленной машины в папку remotehost/
backup backup@remotehost.ru:/var/svn/ remotehost/
Помните, что в конфигурационном файле недопустимы пробелы — используйте только табы.
#если ssh удалённой машины работает на нестандартном порту можно указать порт прямо в строке задания:
backup backup@remotehost2.ru:/var/www/ remotehost2/ ssh_args=-p456
Пробный запуск
Запустим rsnapshot:
$ rsnapshot hourly
Второй параметр означает интервал, который мы задали в конфигурационном файле.
Команда может выполняется продолжительное время. После выполнения, смотрим, что она создала:
$ ls -l /var/snapshots
Пока что в директории должен быть один каталог: hourly.0.
При следующем запуске rsnapshot будет создавать каталоги hourly.1, hourly.2 и т.д., пока не упрется в максимум, указанный нами в конфигурационном файле.
Настройка cron
В Ubuntu автоматически создается файл /etc/cron.d/rsnapshot со следующим содержанием:
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
Вот и все. Теперь у вас 6 раз в сутки должен автоматически создаваться снимок данных с вашего удаленного сервера. Данные в сохранности, да еще и географически распределены.
Кстати, 6 раз в сутки не означает, что размер будет в 6 раз больше, чем если копировать всего 1 раз в сутки. Если в промежутки между копированиями не будет изменений в файлах, то общий размер копий почти не изменится.
http://webhamster.ru/mytetrashare/index/mtb0/1461805040yjlpmbvme7
Настройка отправки отчетов на E-Mail
Определяем расположение скрипта для создания отчетов,которые устанавливается вместе с пакетом rsnapshot
# rpm -ql rsnapshot | grep rsnapreport.pl
/usr/share/doc/rsnapshot-1.3.1/utils/rsnapreport.pl
Копируем этот скрипт в /usr/local/bin/ и делаем его исполняемым
# cp /usr/share/doc/rsnapshot-1.3.1/utils/rsnapreport.pl /usr/local/bin/# chmod +x /usr/local/bin/rsnapreport.pl
Добавлем параметр
--stats
в список long аргументов rsync(rsync_long_args)
# nano /etc/rsnapshot.conf
rsync_long_args --stats --delete --numeric-ids --relative --delete-excluded
Редактируем созданное ранее cron-задание
# cat /etc/cron.d/rsnapshot
0 */4 * * * root /usr/bin/rsnapshot hourly 2>&1 | /usr/local/bin/rsnapreport.pl | mail -s "Hourly Backup" my@email
30 3 * * * root /usr/bin/rsnapshot daily 2>&1 | /usr/local/bin/rsnapreport.pl | mail -s "Daily Backup" my@email
0 3 * * 1 root /usr/bin/rsnapshot weekly 2>&1 | /usr/local/bin/rsnapreport.pl | mail -s "Weekly Backup" my@email
30 2 1 * * root /usr/bin/rsnapshot monthly 2>&1 | /usr/local/bin/rsnapreport.pl | mail -s "Montly Backup" my@email