Для работы над
проектами использую svn, который находится
на удаленном виртуальном выделенном
хосте, под управлением ubuntu 8.04. Со временем
объемы данных выросли, как и критичность
этих данных. Потеря чего-то снилась в
кошмарах. Время от времени копировал
репозитории на локальный компьютер.
Недавно мне это надоело. И я стал искать
возможности автоматизировать это дело.
Не буду говорить о поисках и вариантах,
расскажу о результатах.
Итак, мы
имеем удаленный хост под управлением
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
В
случае, если все сделано правильно, нас
впустит без пароля.
На удаленной машине
ставим нормальные права на чтение
публичного ключа:
remotehostru$ chmod 700
.ssh
remotehostru$ chmod 400 .ssh/authorized_keys2
remotehostru$
exit
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 :/var/svn/
remotehost/
Помните, что в
конфигурационном файле недопустимы
пробелы — используйте только табы.
Запустим rsnapshot:
$ rsnapshot
hourly
Второй параметр означает
интервал, который мы задали в
конфигурационном файле.
Команда может
выполняется продолжительное время.
После выполнения, смотрим, что она
создала:
$ ls -l /var/snapshots
Пока
что в директории должен быть один
каталог: hourly.0. При следующем запуске
rsnapshot будет создавать каталоги hourly.1,
hourly.2 и т.д., пока не упрется в максимум,
указанный нами в конфигурационном
файле.
В 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 раз
в сутки. Если в промежутки между
копированиями не будет изменений в
файлах, то общий размер копий почти не
изменится.
С помощью параметра backup_script можно
также настроить резервное копирование
баз данных MySQL, да и вообще всего, чего
угодно. Я не описывал сей процесс, т.к.
у меня он не используется и ничего
конкретного сказать не могу.
Подробнее
можно почитать в гугле. По запросу
rsnapshot вылезает куча релевантных ссылок,
правда на английском языке.
Прошу
особо не ругать, на гуру администрирования(да
и linux) я не похож, но довольно долго искал,
как просто автоматизировать резервное
копирование — нашел способ, решил
поделиться.
Но конструктивной критике
и предложениям буду, конечно, рад.
Источник: http://habrahabr.ru/blogs/linux/45912/
Комментарии
В общем-то, достаточно использовать какую-нибудь распределенную систему контроля версий (хоть тот же SVK), и такой проблемы в принципе не будет.
Отправить комментарий