Ännu en backup — mer Ă€n ett skript, enklare Ă€n ett system

Det finns mÄnga backupsystem, men vad gör man om de servrar som ska underhÄllas Àr spridda över olika regioner och kunder och man mÄste anvÀnda operativsystemets verktyg?

Ännu en backup — mer Ă€n ett skript, enklare Ă€n ett system

God dag, Habr!
Jag heter Natalia. Jag Àr teamledare för gruppen av applikationsadministratörer pÄ NPO "Krista". Vi Àr operations för projektgruppen inom vÄrt företag. Vi har en ganska speciell situation: vi installerar och underhÄller vÄr programvara bÄde pÄ vÄra företagsservrar och pÄ servrar som finns hos kunder. Att ta backup av hela servern Àr inte nödvÀndigt. Endast "vÀsentliga data" Àr viktiga: databashanteringssystem och specifika kataloger i filsystemet. Klienterna har naturligtvis (eller inte) sina egna regler för backup och tillhandahÄller ofta nÄgot externt lagringsutrymme för att lÀgga backup-filer dÀr. I sÄdana fall skickar vi backupen till det externa lagret efter att den har skapats.

Under en tid anvÀnde vi ett bash-skript för backup, men nÀr antalet konfigurationsalternativ vÀxte, blev skriptet gradvis mer och mer komplicerat, och vid en viss tidpunkt insÄg vi behovet av att "störa ner det till grunden, och sedan...".

FÀrdiga lösningar passade inte av olika skÀl: pÄ grund av behovet av decentraliserade backuper, krav pÄ lokal lagring av backuper hos kunden, svÄrigheterna med instÀllning, importsubstitution och begrÀnsad Ätkomst.

Vi insÄg att det var enklare att skriva nÄgot eget. Samtidigt ville vi ha nÄgot som skulle rÀcka för vÄr situation de kommande N Ären, men med möjlighet till potentiell expansion av tillÀmpningsomrÄdet.

Villkoren för uppgiften var följande:

  1. den grundlÀggande backupinstansen Àr autonom, fungerar lokalt
  2. backup och loggar lagras alltid inom kundens nÀtverk
  3. instansen bestĂ„r av moduler – en slags "byggsats"
  4. kompatibilitet med anvÀnda Linux-distributioner, inklusive förÄldrade, önskvÀrt med potentiell plattformsoberoende
  5. det rÀcker med ssh-Ätkomst för att arbeta med instansen, det Àr inte nödvÀndigt att öppna ytterligare portar
  6. maximal enkelhet i instÀllning och drift
  7. det Àr möjligt (men inte nödvÀndigt) att ha en separat instans som gör det möjligt att centralt se statusen för backuper frÄn olika servrar

Det vi har Ästadkommit kan ses hÀr: github.com/javister/krista-backup
Programmet Àr skrivet i python3; fungerar pÄ Debian, Ubuntu, CentOS, AstraLinux 1.6.

Dokumentationen Àr lagrad i mappen docs i arkivet.

GrundlÀggande begrepp som systemet anvÀnder:
action – en Ă„tgĂ€rd som utför en atomĂ€r operation (backup av databas, backup av katalog, flytt frĂ„n katalog A till katalog B, etc.). Befintliga actions finns i mappen core/actions.
task – en uppgift, en uppsĂ€ttning actions som beskriver en logisk "backup-uppgift".
schedule – schema, en uppsĂ€ttning task med valfri anger tid för att utföra uppgiften.

Backupkonfigurationen lagras i en yaml-fil; den allmÀnna strukturen för config:

  • gemensamma instĂ€llningar
  • avsnittet actions: beskrivning av Ă„tgĂ€rder som anvĂ€nds pĂ„ denna server.
  • avsnittet schedule: beskrivning av alla uppgifter (uppsĂ€ttningar av Ă„tgĂ€rder) och schemat för deras körning via cron, om sĂ„dan körning krĂ€vs.

Ett exempel pÄ config kan ses hÀr.

Vad applikationen kan göra just nu:

  • de viktigaste operationerna stöds: backup av PostgreSQL genom pg_dump, backup av katalog i filsystemet genom tar; operationer med extern lagring; rsync mellan kataloger; rotation av backuper (borttagning av gamla kopior).
  • anrop av extern skript.
  • manuell körning av enskild uppgift.
    /opt/KristaBackup/KristaBackup.py run make_full_dump
  • det gĂ„r att lĂ€gga till (eller ta bort) enskilda uppgifter eller hela schemat i crontab.
    /opt/KristaBackup/KristaBackup.py enable all
  • generering av trigger-filer baserat pĂ„ backupresultat. Denna funktion Ă€r anvĂ€ndbar i samband med Zabbix för att övervaka backuper.
  • kan köras i bakgrunden i webapi- eller webblĂ€ge.
    /opt/KristaBackup/KristaBackup.py web start [--api]

Skillnaden mellan lÀgena: i webapi finns det ingen egen webbgrÀnssnitt, men applikationen svarar pÄ förfrÄgningar frÄn en annan instans. För webblÀget behövs flask och nÄgra ytterligare paket, vilket inte alltid Àr acceptabelt, till exempel i den certifierade AstraLinux SE.

Genom webbgrĂ€nssnittet kan man se status och loggar för backuper pĂ„ anslutna servrar: "webb-instansen" begĂ€r data frĂ„n "backup-instanser" via API. Åtkomst till web krĂ€ver autentisering, Ă„tkomst till webapi gör inte det.

Ännu en backup — mer Ă€n ett skript, enklare Ă€n ett system

Loggar för felaktigt genomförda backuper Ă€r markerade med fĂ€rg: warning – gult, error – rött.

Ännu en backup — mer Ă€n ett skript, enklare Ă€n ett system

Ännu en backup — mer Ă€n ett skript, enklare Ă€n ett system

Om administratören inte behöver en snabbguide för parametrar och serveroperativsystemen Àr homogena, kan man kompilera filen och distribuera ett fÀrdigt paket.

Vi distribuerar denna nytta huvudsakligen via Ansible, för att först rulla ut det till en del av de minst viktiga servrarna, och efter testning till alla andra.

Resultatet blev att vi fick ett kompakt, fristĂ„ende kopieringsverktyg som kan automatiseras och som Ă€ven nybörjare kan anvĂ€nda. Det Ă€r bekvĂ€mt för oss – kanske det kan vara till nytta för er ocksĂ„?

KĂ€lla: habr.com

Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster