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입니다.