콘텐츠로 이동

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 네임스페이스 사용자(또는 차트의 프리셋) 일정, 특정 시점 복원 가능 기간, 보존 티어, 제한, 부하 보호, 검증, 압축.
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]
  • 컨트롤러는 예약만 합니다. mover와 restorer는 Job이며, 특정 시점 복구를 쓰는 대상마다 streamer Deployment가 하나 있습니다. 바이트는 절대 컨트롤러나 API를 거치지 않습니다.
  • 아무것도 멈추지 않습니다. 마운트, iSCSI, FUSE, 블록 디바이스를 쓰지 않으며, 데이터베이스에는 네트워크로만 접근합니다. 모든 I/O 호출에는 기한이 있고, 모든 스트림에는 진행 감시기가 있으며, 하위 도구는 자체 프로세스 그룹에서 실행되어 그룹과 함께 종료됩니다.
  • 크래시 전용. 어떤 파드든 언제든 종료될 수 있습니다. 상태는 CRD와 S3에 있고, 백업은 매니페스트가 마지막으로 기록된 뒤에야 존재하므로 반쯤 쓰인 백업을 완성된 백업으로 착각하는 일이 없습니다.

카탈로그와 콘솔

tenax-api는 시작할 때 각 스토어의 매니페스트를 나열하고 대상, 백업, 변경 세그먼트, 특정 시점 복원 가능 기간의 인메모리 인덱스를 유지합니다. 인벤토리와 마스킹된 미리 보기는 추가 카탈로그 키로도 암호화되며, 이 키로는 이를 읽을 수 있지만 덤프나 WAL은 복호화할 수 없습니다(ADR 0009). 캐시는 언제든 버릴 수 있으며, 기준이 되는 원본은 S3입니다.