OrgPad logo

Jak zálohujeme data v OrgPadu

22.04.2025 – Pavel Klavík, Kamila Klavíková

Je důležité, aby data byla zabezpečena a nemohla se ztratit. Proto jsme nedávno provedli test záloh, kdy jsme celý OrgPad znovu postavili od nuly. V textu popíšeme, jak jsou data uložena a jak probíhají zálohy dat. Dozvíte se také, jak dlouho by trvala obnova dat v případě katastrofického selhání. Nastíníme i plány do budoucna, jak infrastrukturu a zálohy OrgPadu chceme vylepšit.

Jak zálohujeme data v OrgPadu

#OrgPad, #bezpečnost, #data, #infrastruktura, #zálohy

OrgPad je nástroj, na který se můžete při práci spolehnout. Naším cílem je vás co nejméně vyrušovat, abyste se mohli soustředit na řešení svých problémů. Mnoho věcí proto děláme automaticky. Vytvoření nové buňky udělá prostor mezi ostatními. Velikosti se přizpůsobují obsahu buňky. A při vkládání dat z jiných programů ponecháváme jen to důležité formátování.

Stejnou péči věnujeme i bezpečnosti vašich dat. Proto pravidelně a důkladně zálohujeme. V tomto textu popíšeme, jak to celé funguje — jaké používáme nástroje a jak zálohy testujeme. Dále vás chceme seznámit s plány do budoucna.

Zálohy z důvodu bezpečnosti provozujeme u tří různých poskytovalů (Hetzner Online GmbH, Contabo a Time4VPS) ve čtyřech geografických lokacích v rámci EU. K dispozici jsou tedy data na čtyřech různých místech. Data jdoucí mimo hlavní server jsou zašifrována, takže by se do nich nikdo nedostal, i kdyby unikla. Pokud by se útočník dostal na hlavní server, data jsou zajištěna tak, aby je nemohl smazat z ostatních serverů.

Nástroje pro zálohy

BorgBackup

BorgBackup, dále jen Borg, je systém na vytváření pravidelných záloh, který slouží k ukládání více záloh zároveň. Například můžeme vytvářet zálohu každý den. Chceme mít uložené všechny zálohy za poslední měsíc, abychom se k libovolné z nich mohli kdykoliv vrátit. Klíčové je, že společná data mezi jednotlivými zálohami jsou uložená pouze jednou, tedy provádí se takzvaná deduplikace. Jednotlivé soubory se rozdělí do bloků a identické bloky jsou na disku zapsané pouze jednou. Navíc jsou bloky komprimovány pomocí zstd, aby se ušetřilo místo.

Borg také umožňuje zašifrovat zálohy heslem. V OrgPadu k tomu používáme dlouhá náhodně vygenerovaná hesla. Pro představu jsem teď vygeneroval ukázkové heslo:

wMk4FC84Hl3UwGQNYkBh1wuOABq7dVMrubLHiOXgH18SggLuVi

Šifrovací algoritmus 256-bit AES spolu s dlouhým heslem znemožňuje zálohy dekódovat bez znalosti hesla. I kdyby zašifrované zálohy unikly, nešlo by je přečíst.

Rsync

Rsync umožňuje kopírovat data z jednoho serveru na druhý. Výhodou je, že se kopírují pouze změněné soubory. První záloha sice trvá déle, ale další už jsou mnohem rychlejší, protože se přenášejí jen nové nebo změněné soubory.

Rsnapshot

Rsnapshot je jednodušší systém na vytváření záloh oproti Borgu. Umožňuje uchovávat více záloh zároveň jako Borg, ale používá jednodušší strategii na deduplikaci, neboť pouze identické soubory jsou sdílené. Využívá rsync a schopnost linuxových disků mít identický soubor ve více adresářích tak, že zabírá místo na disku pouze jednou.

Rsnapshot funguje tak, že jednotlivé zálohy jsou uloženy v různých adresářích a rotují se. Při vytvoření nové zálohy se smaže ta nejstarší a předchozí zálohy se posunou. Následně se zkopíruje poslední záloha tak, že se soubory na disku sdílí. Nakonec se pomocí rsyncu nahrají změny do poslední zálohy. Takže nezměněné soubory zůstávají na disku sdílené a nezabírají extra místo.

Jak fungují zálohy OrgPadu

Veškerá data OrgPadu jsou uložena na serverech umístěných v EU, kde podléhají nejpřísnějším pravidlům pro bezpečnost a soukromí. Na obrázku níže naleznete přehled naší zálohovací infrastruktury.

Přehled zálohovací infrastruktury v OrgPadu

Hlavní server – Hetzner (DE)

Hlavní infrastruktura je umístěná na serverech v Německu u společnosti Hetzner Online GmbH. Aplikace OrgPad spolu s veškerými daty běží na jednom serveru v datacentru ve Falkensteinu (DE). Data jsou uložena v databázi PostgreSQL, kde jsou tabulky pro jednotlivé dokumenty, jejich buňky a spoje, jednotlivé uživatele, atd. Nahrané soubory a obrázky ukládáme do souborové databáze Minio.

Provozovat OrgPad z jednoho serveru funguje překvapivě dobře a stabilně. Pokroky v operačních systémech a virtualizaci umožňují, aby OrgPad běžel hladce bez přerušení. Hetzner dokáže přesunout server za běhu z jednoho fyzického stroje na jiný. Zkopíruje data v paměti do téměř totožného stavu, poté starý server pozastaví na pár vteřin a dokopíruje zbytek. Tím je přesun za běhu dokončen a server může pokračovat na novém stroji.

Za několik let provozování OrgPadu jsme měli pár výpadků v řádu minut. Hlavní výpadky jsou způsobené námi, kdy při nahrávání nové verze musíme aplikaci OrgPad restartovat, což trvá zhruba jednu nebo dvě minuty. Nové verze se snažíme nahrávat mimo dobu hlavního vytížení s tím, že některé updaty dokážeme provádět za běhu bez restartu aplikace.

Hlavní server také zálohuje Borgem každých 30 minut databázi PostgreSQL. Vyextrahujeme textový záznam celé databáze (pomocí příkazu pgdump) a uložíme ho do úložiště v Borgu. Tyto zálohy jsou šifrované dlouhým náhodným heslem a máme je uložené po dobu jednoho měsíce.

Zálohovací server – Hetzner (DE)

Pochopitelně Vaše data nejsou uložena na jediném serveru, kde by se mohla ztratit například při selhání disku nebo požáru v datacentru. Přímo u Hetznera provozujeme druhý zálohovací server v jiném datacentru v Norimberku (DE).

Tento stroj se každé čtyři hodiny připojí na hlavní server a zkopíruje zálohy pomocí rsnapshot. Kopíruje zašifrovaný balík záloh databáze PostgreSQL vytvořený Borgem a nezašifrované soubory a obrázky nahrané do databáze Minio. Na tomto serveru jsou zálohy uloženy zpětně po dobu šesti dnů.

Rsnapshot používáme místo Borgu, protože umožňuje zálohy efektivně stahovat. Zálohovací server se připojí na hlavní server a zkopíruje si změněná data. Hlavní server nemá oprávnění se připojit na zálohovací server. Pokud by se útočníkovi podařilo ovládnout hlavní server a například by tam smazal nebo zašifroval data, nepodaří se mu z něj proniknout do našich záloh a poškodit je.

Zálohy pro obnovu při havárii – Contabo (DE) a Time4VPS (LT)

Také není dobrý nápad držet všechny zálohy pouze u jednoho poskytovatele. Například by mohl být chybou odstraněn celý účet, což se ostatně v minulosti stalo, více informací v tomto videu. Proto držíme další zálohy mimo Hetznera, dokonce u dalších dvou poskytovatelů. Tyto zálohy se typicky nazývají zálohy pro obnovu při havárii (v angličtině disaster recovery backups).

První server je zřízený u německého provozovatele Contabo a nachází se v Düsseldorfu (DE). Zálohovací server u Hetznera na něj nahrává jednotlivé zálohy Borgem, kdy jsou opět zašifrované dalším dlouhým náhodným heslem. Jsou zde uloženy zálohy PostgreSQL (dvakrát zašifrované) a nahrané soubory v Minio (jednou zašifrované). Důležité je, že se na tento server již posílají data zašifrovaná, takže Contabo nemá k těmto datům přístup. Borg navíc drží zálohy zpětně po dobu jednoho měsíce. Tedy v případě PostgreSQL máme celkem dva měsíce záloh a v případě nahraných souborů a obrázků jeden měsíc.

Tyto zálohy jsou také uloženy na dalším serveru, který je zřízený u litevského poskytovatele Time4VPS a nachází se ve Vilniusu (LT). Tento server se pravidelně připojuje na Contabo a kopíruje celé Borg úložiště pomocí rsync.

Testování záloh

Mít řadu záloh je zbytečné, pokud se nekontroluje jejich funkčnost a netestují se. Celé řadě firem se v případě katastrofy stalo, že různé zálohy byly rozbité nebo neúplné.

V OrgPadu hlídáme, že se zálohy provádějí. Informace o zálohách jsou hned nahoře v přehledu důležitých informací, které kontrolujeme několikrát denně. Pokud by záloha selhala, objevil by se červený obdélník. Chybějící zálohy zase odpovídají chybějícím obdélníkům. Například když měl server u Contabo krátký výpadek z technických důvodů, velice rychle jsme zjistili, že se zálohy neprováděly, a problém jsme řešili s jejich podporou. Hlídáme také volné místo na discích, a jejich kapacitu v případě potřeby zvětšujeme.

Zálohy v přehledu důležitých informací

Zálohy testujeme následujícím způsobem. Zřídili jsme nový server u Hetznera a rozjeli jsme na něm aplikaci OrgPad. Tento proces máme zautomatizovaný pomocí Ansible, kde máme skripty na rozjetí serverů, jejich zabezpečení, nainstalování OrgPadu a jednotlivých databází, vystavení certifikátů, atd. Celý proces zabere jenom pár minut.

Poté jsme zkopírovali celé zašifrované Borg úložiště z Contabo a obnovili z něj data. Tím jsme také ověřili funkčnost všech předchozích záloh. Celková velikost tohoto úložiště byla zhruba 600 GB. Zkopírování trvalo necelých 5 hodin, což je nejpomalejší část celé obnovy. Zkoušeli jsme i obnovu provádět přímo po síti, ale byla výrazně pomalejší.

Následně jsme obnovili Borg úložiště obsahující zašifrovaná data z PostgreSQL databáze. To trvalo 15 minut a dalších 30 minut zabralo nahrání poslední zálohy do PostgreSQL. Poté bylo možné nastartovat OrgPad bez nahraných obrázků a souborů. Obnova nahraných obrázků a souborů trvala další dvě a půl hodiny.

Celkem by tedy obnova trvala zhruba 8 hodin. Proces obnovy máme zautomatizovaný pomocí Ansible. Také jsme dělali kontrolu validity obnovených dat, včetně kontroly všech nahraných souborů a obrázků. Jak data v OrgPadu v čase přibývají, prodlužuje se doba obnovy dat, ale ne významně. Pokud bychom však data obnovovali přímo ze zálohy u Hetznera, což je mnohem pravděpodobnější, byla by obnova podstatně rychlejší.

Plány do budoucna

Máme řadu nápadů, jak zálohy v OrgPadu vylepšit, jako ostatně skoro všechno. Protože na OrgPadu pracujeme jako malý tým, musíme vždy pečlivě volit, na který aspekt OrgPadu se zaměříme.

V případě záloh chceme zřídit sekundární server u Hetznera, na kterém by byl nainstalován PostgreSQL a Minio. Vytvořili bychom v nich read-only repliku (pouze pro čtení) databází PostgreSQL a Minio hlavního serveru. To znamená, že každá změna na hlavním serveru by se zároveň poslala po síti a zapsala na sekundárním serveru. Z toho by plynuly následující výhody:

Tento text budeme aktualizovat, jak budeme průběžně zálohy v OrgPadu vylepšovat. A pokud chcete být informováni o změnách v OrgPadu a v případě technických problémů o tom, jak je aktuálně řešíme, sledujte naše sociální sítě.