Ana içeriğe geç

Snapshot'lar

Snapshot, Consul cluster'ının tam bir yedeğidir. KV store, ACL'ler, session'lar ve catalog bilgilerini içerir. Guardian, snapshot'ları zamanlanmış olarak alıp farklı depolama altyapılarına kaydedebilir.

Snapshot İçeriği

Bir Consul snapshot şu verileri içerir:

  • KV Store: Tüm key-value çiftleri
  • ACL'ler: Token, policy ve role tanımları
  • Session'lar: Aktif session bilgileri
  • Catalog: Servis ve node kayıtları
  • Config Entry'leri: Service mesh yapılandırmaları

Snapshot, Consul'un kendi binary formatında saklanır (Raft snapshot). consul snapshot inspect komutuyla içeriği inceleyebilirsin.

KV-to-Git vs Snapshot

Watch özelliği sadece KV değişikliklerini Git'e commit eder. Snapshot ise tüm cluster durumunu (ACL'ler dahil) yedekler. İkisi birbirini tamamlar:

  • Git sync: Key bazında geçmiş, hızlı geri yükleme
  • Snapshot: Tam cluster kurtarma, disaster recovery

Snapshot Alma

CLI ile tek seferlik

# Yerel dosya sistemine
consul-guardian snapshot save --storage local --path /backups/

# S3'e
consul-guardian snapshot save \
--storage s3 \
--bucket consul-backups \
--prefix dc1/ \
--region eu-west-1

Zamanlanmış snapshot

Yapılandırma dosyasında cron ifadesi ile zamanla:

snapshot:
enabled: true
schedule: "0 */6 * * *" # Her 6 saatte bir
storage:
type: "s3"
bucket: "consul-backups"
prefix: "dc1/"
region: "eu-west-1"
retention:
count: 30
max_age: "720h" # 30 gün

Dashboard çalıştırıldıysa zamanlanmış snapshot otomatik aktif olur.

Depolama Altyapıları

Guardian şu depolama backend'lerini destekler:

Yerel Dosya Sistemi

snapshot:
storage:
type: "local"
path: "/data/consul-snapshots"

Basit ve hızlı. Tek sunucuda çalışıyorsan yeterli, ama sunucu çökerse snapshot'lar da gider. Production için uzak depolama öner.

AWS S3

snapshot:
storage:
type: "s3"
bucket: "consul-backups"
prefix: "dc1/"
region: "eu-west-1"

Kimlik doğrulaması için IAM role (önerilen) veya environment değişkenleri kullan:

export AWS_ACCESS_KEY_ID=AKIA...
export AWS_SECRET_ACCESS_KEY=...

Google Cloud Storage

snapshot:
storage:
type: "gcs"
bucket: "consul-backups"
prefix: "dc1/"

Service account key dosyası:

export GOOGLE_APPLICATION_CREDENTIALS=/path/to/sa-key.json

MinIO (S3 uyumlu)

snapshot:
storage:
type: "s3"
bucket: "consul-backups"
endpoint: "http://minio.internal:9000"
force_path_style: true

On-premise ortamlar için ideal.

Saklama Politikaları

Snapshot'lar zamanla birikir ve depolama maliyetini artırır. Retention (saklama) politikası ile eski snapshot'ları otomatik sil:

snapshot:
retention:
count: 30 # Son 30 snapshot'ı sakla
max_age: "720h" # 30 günden eski olanları sil

Her iki koşul da aynı anda geçerlidir. Örnek:

  • 30'dan fazla snapshot varsa en eskileri silinir
  • 30 günden eski snapshot'lar silinir

Retention çalışma mantığı

  1. Yeni snapshot alındıktan sonra retention kontrolü yapılır
  2. Önce max_age kontrolü: belirtilen süreden eski olanlar silinir
  3. Sonra count kontrolü: belirtilen sayıdan fazla olanlar silinir (en eskiden başlanarak)
  4. Silinen snapshot'lar loglanır

Snapshot Doğrulama

Her snapshot alındıktan sonra SHA-256 hash ile doğrulama yapılır:

Snapshot saved: consul-dc1-20260404-143000.snap
Size: 2.4 MB
SHA-256: a1b2c3d4e5f6...
Keys: 247
Datacenter: dc1

Varolan bir snapshot'ı doğrulamak için:

consul snapshot inspect consul-dc1-20260404-143000.snap

Gerçek Senaryo: Haftalık Backup Stratejisi

Bir e-ticaret şirketinde Consul cluster'ını yönetiyorsun. Backup stratejin:

# consul-guardian.yaml
snapshot:
enabled: true
schedule: "0 */4 * * *" # Her 4 saatte bir snapshot
storage:
type: "s3"
bucket: "acme-consul-backups"
prefix: "production/dc1/"
region: "eu-west-1"
retention:
count: 42 # 7 gün x 6 snapshot/gün
max_age: "168h" # 7 gün

watch:
prefixes:
- "config/"
- "env/"
- "feature-flags/"

Bu yapılandırmayla:

  • Her 4 saatte S3'e tam snapshot alınır
  • Git repo'sunda her KV değişikliği anlık commit edilir
  • Son 7 günün snapshot'ları saklanır (42 adet)
  • Key bazında geri yükleme Git'ten, tam cluster kurtarma snapshot'tan yapılır