Lewati ke isi

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.