Hvordan vi gjør backup

2017-03-21
sigurdga

Backup er vanskelig. Det er mange hensyn å ta, med tanke på sikkerhet, personvern og stabilitet. Vi tar automatisk, kryptert, inkrementell backup med Borg, som vi lagrer på to steder.

For hvert av våre prosjekter kjører vi en nattlig cronjobb som gjør backup med Borg. For prosjekter med mye tekst, f.eks dumper fra databaser, bruker vi komprimering. Vi har en sentral backupserver som mottar allerede krypterte backupdata, og tar vare på dem. Vi tar vare på én kopi per dag den første uka, så tar vi vare på ukeskopi resten av måneden, og seinere månedskopier for ti år.

Vi har sekundær backupserver som henter siste versjon av all backup tidlig på morgenkvisten, slik at vi har alt i minst to kopier.

På grunn av krypteringen, kan ikke backupdata åpnes på backupserverne uten nøkkelen som ble opprettet da første backup ble laget. Denne nøkkelen har vi lagret i PGP/GnuPG-kryptert distribuert Git-repository (med Pass). Og nøkkelen for å åpne dette hemmelige nøkkelrepositoriet ligger på tre krypterte minnepenner. Det kan høres voldsomt ut, og vi bør kanskje vise dette med en tegning, men det er alltid vanskelig å ta vare på passord, for om det lagres noe sted, trenger man alltid et nytt passord eller en ny nøkkel.

For prosjektene som vi deployer med Ansible, har vi backup av database for seg, og backup av opplasta eller genererte filer (shared) for seg. For prosjektene som vi ennå ikke har satt opp med Ansible, tar vi backup av prosjektrota med alle filer. Etter hvert som flere prosjekter blir deployet med Ansible, tar vi bare backup av database og opplasta data. Selve koden er lagret i Git, hos oss og hos Gitlab.

Alle backupsett har blitt testet med kopi av opprinnelig nøkkel, så vi vet at det vil virke om uhellet skulle være ute. Og backup-oppsettet har vi dokumentert på vår lukkede wiki på Gitlab.

Andre ting, som mail og annen serverkonfig, gjør vi backup av på samme måte i det samme systemet, men for noen eldre systemer bruker vi Attic som Borg har blitt bygget på.