Sunucu yedekleme: 3-2-1 kuralı ve geri yükleme
3-2-1 kuralı şunu söyler: önemli verinizin üç kopyası olsun (biri asıl veri, ikisi yedek), kopyalar iki farklı ortamda dursun ve en az biri başka bir yerde saklansın. VPS'te bu, sunucudaki verinin yanında sunucunun dışında da en az bir kopyanız olması demektir.
Aynı kural, US-CERT için hazırlanan ve CISA sitesinde yayımlanan Data Backup Options belgesinde de önerilir. Amaç, tek bir arızanın, hatanın ya da saldırının bütün kopyaları aynı anda yok etmesini önlemektir.
Yedek, anlık görüntü ve disk yedekliliği aynı şey değildir
- Yedek: verinin ayrı bir kopyasıdır, genellikle geçmiş sürümleriyle birlikte. Yanlışlıkla silinen ya da bozulan dosyayı geri getirir.
- Anlık görüntü: sunucunun o anki durumunu kaydeder. Büyük bir güncellemeden önce hızlı geri dönüş için iyidir. Ama asıl diske bağlı olduğu için yedek yerine geçmez.
- Disk yedekliliği: aynı verinin iki diske birden yazılmasıdır. Bir diskin bozulmasına karşı korur. Sildiğiniz dosya iki diskten de silinir, fidye yazılımının şifrelediği veri iki diskte de şifrelenir. Yani yedek değildir.
VPS'te 3-2-1 nasıl uygulanır?
| Kopya | Nerede? | Nasıl? |
|---|---|---|
| Asıl veri | Sunucunun diski | Çalışan sisteminiz |
| Panel yedeği | Yönetim sekmesi, Yedekler | Her gece kendiliğinden alınır, son 7 gün saklanır. Fiyata dahildir. |
| Sunucu dışı kopya | Kendi bilgisayarınız, başka bir sunucu ya da nesne depolama | Sizin kurmanız gerekir. Aşağıda restic örneği var. |
Panelin günlük yedeğini kopyalarınızdan biri olarak sayabilirsiniz. Ama "başka bir yerde" koşulunu karşılayan, kendi denetiminizdeki kopyayı sizin kurmanız gerekir. Seturack'ın hizmet sözleşmesi de önemli verilerin bir kopyasını ayrıca saklamanızı ister.
Neyi yedeklemeli?
Çalışan bir veritabanının dosyalarını kopyalamak tutarsız yedek verebilir. Önce döküm alın. Komutlar root olarak çalışır, yani bir cron betiğinde olduğu gibi:
mysqldump --single-transaction --all-databases | gzip > /var/backups/mysql-$(date +%F).sql.gz
sudo -u postgres pg_dumpall | gzip > /var/backups/pg-$(date +%F).sql.gz
Dosya olarak şunlar yeter: /etc, web sitesi dosyaları, uygulamanızın veri klasörü, Docker kullanıyorsanız volume'lar ve .env dosyaları. Yeniden indirilebilen şeyleri (paketler, Docker imajları) yedeklemeyin. Uygulamanın bir şifreleme anahtarı varsa onu da ayrıca saklayın. Anahtarsız yedek bazı uygulamalarda işe yaramaz.
Yedekleme sıklığı, kaybetmeyi göze alabileceğiniz veri miktarına bağlıdır. Günde bir yedek, en kötü durumda bir günlük veriyi kaybetmek demektir. Sipariş ya da ödeme kaydı tutan bir uygulamada veritabanı dökümünü saatlik alıp sunucu dışına göndermek daha güvenlidir.
restic ile sunucu dışı yedek
restic, yedekleri şifreleyen ve tekrar eden veriyi bir kez saklayan açık kaynaklı bir araçtır. Aşağıdaki örnek yedeği SFTP ile erişilen başka bir sunucuya yazar. Hedefe parolasız (anahtarlı) SSH girişi gerekir, çünkü otomatik yedek parola soramaz. Parola dosyasını (/root/.restic-parola) bir metin düzenleyicisiyle oluşturup chmod 600 yapın.
sudo apt install -y restic
export RESTIC_REPOSITORY=sftp:[email protected]:/yedekler/vps
export RESTIC_PASSWORD_FILE=/root/.restic-parola
restic init
restic backup /etc /var/www /var/backups
restic forget --keep-daily 7 --keep-weekly 4 --keep-monthly 6 --prune
restic'in belgeleri uyarıyor: parolayı kaybederseniz verinize bir daha ulaşamazsınız. Parolayı bir parola yöneticisinde de saklayın. İki export satırını, veritabanı dökümlerini, restic backup ve restic forget komutlarını bu sırayla /usr/local/bin/yedek.sh gibi bir betiğe koyup chmod +x ile çalıştırılabilir yapın. Betiğin sonuna eski dökümleri silen find /var/backups -name '*.sql.gz' -mtime +2 -delete satırını eklemeyi unutmayın, yoksa döküm dosyaları diski doldurur. Sonra betiği her gece çalıştırın, örneğin /etc/cron.d/yedek dosyasına şu satırla:
30 3 * * * root /usr/local/bin/yedek.sh
borg benzer bir araçtır. Basit dosya kopyası için rsync, nesne depolamaya göndermek için rclone kullanılabilir.
Asıl test: geri yükleme
Geri yüklenemeyen yedek işe yaramaz. Kurduktan hemen sonra ve ardından düzenli aralıklarla deneyin:
- restic için son yedeği boş bir klasöre açın ve dosyaları kontrol edin:
restic restore latest --target /tmp/geri-yukle - Veritabanı dökümünü geçici bir veritabanına yükleyip tablolara bakın.
- Panelde bir yedeğin yanındaki İçinden dosya kurtar simgesiyle içine girip bir dosya indirin. Tam geri yükleme mevcut diskin tamamını değiştirir. Sınama için tek dosya kurtarma daha güvenlidir.
Saklama süresini hatayı ne kadar geç fark edeceğinize göre seçin. Panel yedeği son 7 günü tutar, 7 günden eskisine dönemezsiniz. Daha eski sürümlere ihtiyaç duyabilirseniz kendi kopyanızda haftalık ve aylık sürümler tutun. Panel yedeğinin ayrıntıları için günlük yedekler yazısına bakın.
Sık yapılan hatalar
- Yedeği aynı sunucunun diskine almak. Disk dolarsa ya da sunucu giderse yedek de gider.
- Yedek parolasını ya da anahtarını yedeğin yanında, aynı yerde tutmak.
- Betiğin hata verdiğini fark etmemek. Betiğe bir bildirim ekleyin ya da ara sıra
restic snapshotsile en son yedeğin tarihine bakın. - Yedek hedefinin dolmasını izlememek. Dolu hedef, sessizce başarısız olan yedek demektir.
Yorumlar0
Henüz Yorum Yok
İlk düşüncenizi paylaşan siz olun.
Yorum bırakmak için lütfen giriş yapın veya kaydolun.