Sikre, troværdige og effektive backupstrategier er et kendt problem i enhver systemadministrators hverdag. Her hos Meeho! ApS gør vi naturligvis alt for at sikre vores kunders data så godt som overhovedet muligt. I den daglige backup anvender vi blandt andet rsync, som er et rigtig effektivt, sikkert og velafprøvet værktøj til at tage inkrementel backup. I det følgende indlæg vil jeg vise, hvordan du hurtigt kan anvende rsync til at overtage eller supplere din eksisterende backup.
rsync kan meget mere end blot at tage backup, men i vores tilfælde ønsker vi selvfølgelig at flytte vores data fra én server (kaldet source) til en anden server (target). I transportlaget anvender vi SSH (Secure Shell), så alle data overflyttes i krypteret form. På source opretter du en nøgle (som root) og skriver nøglen til et separat bibliotek, så det ikke interfererer med eventuelle eksisterende SSH-nøgler. De følgende eksempler kræver, at SSH, rsync og lignende UNIX-værktøjer er installeret i forvejen. I det følgende eksempel laver vi en SSH-nøgle, der indeholder et tomt password:
sudo ssh-keygen -f /backup/ssh_key -t rsa -N ''
Det opretter en ny RSA-nøgle til SSH i biblioteket /backup med en tilhørende offentlig nøgle:
source:[aj] % ls
ssh_key ssh_key.pub
Derefter kopierer du filen over på serveren (f.eks. med scp) og kopierer indholdet til SSH’s authorized_keys-fil, således at backupbrugeren nu kan logge på automatisk, men krypteret:
scp ssh_key.pub backup@target:/home/backup
ssh target -l backup
(Hvor backup selvfølgelig er din backupbruger.) Og endelig laver vi et append til filen:
cat /home/backup/ssh_key.pub >> /home/backup/.ssh/auhorized_keys
Lav nu et bibliotek (på target), der skal indeholde backup’en fra source:
mkdir /home/backup/backup-source
På source kører du nu følgende rsync-kommando, der laver en fuldstændig spejling af det pågældende bibliotek og “incremental forever” (dvs. en løbende, inkrementel backup af modificerede filer mellem de to biblioteker):
/usr/local/bin/rsync -avz --delete -e "ssh -i /backup/ssh_key"
"/backup" backup@target:/home/backup/backup-source
Hvor /usr/local/bin/rsync naturligvis skal tilrettes alt efter, hvor du har placeret rsync (ovenstående sti er standard for FreeBSD). Biblioteket, der synkroniseres, er i øvrigt /backup (markeret med fed), og det skal du selvfølgelig ændre efter behov. Synkroniseringen er rekursiv, så alle underbiblioteker bliver flyttet med. Bemærk, at switchen –delete sletter filer i target, hvis det er slettet fra source. Hvis du til gengæld undlader –delete, vil intet blive slettet ved synkronisering.
For at automatisere ovenstående, kan man meget passende lægge det i et shell script (med en rsync-kommando for hvert script), og endelig kalde pågældende shell script fra cron én gang i døgnet (afhængigt af behov), men det ligger uden for omfanget af denne artikel.
Jeg håber, at det her har givet lidt inspiration til, hvordan man relativt hurtigt kan få en højtydende, effektiv og sikker backupprocedure op at køre med FreeBSD og rsync. Algoritmen er utroligt effektiv og minimerer både overførselstid og båndbreddeforbrug på en snedig vis.
NB: Husk, at tomme SSH-nøgler naturligvis udgør en vis sikkerhedsrisiko, og at dette bør anvendes med fuldstændig omtanke og beskyttelse af private keys, VPN og firewalls. Meeho! ApS fraskriver sig i øvrigt alt ansvar for eventuelle sikkerhedsbrister eller tab af data, som ovenstående artikel måtte medføre.