Cara kerja Tenax¶
Tenax adalah operator Kubernetes. Anda mendeklarasikan ke mana cadangan disimpan, seberapa sering dan berapa lama, serta basis data mana; Tenax mengurus sisanya.
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
| Resource | Cakupan | Pembuatnya | Apa itu |
|---|---|---|---|
BackupStore |
klaster | Anda | Bucket S3, kredensialnya, dan penerima age yang menjadi tujuan enkripsi setiap objek. |
BackupPolicy |
namespace | Anda (atau preset chart) | Jadwal, jendela point-in-time, tingkat retensi, batas, penjaga beban, verifikasi, kompresi. |
BackupTarget |
namespace, di samping basis data | Anda | Satu server basis data: mesin, endpoint, kredensial, kebijakan, pemeriksaan, penyamaran. |
Backup |
namespace target | Tenax (jadwal, backup-now, chain restart) | Satu proses cadangan penuh. Hanya beberapa yang terbaru disimpan sebagai objek; S3 menyimpan semuanya. |
Restore |
namespace target | Anda, konsol, atau CLI | Rencana dari waktu atau ID cadangan ke suatu tujuan. |
Sandbox |
klaster | Restore ke sandbox |
Basis data pribadi dengan TTL, kredensial, dan konsol kueri. |
Jalur data¶
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]
- Controller hanya menjadwalkan. Mover dan restorer adalah Job; setiap target dengan pemulihan point-in-time memiliki satu Deployment streamer. Byte tidak pernah melewati controller atau API.
- Tidak ada yang macet. Tanpa mount, iSCSI, FUSE, atau block device; basis data hanya dijangkau melalui jaringan. Setiap panggilan I/O memiliki deadline, setiap aliran memiliki watchdog kemajuan, dan alat turunan berjalan di process group-nya sendiri sehingga ikut dimatikan bersamanya.
- Crash-only. Pod mana pun bisa dimatikan kapan saja. State disimpan di CRD dan S3, dan sebuah cadangan baru ada setelah manifest-nya ditulis paling akhir, sehingga cadangan yang setengah tertulis tidak pernah dikira lengkap.
Katalog dan konsol¶
tenax-api membaca daftar manifest di setiap store saat mulai dan menyimpan indeks di memori: target, cadangan,
segmen perubahan, dan jendela point-in-time. Inventaris dan pratinjau tersamar dienkripsi ke kunci katalog tambahan
yang dapat membacanya tetapi tidak dapat mendekripsi dump atau WAL (ADR 0009).
Cache ini dapat dibuang; S3 adalah sumber kebenaran.