avatar Debian BackupPC настройка системы резервного копирования Debian / Ubuntu

BckupPC -how toОчень часто, в своих статьях, я напоминаю о необходимости резервного копирования, это крайне важная, а зачастую и жизненно необходимая обязанность, от наличия резервных копий зависит работа компании и возможности восстановления системы после сбоев, а также восстановления потерянных или случайно удаленных документов.

Случай из жизни, моего коллеги. Честное слово, не моя история...
Была у него ферма WEB серверов, на кортом крутился довольно крупный проект, все было ничего, ферма насчитывала более 10 узлов, а синхронизация данных между узлами выполнялась с помощью rsync, и вот однажды, в конце рабочего дня, то есть «по запарке» сотрудник грохнул часть файлов CMS, немного «протупив» и не поняв что он сделал с самого начала, открыл список процессов и увидал что появился процесс rsync. Вот тут к нему пришло просветление, что он сидит и смотрит как rsync бодро удаляет файлы CMS на остальных серверах, тут, как говорится, волосы на заднице у него и зашевелились… Результатом стало частичное удаление файлов CMS и как следствие- полная неработоспособность всего сайта. Вывод сделан моментально: «RSYNC -сука… быстрый!!!»
Вот тут наступает кульминация- мой любимый момент… :)
Хорошо что была, а главное, работала система резервного копирования, на сайт была оперативно выставлена заглушка, файлы CMS были оперативно восстановлены из инкрементальной копии, которая была создана с помощью BackupPC, а rsync бодро растащил файлы по серверам.
Недоступность сервиса составила менее 5 мин (по данным мониторинга), коллега конечно премию за такое деяние не получил, но и жестокой анальной кары избежал, здравствует по сей день.
Тут имеет место человеческий фактор, который является самым непредсказуемым.
Вот от проблем такого рода и им подобных, помогает избавиться или хотя бы минимизировать последствия, система резервного копирования.

Для работы нам понадобится минимум 2 работающие системы, одна будет выступать в качестве сервера, а вторая в качестве машины резервное копирование которой мы будем проводить.
Для проведения резервного копирования у нас будет создан пользователь, назовем его: backuppc

Переходим к практике.

Настраиваем сервер BackupPC

Для выполнения заданий резервного копирования нам потребуется настроить сервер, который будет хранить сами бэкапы, выполнять подключение к серверам, резервное копирования которых и будет выполняться.
Предполагается что операционная система у вас установлена и настроена как вам требуется.
Для начала установим сам BackupPC
поднимем права до root

sudo su


Установим требуемые пакеты
aptitude apt-get install backuppc


ответим на вопросы установщика, по сути это правила для настройки почтовых уведомлений
Определяем тип почтового хоста, я выбрал smarthost — когда почта отправляется через внешний почтовый сервер


Укажем от чего имени будет уходить почта, сервер называется master.example.org — подтягивается из имени системы, но можно указать и свои данные.


Указываем через кого будет отправляться почта. Предполагается что имя почтового сервера smtp.example.org


Система указывает данные для пользователя backuppc, под которым и работает сервер резервного копирования.


Теперь если мы попытаемся зайти в WEB интерфейс backuppc, то у нас ничего не получится, т.к. у нас требуют пароль для входа, которого у нас нет, для этого нам нужно добавить запись в файл htpasswd, у нас есть 2 варианта генерирования данного пароля:
1) установить apache2-utils
sudo apt-get install apache2-utils

И затем сгенерировать файл командой
sudo htpasswd /etc/backuppc/htpasswd backuppc

указав пароль, получить готовый файл

2) воспользоваться online-генератором
результат работы которого сохраняем в файл:
nano /etc/backuppc/htpasswd


В общем я заранее «подсуетился» и сгенерировал файл, !!! ТОЛЬКО ДЛЯ ТЕСТИРОНИЯ!!! логин backuppc, пароль backuppc

ну и содержимое файла:
backuppc:$apr1$a2aUIjKF$QAqbbGUmLVXT0sD/5XcP21


Сохраняем изменения и перезапускаем apache
/etc/init.d/apache2 restart


Идем в Web-интерфейс по адресу httр://server_ip_address/backuppc.
Указываем логин и пароль который мы придумали и попадаем в web интерфейс.
В котором пока пусто

Система завелась, а это считай пол дела сделано.

Теперь нам требуется создать ssh-ключ, про сути нам требуется создавать ключ только один раз, в дальнейшем его копировать на другие машины чтобы можно было выполнять подключение по SSH к клиентским машинам, для выполнения резервного копирования

Генерация ключа
ssh-keygen -t dsa -b 1024 -f /var/lib/backuppc/key

Парольную фразу не указываем, чтобы подключение осуществлялось без ввода пароля для ключа.
Из написанного понятно что мы указываем длину ключа 1024bit, место где его сохранить /var/lib/backuppc/ и имя файла ключа key
В директории у нас появилось 2 файла с именами key и key.pub
key-закрытый ключ, его оставляем на сервере резервного копирования
key.pub — открытый ключ (сертифкат), его мы будем тиражировать на машины, резервное копирование которых будем выполнять, по нему будет выполняться подключение, его можно раскидать по другим машинам, на них генерировать ничего не нужно и этот, рутинный, процесс можно автоматизировать скриптом.

Нам осталось создать для него директорию с именем .ssh и положить в нее закрытый ключ, предоставить необходимые права ну и по мелочи.
mkdir /var/lib/backuppc/.ssh


Установим права доступа:
chmod 700 /var/lib/backuppc/.ssh


Копируем ключ key в директорию .ssh

cp /var/lib/backuppc/key /var/lib/backuppc/.ssh


Установим права на файл ключа:
chmod 600 /var/lib/backuppc/.ssh/key


Предоставим пользователю backuppc права доступа на директорию и файл

chown -R backuppc:backuppc /var/lib/backuppc/.ssh/


Вот тут нас подстерегает легкий подвох, если адрес сервера, к которому осуществляется подключение, не добавлен в файл known_hosts, то соединение не установится, нужно набрать yes, чего сервер backuppc сам делать не умеет, соответственно работать ничего не будет. Соединение будет выглядеть так:


нам достаточно набрать yes, а соответсвующая запись запись добавится в файл /var/lib/backuppc/.ssh/known_hosts

Нам поможет StrictHostKeyChecking

Каждый раз при добавлении сервера устанавливать соединение руками чтобы набрать yes слишком нудно, представьте что вам требуется добавить несколько десятков хостов и что каждый раз коннектиться руками к каждому чтобы добавлять удаленный хост в список известных, это совершенно не «комильфо», чтобы это автоматизировать, мы кроме ключа добавим еще и конфиг.
Создаем файл:
nano /var/lib/backuppc/.ssh/config

С содержимым:
Host *
    StrictHostKeyChecking no

Теперь ввода yes система не потребует, а сервер бэкапов сам будет добавлять записи, по мере их поступления, в файл known_hosts.

Настройка резервного копирования клиентской машины Linux (Ubuntu)

Настройка клиентской машины
Алгоритм действий довольно прост и отлично поддается автоматизации:
1) Создать пользователя backuppс
2) Добавить ему открытый ключ
3) Разрешить вход по ключу на сервере SSH
4) Предоставить необходимые права в системе

1- Создаем пользователя
Пользователя, под которым мы будем запускать выполнение задач резервного копирования, мы назовем backuppc естественно, что на реальных системах, такого делать не стоит и нужно указывать имя отличное от названия ПО — в целях безопасности, ну и чтобы никто не догадался.

Создаем пользователя:
adduser backuppc

и ответим на вопросы системы, указав пароль.

2-Добавляем пользователю открытый ключ
Мы создали пользователя backuppc, теперь нам требуется создать директорию для хранения ключей
mkdir /home/backuppc/.ssh


Установим права на эту директорию
chmod 700 /home/backuppc/.ssh


Копируем ключ key.bub в директорию .ssh тогда путь к нему будет:
/home/backuppc/.ssh/key.pub 


Переименовываем key.pub в authorized_keys и предоставляем нужные права доступа.
переименуем файл:
mv /home/backuppc/.ssh/key.pub /home/backuppc/.ssh/authorized_keys


Установим права на файл ключа:
chmod 600 /home/backuppc/.ssh/authorized_keys


Сделаем пользователя backuppc владельцем директории и файла
chown -R backuppc:backuppc /home/backuppc/.ssh


3-Разрешаем вход по ключу, на сервере SSH

Нам требуется настроить сервер ssh, для того чтобы можно было подключаться к системе с использованием ключей, по умолчанию это запрещено.
nano /etc/ssh/sshd_config

Находим строку и снимаем с нее комментарий
AuthorizedKeysFile      %h/.ssh/authorized_keys

Это говорит системе где искать ключ пользователя и какое имя файла ключа (для этого мы и переименовали key.pub в authorized_keys)

Перезапустить SSH
/etc/init.d/ssh restart


4- Предоставить необходимые права в системе

Предоставляем пользователю backuppc права доступа, чтобы он мог выполнять действия со всеми файлами в системе, а для этого ему нужны права root.
Полный доступ в систему предоставлять не правильно, мы разрешим ему запускать только rsync через sudo чтобы система не спрашивала пароль, больше ничего!
Для этого отредактируем файл
nano /etc/sudores

и добавляем туда запись:
backuppc      ALL = NOPASSWD: /usr/bin/rsync

Где:
backuppc — имя пользователя
ALL = NOPASSWD: /usr/bin/rsync — задаем права на запуск одного приложения с правами root без пароля, это rsync ну и указываем путь к нему.

Добавим на сервер BackupPC параметры подключения и директорию которую мы хотим бэкапить.

Настройка параметров резервного копирования на сервере BackupPC

Т.к. ключ предоставляет довольно большие возможности по работе с удаленной системой, то необходимо ограничить к нему доступ!!!
В качестве эксперимента, мы проверим подключение к удаленному серверу, чтобы проверить работу авторизации по ключу.

Перерзайдем под пользователем backuppc
su backuppc


Установим подключение по SSH к удаленному серверу командной.
ssh -i /var/lib/backuppc/.ssh/key backuppc@client.example.org

где:
ssh — собственно то что мы запускаем
-i — указывает на то что авторизация идет по ключу
/var/lib/backuppc/.ssh/key — путь где лежит ключ и сам файл ключа.
backuppc — пользователь под которым осуществляется подключение
client.example.org -адрес машины к которой выполняется подключение

Соединение установлено и вы попали в консоль удаленного сервера, система не просила набрать yes при подключении и все работает отлично.

Осталось настроить задание.
Выбираем пункт Edit Hosts
И заполняем форму:

Указываем адрес хоста и пользователя под которым выполняется резервное копирование.
И нажимаем Save
Ну и идем в параметры хоста, выбираем пункт Xfer
Важные пункты подчеркнуты

rsync — Метод синхронизации
RsyncShareName — указываем путь к директории, которую мы хотим бэкапить
RsyncClientCmd — параметры подключения к серверу для выполнения резервного копирования
RsyncClientRestoreCmd — параметры подключения к серверу для выполнения восстановления
На последних 2х пунктах остановимся по подробнее
Там указано следующее
$sshPath -q -x -l root $host $rsyncPath $argList+

Естественно нам оно не подходит, по этому мы сформируем свою команду для выполнения подключения.
Внимание правильный ответ:
$sshPath -q -x -i /var/lib/backuppc/.ssh/key -l backuppc $host /usr/bin/sudo $rsyncPath $argList+

Где:
$sshPath -путь к директории где лежит SSH
-q — тихое подключение
-x — не пробразывать х11
-i — используем аторизацию по ключу
/var/lib/backuppc/.ssh/key -путь где у нас лежит ключ
backuppc — логин с которым мы подключаемся
$host — переменная отвечающая за адрес хоста
/usr/bin/sudo — указываем путь к sudo, чтобы с ним запустить ПО
$rsyncPath — переменная которая отвечает за путь к rsync который будет запущен под sudo
$argList+ — переменная отвечающая за список аргументов для rsync
В параметры восстановления добавляем тоже самое.
Жмем Save и пробуем бэкапить руками, то что мы тут настроили, перейдя в пункт с $hostname Home и нажав кнопку Start Full Backup
Все ошибки пишутся в лог, который можно посмотреть в пункте LOG file

мы настроили в параметры подключения, нам осталось создать задание и его расписание.
Идем в пункт Edit Config -> Shedule
нас интересует пункт BlackoutPeriods


Вот тут самая мякотка… Прошу обратить внимание!
Нюанс №1: Если вы видите указанно время 19.5 -то это НЕ соответствует времени 19:50, а соответствует времени 19:30, вот такой парадокс.
Нюанс №2: В терминологии BlackoutPeriods -время когда нельзя проводить резервное копирование т.е. если на скриншоте начало периода в 7, а завершение 19.5. то резервное копирование может осуществляться в интервале с 19:30 по 7:00 следующего дня, по усмотрению системы, если вам нужно например резервное копирование выполнялось ночью 1:00 до 2:00, то BlackoutPeriods принимает вид hourBegin- 2 hourEnd — 1
Нюанс №3: Шаг таймера 30мин т.е. задания отрабатывают каждые пол часа, не чаще…

Но а в целом, система очень достойная, разобраться с остальным вам в качестве домашнего задания и думаю оно много сил не отнимет.

Куда складываются резервные копии?
В директорию:
/var/lib/backuppc/pc/$hostname


На этом все, если есть вопросы, то прошу в комментарии, если нашли ошибку, прошу в личку ну или черкните письмо на почту.

15 комментариев

avatar
Спасибо, еще хотелось бы почитать, как проводить полное резервное копирование, работающего сервера.
avatar
Выставляете, в параметрах, откуда копировать — / и у вас будут все файлы которые лежат в коневой файловой системе
avatar
хотелось бы еще посмотреть как бы вы настроили копирование smb шары.
avatar
сейчас у меня шара просто архивируется с помощью архиватора в примонтированную nfs-папку. как по вашему, есть смысл менять на backuppc?
avatar
SMB шары, применительно к Samba, бэкапятся через rsync ;)
на виндовых клиентах, пока, не использую.
avatar
Спасибо за ответ. Кстати, у меня шара на серверной убунте, а не на винде :)
avatar
Давайте представим, что я не знал, на чем у вас шара… ;)
avatar
Добрый день — подскажите, можно этим способом делать бэкап всей системы и какой будет алгоритм восстановления если сервер вдруг накрылся
avatar
Здравствуйте.
Алгоритм восстановления следующий
1) Установить ОС
2) создать учетную запись и пробросить открытый ключ, чтобы можно было по нему проходить авторизацию
3) Предоставить этой учетной записи, права на запуск rsync через sudo

У нас данная софтина используется чтобы бэкапить CMS WEB серверов(Linux,FreeBSD), сами сервера мы не бэкапим т.к. их настройки прилетают через puppet и развертывание нового сервера занимает 3-5 мин, а они у нас все идентичные.
avatar
Спасибо, ещё новое узнал — puppet ))
avatar
Ну puppet капать не перекапать… ;)
avatar
Здравствуйте! Касательно первого вопроса как проводить полное резервное копирование, работающего сервера. Где указывается выходной каталог, куда всё бекапится?
avatar
Имеется ввиду что на этом сервере установлен сам backuppc.
avatar
здравствуйте.
настройки хранятся в файле config.pl
вам нужна строка
$Conf{TopDir}      = '/указываем/путь/куда/складывать/бэкапы';
комментарий был удален
Есть что добавить? Регистрируйся и оставляй комментарии!