Još jedna sigurnosna kopija — više od skripte, jednostavnije od sustava

Postoji mnogo sustava za sigurnosno kopiranje, ali što učiniti ako su poslužitelji koji se podržavaju raspršeni po različitim regijama i klijentima i ako se treba koristiti sredstva operacijskog sustava?

Još jedna sigurnosna kopija — više od skripte, jednostavnije od sustava

Dobar dan, Habr!
Zovem se Natalija. Tim lider sam grupe administratora aplikacija u NPO 'Krista'. Mi smo Ops za grupu projekata naše tvrtke. Imamo prilično posebnu situaciju: instaliramo i podržavamo naš softver kako na poslužiteljima naše tvrtke, tako i na poslužiteljima smještenim kod klijenata. U tom slučaju, nije potrebno napraviti sigurnosnu kopiju cijelog poslužitelja. Važni su samo 'bitni podaci': DBMS i pojedini direktoriji datotečnog sustava. Naravno, klijenti imaju (ili ne imaju) svoja pravila za sigurnosno kopiranje i često pružaju neko vanjsko pohranjivanje za smještaj sigurnosnih kopija. U tom slučaju, nakon izrade sigurnosne kopije, osiguravamo slanje u vanjsko pohranjivanje.

Neko vrijeme smo za potrebe sigurnosnog kopiranja koristili bash skriptu, ali kako su se opcije konfiguracije širile, tako su rasla i složenost te skripte, i u jednom trenutku smo došli do potrebe da je 'uništimo do temelja, a zatim...'.

Spremna rješenja nisu nam odgovarala iz raznih razloga: zbog potrebe decentralizacije sigurnosnih kopija, obavezne pohrane sigurnosnih kopija lokalno kod klijenta, složenosti konfiguracije, uvođenja domaćih proizvoda, ograničenja pristupa.

Činilo nam se da je jednostavnije napisati nešto svoje. U isto vrijeme, željeli smo dobiti nešto što će dovoljno trajati za našu situaciju u narednih N godina, ali s mogućnošću potencijalnog proširenja područja primjene.

Uvjeti zadatka su bili sljedeći:

  1. osnovni instanc sigurnosne kopije je autonoman, radi lokalno
  2. pohrana sigurnosnih kopija i logova uvijek unutar mreže klijenta
  3. instanca se sastoji od modula – svojevrsni 'konstruktor'
  4. potrebna je kompatibilnost s korištenim distribucijama Linuxa, uključujući zastarjele, poželjna je potencijalna prenosivost
  5. za rad s instancom dovoljna je SSH pristup, otvaranje dodatnih portova nije neophodno
  6. maksimalna jednostavnost konfiguracije i korištenja
  7. moguće (ali ne nužno) postojanje zasebnog instance koji omogućava centralizirano pregledavanje stanja rezervnih kopija s različitih poslužitelja

Što smo postigli može se vidjeti ovdje: github.com/javister/krista-backup
Softver je napisan u python3; radi na Debianu, Ubuntuu, CentOS-u, AstraLinux-u 1.6.

Dokumentacija je objavljena u direktoriju docs repozitorija.

Osnovni pojmovi kojima sustav operira:
action – radnja koja ostvaruje jednu atomarnu operaciju (rezervna kopija Baze podataka, rezervna kopija direktorija, prijenos iz direktorija A u direktorij B itd.). Postojeći actions nalaze se u direktoriju core/actions
task – zadatak, skup actions, koji opisuje jedan logički 'zadatak rezervne kopije'
schedule – raspored, skup task s opcionalnim navođenjem vremena izvršenja zadatka

Konfiguracija rezervne kopije pohranjuje se u yaml datoteci; ukupna struktura konfiguracije:

  • opće postavke
  • odjeljak actions: opis radnji koje se koriste na ovom poslužitelju
  • odjeljak schedule: opis svih zadataka (skupova radnji) i raspored njihovog pokretanja putem crona, ako je takvo pokretanje potrebno

Primjer konfiguracije može se vidjeti ovdje

Što aplikacija može u trenutnom trenutku:

  • podržavaju se osnovne za nas operacije: rezervna kopija PostgreSQL putem pg_dump, rezervna kopija direktorija datotečnog sustava putem tar; operacije s vanjskim pohranama; rsync između direktorija; rotacija rezervnih kopija (brisanje starih kopija)
  • poziv vanjske skripte
  • ručno izvršavanje određenog zadatka
    /opt/KristaBackup/KristaBackup.py run make_full_dump
  • može se dodati (ili ukloniti) u crontab određeni zadatak ili cijeli raspored
    /opt/KristaBackup/KristaBackup.py enable all
  • generiranje datoteke okidača na temelju rezultata rezervne kopije. Ova funkcija je korisna u kombinaciji s Zabbix-om za praćenje rezervnih kopija
  • može raditi u pozadini u režimu webapi ili web
    /opt/KristaBackup/KristaBackup.py web start [--api]

Razlika između režima: u webapi ne postoji vlastiti web sučelje, ali aplikacija odgovara na zahtjeve druge instance. Za režim web potrebno je instalirati flask i nekoliko dodatnih paketa, a to nije svugdje prihvatljivo, na primjer u certificiranom AstraLinux SE.

Putem web sučelja može se vidjeti stanje i logovi rezervnih kopija povezanih poslužitelja: 'web-instanse' traži podatke od 'rezervnih instanci' putem API-ja. Pristup webu zahtijeva autorizaciju, pristup webapi - ne.

Još jedna sigurnosna kopija — više od skripte, jednostavnije od sustava

Logovi neispravnih rezervnih kopija označavaju se bojom: warning – žutom, error – crvenom.

Još jedna sigurnosna kopija — više od skripte, jednostavnije od sustava

Još jedna sigurnosna kopija — više od skripte, jednostavnije od sustava

Ako administratoru nije potreban podsjetnik o parametrima i poslužiteljske OS su homogeni, može se kompilirati datoteka i distribuirati već gotov paket.

Mi ovu aplikaciju najčešće distribuiramo putem Ansibla, prvo je implementiramo na dio najmanje važnih servera, a nakon testiranja na sve ostale.

Na kraju smo dobili kompaktni autonomni program za kopiranje, koji se može automatizirati i koristiti ga mogu i malo iskusniji administratori. Nama je zgodno – možda će koristiti i vama?

Izvor: habr.com

Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere 🔥 Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere | ProHoster