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.