Jedním z mých oblíbených témat je vytváření systémů zálohování. Stalo se tak, že upřímně věřím, že při správně nakonfigurované záloze je život správce systému mnohem jednodušší. rdiff-backup je systém, který umožňuje ukládat změny a získat stav jakéhokoli uloženého souboru v libovolném čase, kdy byla provedena záloha. Z názvu rdiff-backup je zřejmé, že tento systém je postaven na principech rdiff. A samotný rdiff-backup ukládá historii změn, takže je možné se vrátit do jakéhokoli okamžiku. A hlavním přínosem je to, že rdiff-backup umožňuje zálohovat na vzdálený server.
Celkově je rdiff-backup poměrně jednoduchý systém, bez zbytečných složitostí a přitom funkční.
Vytvoříme systém vzdálené zálohy, konkrétně server1 budeme zálohovat na server2.
Začněme instalací rdiff-backup
yum install rdiff-backup (je potřeba repozitář epel), nebo si můžete stáhnout rpm z pkgs.org
závislosti:
Installed:
rdiff-backup.x86_64 0:1.2.8-5.el6
Dependency Installed:
librsync.x86_64 0:0.9.7-15.el6 pylibacl.x86_64 0:0.5.0-1.el6
pyxattr.x86_64 0:0.5.0-1.el6
Instalace probíhá bez zbytečných dotazů. A ještě jeden detail – rdiff-backup, pokud budete zálohovat na vzdálený server, musíte jej nainstalovat i na tomto vzdáleném serveru.
Dalším krokem při vytváření systému zálohování je vytvoření speciálního uživatele, pod kterým bude probíhat celé zálohování. Tomuto uživateli vůbec není potřeba autorizovat se pomocí hesla. Proto na otázku adduser Use password-based authentication? [yes]: odpovíme no
Celý dialog přidání uživatele vypadá takto:
adduser backup
Uživatele je třeba přidat na obou serverech. Identicky.
Další krok. Protože rdiff-backup funguje přes ssh, vygenerujeme klíče pro autorizaci.
O tom, jak generovat ssh klíče pro bezheslovou autorizaci, jsem psal v článku SSH, bezheslový přístup, ale pro názornost tento krok projdeme kompletně.
Na serveru server1, na tom, ze kterého budeme zálohovat, vygenerujeme klíče.
Nejprve se přihlásíme jako uživatel backup:
su backup
A provedeme ssh-keygen:
ssh-keygen
Nyní se odhlaste ze su stisknutím CTRL-D.
A veřejný klíč zkopírujte na server server2:
scp /home/backup/.ssh/id_rsa.pub hilik@server2.hilik.org.ua:
A nyní na serveru server2 zkopírujte nebo přidejte, pokud to není první klíč, veřejný klíč do /home/backup/.ssh/authorized_keys:
cat ~/id_rsa.pub >> /home/backup/.ssh/authorized_keys
Zbývá již poslední krok, nastavení samotné zálohy. Nejprve na vzdáleném serveru (server2) připravíme adresář pro zálohy:
mkdir /storage/backup
Pro zálohování používám skript /root/bin/rdiff-backup.sh, který zálohuje vše na záložní server. Vypadá takto:
#!/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
Nyní stačí tento skript nastavit v cronu. Používat jej musí root:
0 1 * * * /root/bin/rdiff-backup.sh
Tímto končí fáze zálohování. Zálohy budou na vzdáleném serveru ukládány do adresáře, který jste určili pro jejich uložení; v této adresáři bude vytvořena podsložka s názvem serveru a v ní bude umístěna záloha. Nacházejí se zde soubory s aktuálním stavem, stavem z posledního okamžiku zálohování a protokoly změn.
Pro přidání nových serverů stačí vytvořit uživatele, vygenerovat klíče a umístit skript.
Nyní k otázce obnovy. Pokud potřebujete získat soubory v posledním stavu, můžete je jednoduše zkopírovat ze zálohy. Pokud však potřebujete obnovit do určitého okamžiku, použijte rdiff-backup v režimu obnovy.
Například obnovíme /etc serveru server1 do adresáře /home/hilik/restore/etc.old podle stavu před 5 dny.
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
Tuto operaci lze samozřejmě zapsat do skriptu nebo nastavit alias pro část tohoto příkazu, ale naštěstí nemusím často vracet soubory do stavu před několika dny.
Tímto můžeme nastavení rdiff-backup uzavřít. Tento systém u mě funguje již poměrně dlouho a při jeho používání jsem nepocítil žádné nepříjemnosti.
