Бекап система rdiff-backup.
Одна из моих любимых тем – это создание систем резервного копирования. Так уж сложилось, что я искренне верю, что при правильно настроенном бекапе, жизнь сисадмина намного упрощается. rdiff-backup – система позволяющая сохранять изменения и получить состояние любого сохраненного файла на любое время в которое делался бекап. Из самого названия rdiff-backup видно, что система эта построена на по принципам rdiff. А сам rdiff-backup сохраняет историю изменений, так что бы можно было откатится на любой момент. Ну и основное достоинство – это то что rdiff-backup позволяет бекапиться на удаленный сервер.
В общем rdiff-backup достаточно простая система, нет никаких заумностей и в то же время функциональна.
Строить будем систему удаленного бекапа, а именно server1 будем бекапить на server2.
Начнем с установки rdiff-backup. Ставить будем из портов:
cd /usr/ports/sysutils/rdiff-backup/ make install clean
Сборка идет без лишних вопросов. И еще один нюанс – rdiff-backup, если вы будете бекапится на удаленный сервер, то и на том удаленном сервере тоже нужно его установить.
Следующий этап в построении системы резервного копирования – это мы заведем специального пользователя от которого будет происходить вся система резерного копирования. Этому пользователю совсем не нужно авторизоваться по паролю. Поэтому на вопрос adduser Use password-based authentication? [yes]: отвечаем no
В общем диалог добавления выглядит так:
adduser Username: backup Full name: Backup System user Uid (Leave empty for default): Login group [backup]: Login group is backup. Invite backup into other groups? []: Login class [default]: Shell (sh csh tcsh bash rbash nologin) [sh]: Home directory [/home/backup]: Home directory permissions (Leave empty for default): Use password-based authentication? [yes]: no Lock out the account after creation? [no]: Username : backup Password : <disabled> Full Name : Backup System user Uid : 1022 Class : Groups : backup Home : /home/backup Home Mode : Shell : /bin/sh Locked : no OK? (yes/no): yes adduser: INFO: Successfully added (backup) to the user database. Add another user? (yes/no): no Goodbye!
Пользователя надо добавить на обоих серверах. Идентично.
Следующий этап. Поскольку rdiff-backup работает через ssh, то сгенерируем ключи авторизации.
О том как генерировать ключи ssh для безпарольной авторизации я писал в статье SSH, безпарольный доступ, но для наглядности пройдем этот этап полноценно.
На сервере server1, на том который будем бекапить сгенерируем ключи.
Сначала супнемся на пользователя backup:
su backupИ выполним ssh-keygen:
ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/home/backup/.ssh/id_rsa): Created directory '/home/backup/.ssh'. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/backup/.ssh/id_rsa. Your public key has been saved in /home/backup/.ssh/id_rsa.pub. The key fingerprint is: 3e:9b:02:52:a4:42:0b:76:49:78:e7:c8:e0:35:2d:7f backup@server1.hilik.org.ua The key's randomart image is: +--[ RSA 2048]----+ | o=o. . | | .o.* = . | | . = B + | | . = o . E | | o S . | | . .. | | . .o | | .o. | | .o | +-----------------+
Теперь выйдем из su, нажав CTRL-D.
И публичный ключ скопируем на сервер server2:
scp /home/backup/.ssh/id_rsa.pub hilik@server2.hilik.org.ua:
И теперь на сервер server2 скопируем или добавим, если это не первый ключ, публичный ключ в /home/backup/.ssh/authorized_keys:
cat ~/id_rsa.pub >> /home/backup/.ssh/authorized_keys
Теперь остался последний этап, настройка самого бекапа. В первую очередь на удаленном сервере (server2) подготовим директорию для бекапов:
mkdir /storage/backup
Для бекапа я использую скрипт /root/bin/rdiff-backup.sh, который и rdiffает все на бекап сервер. Выглядит он так:
#!/bin/sh #Определяем имя сервера который бекапим, нужно для создания иерархии в бекап директории на удаленном сервере HOST_NAME=`/bin/hostname -s` #Адрес сервера на который будем бекапить REMOTE_HOST='server2' #Пользователь от имени которого будем бекапить USER='backup' #Директория на удаленном сервере в которой создаются бекапы PREFIX='/storage/backup' #Директории которые необходимо бекапить WHAT='/etc /usr/local/etc /root /var/cron /sys/i386/conf /usr/local/www' #Главный цикл бекапа for i in $WHAT do `/usr/local/bin/rdiff-backup --remote-schema 'ssh -i /home/$USER/.ssh/id_rsa -C %s rdiff-backup --server' --create-full-path --exclude-device-files --exclude-fifos --exclude-sockets --exclude-symbolic-links -b $i $USER@$REMOTE_HOST::/$PREFIX/$HOST_NAME$i` echo "/usr/local/bin/rdiff-backup --remote-schema 'ssh -i /home/$USER/.ssh/id_rsa -C %s rdiff-backup --server' --create-full-path --exclude-device-files --exclude-fifos --exclude-sockets --exclude-symbolic-links -b $i $USER@$REMOTE_HOST::/$PREFIX/$HOST_NAME$i" done
Теперь остается поставить этот скрипт на крон. Использовать его надо от рута:
0 1 * * * /root/bin/rdiff-backup.sh
На этом стадия бекапа закончилась. Бекапы будут на удаленном сервере сохраняться в той директории к которой вы указали их сохранять, в этой директории создастся поддиректория по имени сервера и там уже будет размещен бекап. Там находятся файлы с текущим состаянием, с состоянием на последний момент бекапа и журналы изменений.
Для добавления новых сервров нужно просто создать пользователя, сгенерировать ключи и разместить скрипт.
Теперь к вопросу восстановления. Если нужно получить файлы на последнее состояние, то можно просто скопировать из бекапа. Если же нужно восстановить на определенный момент, нужно воспользоваться rdiff-backup, но в режиме восстановления.
К примеру восстановим /etc сервера server1 в директорию /home/hilik/restore/etc.old по состоянию на 5 дней назад.
rdiff-backup --remote-schema 'ssh -i /home/backup/.ssh/id_rsa -C %s rdiff-backup --server' -r 5D backup@server2::/usr/local/share/backup/server1/etc /home/hilik/restore/etc.old
Это дело можно конечно оформить в скрипт или прописать алиасом часть этой команды, но к счастью мне не так часто приходится откатывать файлы на состояние несколько дней назад.
Вот на этом в настройке rdiff-backup можно поставить точку. У меня эта система работает довольно долго и неудобств с ее использованием я не ощущал.
Комментариев нет
Комментариев нет.
RSS-лента комментариев к этой записи. TrackBack URI

