Restore (Geri Yükleme)
Restore, Git geçmişindeki herhangi bir noktadan Consul KV değerlerini geri yüklemeni sağlar. CAS (Check-And-Set) mekanizması sayesinde güvenlidir -- eşlik eden yazma işlemlerini ezmez.
Ne Zaman Restore Yapılır?
- Yanlış config değişikliği: Birisi production config'ini bozmuş, hemen eski haline döndürmek istiyorsun
- Consul veri kaybı: Cluster çöktü veya Raft bozuldu, key'ler kayboldu
- Rollback: Yeni deploy'dan sonra eski config'e dönmek istiyorsun
- Test sonrası temizlik: Staging'de yapılan test değişikliklerini geri almak istiyorsun
Dry-run Önizleme
Restore öncesi mutlaka dry-run yap. Bu komut hiçbir değişiklik yapmaz, sadece ne olacağını gösterir:
consul-guardian restore \
--prefix "config/production/" \
--from git \
--revision HEAD~3 \
--dry-run
Örnek çıktı:
Restore Plan (dry-run)
======================
Source: Git revision abc1234 (2026-04-03T18:30:00Z)
Target: config/production/
Actions:
UPDATE config/production/database
Current: {"host":"db.prod.internal","port":5432,"pool_size":50}
Target: {"host":"db.prod.internal","port":5432,"pool_size":20}
CREATE config/production/old-service
Target: {"endpoint":"http://old.internal:8080"}
(DELETE yok - sadece mevcut key'ler güncellenir)
Summary: 1 update, 1 create, 0 delete
Dry-run çıktısını incelemeden gerçek restore yapma. Özellikle production ortamında bu alışkanlık hayat kurtarır.
Temel Restore Komutları
Belirli bir revizyona geri dön
# 3 commit öncesine dön
consul-guardian restore \
--prefix "config/production/" \
--from git \
--revision HEAD~3
# Belirli bir commit hash'ine dön
consul-guardian restore \
--prefix "config/production/" \
--from git \
--revision abc1234
Tek bir key'i geri yükle
consul-guardian restore \
--prefix "config/production/database" \
--from git \
--revision HEAD~1
Tüm prefix'i geri yükle
consul-guardian restore \
--prefix "config/" \
--from git \
--revision HEAD~5
Seçimli Restore
Her zaman tüm key'leri geri yüklemen gerekmez. Belirli key'leri seçebilirsin:
# Sadece belirli prefix
consul-guardian restore --prefix "config/production/payment-service"
# Birden fazla prefix
consul-guardian restore --prefix "config/production/database,config/production/redis"
CAS Güvenliği
Restore işlemleri CAS (Check-And-Set) mekanizması kullanır. Bu ne anlama geliyor?
- Guardian, Consul'daki key'lerin mevcut
ModifyIndexdeğerini okur - Restore sırasında her key için "Bu key'in index'i hala X mi?" diye kontrol eder
- Eğer başka bir process bu sırada key'i değiştirmişse, CAS başarısız olur
- Başarısız key'ler için Guardian tekrar okur ve yeniden dener
Bu sayede:
- Restore sırasında başka birisi bir key'i değiştirirse, o değişiklik kaybolmaz
- Atomik batch'ler (64 işlem) tutarlılık sağlar
- Partial failure durumunda hangi key'lerin başarısız olduğu raporlanır
CAS Conflict detected:
config/production/database was modified during restore
(ModifyIndex changed: 142 -> 145)
Retrying with updated index...
Retry successful.
Felaket Kurtarma Senaryosu
En kötü durum: Consul cluster'ın tamamen çöktü ve tüm KV verisi kayboldu. Guardian ile kurtarma süreci:
1. Yeni Consul cluster kur
# Yeni cluster başlatıldı, KV store boş
consul agent -server -bootstrap-expect=3 ...
2. Git repo'sundaki son duruma bak
cd /data/consul-backup
git log --oneline -5
# abc1234 consul-guardian: 2 keys changed (30 dk önce)
# def5678 consul-guardian: 1 keys changed (1 saat önce)
# ...
3. Dry-run ile kontrol et
consul-guardian restore \
--prefix "" \
--from git \
--revision HEAD \
--dry-run
4. Tam restore yap
consul-guardian restore \
--prefix "" \
--from git \
--revision HEAD \
--consul-addr http://new-consul:8500
5. Doğrula
consul-guardian drift --prefix ""
# Summary: 0 drifted, 247 in sync
Tüm sürecin 5 dakikadan kısa sürmesi hedefleniyor.
Gerçek Senaryo: Yanlış Config Değişikliği
Cuma akşamı deploy sırasında config/production/database key'inde pool_size 20'den 200'e değiştiriliyor. Veritabanı bağlantı limiti aşılıp uygulama hata vermeye başlıyor.
# 1. Öncelikle ne değiştiğine bak
cd /data/consul-backup
git log --oneline -3 -- config/production/database.json
# abc1234 consul-guardian: 1 keys changed (5 dk önce)
# def5678 consul-guardian: 1 keys changed (2 gün önce)
# 2. Dry-run
consul-guardian restore \
--prefix "config/production/database" \
--from git \
--revision def5678 \
--dry-run
# 3. Geri yükle
consul-guardian restore \
--prefix "config/production/database" \
--from git \
--revision def5678
# 4. Uygulama 30 saniye içinde eski config'i okur, sorun çözülür