Ešte jedna záloha — viac než skript, jednoduchšie než systém

Existuje mnoho systémov zálohovania, ale čo robiť, ak sú spravované servery roztrúsené po rôznych regionoch a klientoch a musíme sa zaobísť prostriedkami operačného systému?

Ešte jedna záloha — viac než skript, jednoduchšie než systém

Dobrý deň, Habr!
Volám sa Natalia. Som tímová líderka skupiny administrátorov aplikácií v NPO "Krista". Sme Ops pre skupinu projektov našej spoločnosti. Máme dosť osobitnú situáciu: nielenže inštalujeme a podporujeme naše softvérové riešenia na serveroch našej spoločnosti, ale aj na serveroch, ktoré sú umiestnené u klientov. Pri tom nie je potrebné zálohovať server ako celok. Dôležité sú iba "podstatné údaje": DBMS a jednotlivé adresáre súborového systému. Samozrejme, klienti majú (alebo nemajú) svoje predpisy zálohovania a často poskytujú nejaké externé úložisko na ukladanie záloh. V tomto prípade po vytvorení zálohy zabezpečujeme jej odoslanie do externého úložiska.

N nejaký čas sme na účely zálohovania používali bash skript, ale s rastom variantov nastavení rástla aj zložitost tohto skriptu, a v jednom krásnom momente sme dospeli k potrebe "zničiť ho do základov a potom...".

Hotové riešenia sa nehodili z rôznych dôvodov: kvôli potrebe decentralizácie záloh, povinnosti uchovávať zálohy lokálne u klienta, zložitosti nastavenia, importovaniu náhrady, obmedzeniam prístupu.

Mysleli sme, že bude jednoduchšie napísať niečo vlastné. Chceli sme získať niečo, čo bude postačovať na našu situáciu na nasledujúcich N rokov, ale s možnosťou potenciálneho rozšírenia oblasti použitia.

Podmienky úlohy boli nasledovné:

  1. základný inštancia zálohy je autonomná, funguje lokálne
  2. uchovávanie záloh a logov je vždy v rámci siete klienta
  3. inštancia pozostáva z modulov - akýsi „konštruktor“
  4. nevyhnutná kompatibilita s používanými distribúciami Linux, vrátane zastaraných, žiadúca potenciálna multiplatformnosť
  5. na prácu s inštanciou stačí prístup cez ssh, otvorenie dodatočných portov nie je nutné
  6. maximálna jednoduchosť nastavenia a prevádzkovania
  7. možné (ale nie nutné) existovanie samostatnej inštancie, ktorá umožňuje centralizovane prezerať stav záloh z rôznych serverov

To, čo sa nám podarilo, si môžete pozrieť tu: github.com/javister/krista-backup
Aplikácia je napísaná v python3; funguje na Debian, Ubuntu, CentOS, AstraLinux 1.6.

Dokumentácia je uložená v priečinku docs repozitára.

Hlavné pojmy, s ktorými systém pracuje:
action – akcia, ktorá realizuje jednu atomárnu operáciu (zálohovanie DB, zálohovanie priečinka, presun z priečinka A do priečinka B atď.). Existujúce actions sú uložené v priečinku core/actions
task – úloha, súbor actions, ktorý opisuje jednu logickú "úlohu zálohovania"
schedule – rozvrh, súbor task s voliteľným určením času vykonania úlohy

Konfigurácia zálohovania je uložená v yaml súbore; celková štruktúra konfigurácie:

  • spoločné nastavenia
  • časť actions: opis akcií používaných na tomto serveri
  • časť schedule: opis všetkých úloh (súbory akcií) a plán ich spúšťania podľa cronu, ak je takýto spúšť potrebný

Príklad konfigurácie si môžete pozrieť tu

Čo aplikácia momentálne dokáže:

  • podporované sú hlavné pre nás operácie: zálohovanie PostgreSQL cez pg_dump, zálohovanie priečinka súborového systému cez tar; operácie s externým úložiskom; rsync medzi priečinkami; rotácia záloh (odstránenie starých kópií)
  • vyvolanie externého skriptu
  • vykonanie manuálneho spustenia konkrétnej úlohy
    /opt/KristaBackup/KristaBackup.py run make_full_dump
  • je možné pridať (alebo odstrániť) do crontabu konkrétnu úlohu alebo celý rozvrh
    /opt/KristaBackup/KristaBackup.py enable all
  • generovanie trigrovacieho súboru na základe výsledkov zálohovania. Táto funkcia je užitočná v súvislosti so Zabbixom pre monitorovanie záloh
  • môže pracovať na pozadí v režime webapi alebo web
    /opt/KristaBackup/KristaBackup.py web start [--api]

Rozdiel medzi režimami: v webapi nie je vlastne webové rozhranie, ale aplikácia odpovedá na požiadavky inej inštancie. Pre režim web je potrebné nainštalovať flask a niekoľko ďalších balíkov, čo môže byť v niektorých prípadoch neprijateľné, napríklad na certifikovanej AstraLinux SE.

Cez webové rozhranie si môžete pozrieť stav a logy záloh pripojených serverov: "webová inštancia" žiada údaje z "zálohovacích inštancií" cez API. Prístup k webu vyžaduje autorizáciu, prístup k webapi – nie.

Ešte jedna záloha — viac než skript, jednoduchšie než systém

Logy nesprávne prebehnutých záloh sú označované farbou: warning – žltou, error – červenou.

Ešte jedna záloha — viac než skript, jednoduchšie než systém

Ešte jedna záloha — viac než skript, jednoduchšie než systém

Ak správca nepotrebuje návod na parametre a serverové OS sú homogénne, môže kompilovať súbor a distribuovať už hotový balík.

Túto utilitu šírime hlavne prostredníctvom Ansible, najskôr ju nasadzujeme na časť najmenej dôležitých serverov, a po testovaní na všetkých ostatných.

Nakoniec sme získali kompaktný samostatný nástroj na kopírovanie, ktorý je možné automatizovať a je vhodný na používanie aj pre menej skúsených administrátorov. Je to pohodlné pre nás — možno to bude užitočné aj pre vás?

Zdroj: habr.com

Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster