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?

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é:
- základný inštancia zálohy je autonomná, funguje lokálne
- uchovávanie záloh a logov je vždy v rámci siete klienta
- inštancia pozostáva z modulov - akýsi „konštruktor“
- nevyhnutná kompatibilita s používanými distribúciami Linux, vrátane zastaraných, žiadúca potenciálna multiplatformnosť
- na prácu s inštanciou stačí prístup cez ssh, otvorenie dodatočných portov nie je nutné
- maximálna jednoduchosť nastavenia a prevádzkovania
- 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:
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ý
Č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.

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


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
