Секретные записки WEB-программиста




100mbru, bitrix, CentOS, cms, drupal, java, joomla, LAMP, linux, mysql, nicru, Open-Source, php, Red Hat, seo, Typo3, ubuntu, win, windows, авто, администрирование, алгоритмы, алкоголь, бизнес, битрикс, видео, военмех, выборы, германия, джино, домены, интересности, исследования, картинки, кино, компьютеры, ливия, магазин, маразм, мастерхост, обработка-изображений, пейнтбол, политика, политэкономия, прикольное-видео, программирование, путешествия, работа, религия, рунет, сайтостроение, сео, сми, технологии, украина, форум, хиханьки, холивары, хостинг

Настройка удалённого резервного копирования с помощью rsnapshot

11.01.2017

Итак, мы имеем удаленный хост под управлением 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