Przejdź do treści

Jak działa Tenax

Tenax to operator Kubernetes. Deklarujesz, dokąd trafiają kopie zapasowe, jak często i na jak długo oraz które bazy danych; resztą zajmuje się Tenax.

flowchart LR
  subgraph Declared["Declared in git"]
    S[BackupStore<br/>bucket + keys]
    P[BackupPolicy<br/>schedule, retention, window]
    T[BackupTarget<br/>one database]
  end
  subgraph Created["Created by Tenax or by you"]
    B[Backup<br/>one full backup]
    R[Restore<br/>to a sandbox, new DB, download, in place]
    X[Sandbox<br/>a throwaway database]
  end
  T --> P --> S
  T -. schedule .-> B
  R -. sandbox .-> X
Zasób Zakres Kto go tworzy Czym jest
BackupStore klaster Ty Bucket S3, jego dane uwierzytelniające i odbiorcy age, dla których szyfrowany jest każdy obiekt.
BackupPolicy namespace Ty (lub gotowe ustawienia chartu) Harmonogram, okno point-in-time, poziomy retencji, limity, ochrona obciążenia, weryfikacja, kompresja.
BackupTarget namespace, obok bazy danych Ty Jeden serwer baz danych: silnik, endpoint, dane uwierzytelniające, polityka, sprawdzenia, maski.
Backup namespace celu Tenax (harmonogram, backup-now, restart łańcucha) Jedno uruchomienie pełnej kopii zapasowej. Jako obiekty zachowywanych jest tylko kilka najnowszych; S3 przechowuje wszystkie.
Restore namespace celu Ty, konsola lub CLI Plan od czasu lub ID kopii zapasowej do miejsca docelowego.
Sandbox klaster Restore do piaskownicy Prywatna baza danych z TTL, danymi uwierzytelniającymi i konsolą zapytań.

Ścieżka danych

flowchart LR
  db[(Postgres / MySQL)] -->|pg_basebackup, pg_dump, mysqldump| mover[mover Job]
  db -->|WAL receiver, mysqlbinlog| streamer[streamer]
  mover --> pipe[zstd → age → SHA-256 → parallel multipart]
  streamer --> pipe
  pipe --> s3[(S3 bucket<br/>manifest.json written last)]
  s3 --> restorer[restorer Job<br/>verify → decrypt → replay → checks]
  restorer --> dest[sandbox · new database · in place · download]
  • Kontroler tylko planuje. Movery i restorery to Joby; każdy cel z odtwarzaniem point-in-time ma jeden Deployment streamera. Bajty nigdy nie przechodzą przez kontroler ani API.
  • Nic się nie zawiesza. Bez montowań, iSCSI, FUSE czy urządzeń blokowych; z bazami danych łączy się tylko przez sieć. Każde wywołanie I/O ma deadline, każdy strumień watchdog postępu, a narzędzia potomne działają we własnej grupie procesów, więc są zabijane razem z nią.
  • Crash-only. Każdy pod może zostać zabity w dowolnej chwili. Stan znajduje się w CRD i S3, a kopia zapasowa istnieje dopiero wtedy, gdy jej manifest zostanie zapisany jako ostatni, więc do połowy zapisana kopia nigdy nie zostanie wzięta za kompletną.

Katalog i konsola

tenax-api przy starcie wyświetla manifesty w każdym magazynie i utrzymuje indeks w pamięci: cele, kopie zapasowe, segmenty zmian i okna point-in-time. Inwentarze i zamaskowane podglądy są szyfrowane dodatkowym kluczem katalogu, który może je czytać, ale nie może odszyfrować zrzutów ani WAL (ADR 0009). Pamięć podręczna jest jednorazowa; źródłem prawdy jest S3.