Перейти к содержанию

Как работает Tenax

Tenax — это оператор Kubernetes. Вы объявляете, куда идут резервные копии, как часто и как долго они хранятся и какие базы данных копировать; остальное 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 namespace вы (или пресеты чарта) Расписание, окно восстановления, уровни хранения, лимиты, защита от нагрузки, проверка, сжатие.
BackupTarget namespace, рядом с базой данных вы Один сервер баз данных: движок, endpoint, учётные данные, политика, проверки, маски.
Backup namespace цели Tenax (расписание, «Создать копию», перезапуск цепочки) Один запуск полного резервного копирования. Объектами хранятся только несколько последних; в S3 хранятся все.
Restore namespace цели вы, консоль или 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]
  • Контроллер только планирует. Movers и restorers — это Job; у каждой цели с восстановлением на момент времени есть один Deployment streamer. Байты никогда не проходят через контроллер или API.
  • Ничего не зависает. Никаких монтирований, iSCSI, FUSE и блочных устройств; к базам данных — только по сети. У каждого вызова ввода-вывода есть дедлайн, у каждого потока — сторож прогресса, а дочерние инструменты работают в собственной группе процессов и завершаются вместе с ней.
  • Crash-only. Любой под можно убить в любой момент. Состояние хранится в CRD и S3, а резервная копия существует только после того, как последним записан её манифест, поэтому недописанную копию никогда не примут за полную.

Каталог и консоль

При запуске tenax-api перебирает манифесты в каждом хранилище и держит индекс в памяти: цели, резервные копии, сегменты изменений и окна восстановления. Описи и маскированные предпросмотры дополнительно шифруются для ключа каталога, который может их читать, но не может расшифровать дампы или WAL (ADR 0009). Кэш одноразовый; источник истины — S3.