跳轉到

Tenax 的工作原理

Tenax 是一個 Kubernetes Operator。你只需宣告備份存到哪裡、多久備份一次、保留多長時間,以及備份哪些資料庫; 剩下的交給 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
資源 作用域 由誰建立 是什麼
BackupStore 叢集 你 一個 S3 儲存貯體、其憑證,以及加密每個物件所用的 age 接收者。
BackupPolicy 名稱空間 你(或 Chart 的預設) 排程、時間點還原時間窗、保留層級、限制、負載保護、驗證、壓縮。
BackupTarget 名稱空間,與資料庫放在一起 你 一臺資料庫伺服器:引擎、端點、憑證、策略、檢查、遮罩規則。
Backup 目標所在名稱空間 Tenax(排程、立即備份、鏈重啟) 一次完整備份執行。只有最近的幾個以物件形式保留;S3 中儲存全部。
Restore 目標所在名稱空間 你、控制台或 CLI 從一個時間點或備份 ID 到某個目的地的還原計畫。
Sandbox 叢集 還原到沙盒的 Restore 一個帶 TTL、憑證和查詢控制台的私有資料庫。

資料路徑

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]
  • 控制器只負責排程。 搬運程式和還原程式都是 Job;每個啟用了時間點還原的目標有一個串流傳輸 Deployment。 資料位元組從不經過控制器或 API。
  • 永不掛起。 不使用掛載、iSCSI、FUSE 或區塊裝置;只透過網路存取資料庫。每個 I/O 呼叫都有截止時間, 每條資料流都有進度看門狗,子工具執行在各自的程序群組中,因此會隨程序群組一起被終止。
  • 崩潰即復原(crash-only)。 任何 Pod 都可能在任意時刻被殺掉。狀態儲存在 CRD 和 S3 中,備份只有在最後寫入 manifest 之後才算存在,因此寫到一半的備份絕不會被誤認為是完整的。

目錄與控制台

tenax-api 在啟動時列出每個儲存中的 manifest,並維護一份記憶體索引:目標、備份、變更區段和時間點還原時間窗。 清單和遮罩預覽會額外加密給一個目錄金鑰,該金鑰可以讀取它們,但無法解密傾印或 WAL (ADR 0009)。快取可以隨時丟棄;S3 才是唯一可信來源。