Rsync ile Yedekleme

Yurt dışında bulunan bir sunucum var. Kullanılan alan hergün artmakta. Sunucu üzerinde yaşacak sorunda geriye dönüşte kayıbı en düşük seviyede tutmak için yedekleme ihtiyacı hasıl oldu. Türkiye’de bu sunucuya eş bir sunucu hazırladım. DNS kayıtlarınıda olabilecek felaket (disaster) durumunda buradan devam edilecek şekilde düzenledim. Yedekleme sistemin rsync ve ssh kullandım.
Buradaki yapımız yedek sistem için replikasyon yapması, bir anlamda sunucunun değişen dosyalarının yedeklenmesi işlemidir. Tam bir backup sistemi anlatılmamaktadır. İlk aktarımda bütün dosyalar ve klasörler aktarılacaktır. Daha sonraki aktarımlarda sadece (incremental) değişen dosya ve klasörler aktarılacak şekilde bir yapıdır.
İşlemi 3 aşamalı olarak yaptım.
1. Ssh ile Şifresiz Erişim
Sunucumuza zamanlanmış olarak görev atadığımızda bağlantımız ssh ile yapılacağı için parola sormaması gerekli.
Yurtdışındaki sunucuda yapılanlar, root olarak giriş yapıldıktan sonra;

ssh-keygen -b 1024 -t dsa
3 tane soru soracak enter ile geçebilirsiniz.
oluşan anahtarımızı Türkiye’deki sunucuya göndereceğiz.
scp /root/.ssh/id_dsa.pub root@sunucuiptr:/root/.ssh/authorized_keys
Bu işlemin ardından şifre sormadan yurtdışındaki sunucudan Türkiye’deki sunucuya bağlantı yapılacaktır.
2. Rsync yedekleme parametrelerinin ayarlanması ve ilk aktarımın yapılması.
İki sistemimde debian linux. rysnc paketini kurarak ikinci adıma başlıyoruz.
apt-get install rsync
Bu aşamadan sonra işlemler yurt dışındaki sunucuda yapılacaktır. Rsync komutu ile kullandığımız parametreleri açıklayalım.
  • -t Dosyaların tarihlerini değiştirmeden kopyalar
  • -l Var olan kısa yollarıda aynen aktarır.
  • -p Erişim izinlerinin değişmeden aktarılması sağlanır
  • -v Dosya aktarımını görmek için kullanılır.
  • -z Dosyaları sıkıştırarak gönderir.
  • -e Kullanılacak kabuğu belirlenir.
diğer paramterleri öğrenmek için aşağıdaki komutunu kullanarak görebilirsiniz.
rsync – -help
Burada dikkat edilecek husus eğer dizin olarak aktarılacaksa kaynak yoluna  /var/www şeklinde, yani Türkiye’deki sunucuda da www klasör şeklinde aktarmı yapar. Eğer biz kaynak yoluna / eklemezsek karşı tarafta www klasörü içindeki herşeyi  /var içine gönderilir. wwww dizini oluşturulmaz.
Komutun kullanımı,
rsync -parametreler kaynak hedef
Birden fazla klasor aktarmak için,
rsync -parametreler kaynak1 kaynak2 kaynak3 hedef
şeklinde kullanılır.
Ben web dizinini aktarıyorum.
rsync -avz -l -p -t -e “ssh -l root” /var/www  sunucuiptr:/var
3. Zamanlanmış görev olarak atama yapmak.
Bu komut dizilimini çalıştıracak bir script hazırlayalım.
nano /root/cron-rsync
#!/bin/sh

RSYNC=/usr/bin/rsync

SSH=/usr/bin/ssh
SSHKULLANICI=root
RKULLANICI=root
RUZAK=sunucutrip
RYOL=/var
LYOL=/var/www
$RSYNC -avz -l -p -t -e  “$SSH -l $SSHKULLANICI”  $LYOL $RKULLANICI@$RUZAK:$RYOL

dosyamızı kaydedip çıkıyoruz. Çalıştırılabilir dosya haline getiriyoruz.
chmod +x /root/cron-rsync
Yurt dışındaki sunucumun her saat  saatlerde replikasyon yapması için cron (zamanlanmış görev) ataması yapıyorum.
crontab -e
0 * * * * /root/cron-rsync
Kaydedip çıkıyoruz. Replikasyonumuz her saat başı çalışacak şekilde ayarlandı. Burada dikkat etmeniz gereken nokta bir saat biriken veri miktarını takip etmelisiniz. Çünkü ikinci saatte aktarabilecek kadar güçlü bir hattınız yoksa devam eden bir replikasyon üzerine ikinciside biner.  Uzaktaki sunucuya belirlediğiniz bir t süresi kadar ne kadar yedek atıldığını hesaplayın. Her saat değil belki 6 saatte bir yapabilirsiniz. Bu süreyi kendi alt yapınıza gore ayarlayabilirsiniz.