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.







ervanux
02 Ekim 2009 at 18:37
Merhabalar.. Yazı çok güzel teşekkürler.
Bu şekilde ssh’ı ubuntu ve debianda kullanabiliyorum. Ama redhat ta denediğimde olmuyor. Yine şifre istiyor. Sebebi ne olabilir? Dağıtımdan veya ssh versiyonundan kaynaklanabilirmi ?
Salih BiLGiN
02 Ekim 2009 at 19:58
yerel bilgisayarda oluşturduğunuz .ssh/id_dsa.pub dosyasını karşıda bağlanacağınız sunucuya .ssh/authorized_keys olarak kaydediyorsanız sorun olmadan bağlanmalısınız. Root olarak bağlanmak için kullanacağımız ./ssh dizini /root içerisinde yer almaktadır.
ervanux
03 Ekim 2009 at 14:58
Yapılış şeklinde bi problem yok dediğim gibi debian ve ubuntuda kullanabiliyorum. Redhatta ayrıca .rhosts dosyası ile rsh,rcp komutlarıda problem oldu. Redhata özel bir durum olabilirmi? Yani uzaktan şifresiz giriş için daha fazla yapılması gereken işlem mi var?
Siz redhatta denedinizmi?
Salih BiLGiN
03 Ekim 2009 at 17:43
Sizde birde rsa ile deneyelim. Kendi bilgisayarınız ve bağlanacağımız redhat sunucudaki /root/.ssh/ altındaki dosyaları silin.
rm /root/.ssh/*ssh dizinine girelim.
cd /root/.sshBu işlemin ardından aşağıdaki komutu uygulayalım.
ssh-keygen -t rsaKomutu işlettikten sonra bu id_rsa.pub ve id_rsa dosyaları oluşur.
scp id_rsa root@redhatsunucu:/root/.ssh/scp id_rsa.pub root@redhatsunucu:/root/.ssh/Redhat sunucuya bağlanıyoruz.
cd /root/.sshcat id_rsa.pub >> authorized_keysBu işlemin ardından yerel makineden redhat sunucaya şifresiz bağlanabilmelisiniz. Eğer hala sorun yaşıyorsanız Redhat sunucuda
tail -f /var/log/secureile oluşan hatayı izleyebiliriz.
ervanux
05 Ekim 2009 at 11:36
RSA da olmadı. Kullanıcı yetkim olmadığı için loga bakamıyorum. Rsync yerine en ilkel yol olan FTP kullanacam artık
. Teşekkürler yardım için.
Salih BiLGiN
05 Ekim 2009 at 12:23
Sizin kullanıcınız için ssh yapma yada ip adresiniz ve sunucuda size ait klasore rsh yapma yetkisi tanımlı olmadığı için bağlanamıyor görünüyorsunuz. ssh ile normal olarak giriş yapabiliyorsanız yukarıdaki ayarlardan birisi ile bunu sağlayabilmelisiniz. Aksi takdirde bağlanmak istediğiniz sistemin yöneticisi ile görüşmenizi tavsiye ediyorum.
ervanux
09 Ekim 2009 at 12:48
Kullanıcımn kabuğunu rbashdi. Home dizinimde dosya haklarım vardı ama cd gibi dizin komutları sınırlıydı. Neyse gerek kalmadı zaten Dediğim gibi FTP ile hallettim.
Cevaplar Teşekkürler.
Linuxuzmani.com – Linux Notlarım » Php ile Proje ve NetBeans
19 Aralık 2009 at 02:09
[...] ve MySQL kullanıyoruz. Projedeki dosya ve veritabanındaki bilgileri kendimden korumak için rsync ile incremental ve günde 3 kez veritabanı yedekleme scriptimi [...]