Статья взята с habrahabr.ru
Итак, мы имеем удаленный хост под управлением ubuntu, с некоторым массивом довольно критичных данных. Довольно логичным было бы настроить бэкап прямо на удаленном хосте, с помощью tar по крону, rsyns и т.д. Но, т.к. место на виртуальном выделенном хостинге довольно дорого и использовать его лучше по делу, идеально было бы, чтобы данные автоматически копировались на какую нибудь локальную машину, место на которой хоть отбавляй. В моем случае это файловый сервис в офисе, под управлением все той же Ubuntu.
Подготовка
Данные будем переливать с помощью SSH, поэтому давайте сначала настроим public и private ключи для локального и удаленного серверов. Делаем это для того, чтобы программа, которая будет переливать данные могла заходить по SSH без пароля.
Теперь копируем private key в папку /root/.ssh, чтобы пользователь root так мог пользоваться им
На удаленной машине ставим нормальные права на чтение публичного ключа:
Настройка rsnapshot
rsnapshot — утилита для создания копий состояния файловых систем на базе rsync. Она упрощает создание периодических копий с локальной и удаленных машин по ssh. Она использует, по возможности, жесткие связи, что позволяет существенно уменьшить объем необходимого дискового пространства. (цитата отсюда)
Установка
Устанавливаем rsnapshot:
Настройка
Теперь можно перейти к настройке, собственно, rsnapshot:
Настроить нужно следующие параметры:
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 <откуда> <куда>:
Помните, что в конфигурационном файле недопустимы пробелы — используйте только табы.
Запустим rsnapshot:
Настройка 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 раз в сутки. Если в промежутки между копированиями не будет изменений в файлах, то общий размер копий почти не изменится.
UPD. От себя добавлю про такую полезную функцию как исключение файлов, расширений или каталогов, которые не нужны для копирования. Для этого в конфигурации rsnapsots есть параметры exclude. Для удобства создаем файл rsnapshot.exclude
Итак, мы имеем удаленный хост под управлением ubuntu, с некоторым массивом довольно критичных данных. Довольно логичным было бы настроить бэкап прямо на удаленном хосте, с помощью tar по крону, rsyns и т.д. Но, т.к. место на виртуальном выделенном хостинге довольно дорого и использовать его лучше по делу, идеально было бы, чтобы данные автоматически копировались на какую нибудь локальную машину, место на которой хоть отбавляй. В моем случае это файловый сервис в офисе, под управлением все той же Ubuntu.
Подготовка
Данные будем переливать с помощью SSH, поэтому давайте сначала настроим public и private ключи для локального и удаленного серверов. Делаем это для того, чтобы программа, которая будет переливать данные могла заходить по SSH без пароля.
$ ssh-keygen -t dsaОставьте папку по-умолчанию, а пароль сделайте пустым. Эта команда должна создать в папке ~/.ssh(по умолчанию) два файла — private и public key. private предназначается для локальной машины, pub отправляется на удаленный.
Теперь копируем private key в папку /root/.ssh, чтобы пользователь root так мог пользоваться им
$ cd ~/.ssh $ sudo mkdir /root/.ssh $ sudo cp id_dsa /root/.sshТеперь надо скопировать public key на удаленную машину, с которой мы хотим копировать данные. Предварительно создайте пользователя backup на удаленной машине(команда adduser). Не забудьте дать этому пользователю права на чтение каталогов, которые вы хотите копировать.
$ cat ~/.ssh/id_dsa.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
Настройка rsnapshot
rsnapshot — утилита для создания копий состояния файловых систем на базе rsync. Она упрощает создание периодических копий с локальной и удаленных машин по ssh. Она использует, по возможности, жесткие связи, что позволяет существенно уменьшить объем необходимого дискового пространства. (цитата отсюда)
Установка
Устанавливаем rsnapshot:
$ sudo apt-get install rsnapshotЕсли вы используете не debian-подобный дистрибутив, rsnapshot наверняка тоже есть в репозиториях вашего дистрибутива. Для CentOS, при включенных RPMForge это делается, например, так:
# yum install rsnapshotТеперь нам нужно создать директорию, где мы собираемся хранить наши «снимки»:
$ sudo mkdir /var/snapshots
Настройка
Теперь можно перейти к настройке, собственно, rsnapshot:
$ 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/
Помните, что в конфигурационном файле недопустимы пробелы — используйте только табы.
Запустим 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 раз в сутки. Если в промежутки между копированиями не будет изменений в файлах, то общий размер копий почти не изменится.
UPD. От себя добавлю про такую полезную функцию как исключение файлов, расширений или каталогов, которые не нужны для копирования. Для этого в конфигурации rsnapsots есть параметры exclude. Для удобства создаем файл rsnapshot.exclude
$ sudo nano /etc/rsnapshot.excludeи добавим в него католог который не нужен
/var/www/nenuzhnoeлибо расширение
/var/www/*.aviДобавлять следует через пробел в одну строчку.
/var/www/nenuzhnoe /var/www/*.aviДалее открываем файл конфигурации rsnapshot
sudo nano /etc/rsnapshot.confРаскоментируем строчку exclude_file и через таб дописываем путь и название нашего созданного файла
exclude_file /etc/rsnapshot.excludeТеперь при создании копии будет исключен каталог /var/www/nenuzhnoe и все файлы с расширение .avi
Комментариев нет:
Отправить комментарий