Eki 23 2009

6 Adımda Veritabanı Dosyalarını rsync İle Eşleştirme

Category: FreeBSD,Gezegen,Linux,Linux-KomutlarBayram Karagöz @ 23:39

Unix  ve Linux tabanlı sistemlerde dosya eşleştirmesini sağlayan müthiş araçlardan bir tanesi şüphesiz ki rsync dir. Fiziksel olarak farklı sunucularda bulunan dosyaları eşleştirmek amacıyla direk olarak bu dosyaları kopyalamanın  yerine, sadece değişikliğin olduğu dosyaların değişik olan kısımlarını kopyalayarak aktarım süresini minimuma indirebilirsiniz. Aynı zamanda bu araçta ssh desteklendiğinden dosya eşleştirmeleri güvenli olarak yapılmaktadır.

Sözü çok fazla uzatmadan rsync ile yaptığım 2 farklı sunucudaki veritabanı dosyalarını eşleştirme operasyonunu sizlere anlatacağım.

UYARI: Yapılan uygulamadaki veritabanı dosyalarının rsync ile eşleştirilmesi işlemi birçok veritabanı uzmanına göre riskli ve yanlış bir yoldur. Bu makalede vurgulanmak istenen nokta rsync programının nasıl kullanıldığını öğrenmek olduğu için production ortamlarda veritabanı dosyalarıyla birlikte deneme yapacağınız zaman çok dikkatli ve bu uyarıyı dikkate alarak davranınız.

Master ve slave 2 veritabanı düşünelim. Her saat başı master üzerindeki veriler slave üzerine kopyalansın. slave üzerinde herhangi bir ekleme, silme veya update işlemi master sunucuyu etkilemesin. Bu işlemin gerçekleştirilebilmesi için slave sunucuda çalıştırılmak üzere rsync yi çalıştıracağımız script yazılması gerekmektedir.

Uygulama FreeBSD sistemleri üzerinde yapılmıştır.

Uygulama Aşamaları;

1- 2 sunucu üzerinde de rsync programının kurulu olması gerekir.

# cd /usr/ports/net/rsync/
# make install
# make clean

2- güvenli aktarım için public, private keyler oluşturulmalı.

Slave sunucu üzerinden master sunucuya rsync programını kullanabilmek amacıyla şifresiz olarak bağlanabilmek amacıyla slave sunucu üzerinde public ve private key ler oluşturulup public key, master sunucuda .ssh/authorized_keys altına kopyalanması gerekmektedir.

Slave sunucu üzerinde yapılacaklar;

# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
52:49:04:2d:48:b0:39:24:6c:3e:35:fc:a7:8c:8e:c5 root@bayram.bayramkaragoz.org

oluşturulan public keyi master sunucuya aktarmak için;

# cd
# scp .ssh/id_rsa.pub root@master_sunucu.com:.ssh/authorized_keys
The authenticity of host 'master_sunucu.com (82.22.22.22)' can't be established.
DSA key fingerprint is 37:bd:7d:6b:2e:e7:d2:69:8f:36:a5:55:30:44:a0:fc.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '82.22.22.22' (DSA) to the list of known hosts.
Password:
id_rsa.pub                                      100%  411     0.4KB/s   00:00

3- Slave sunucudan Master sunucuya root erişimi açık olmalıdır.

iki sunucu arasında ssh üzerinden direk root olarak bağlanabilmek amacıyla ssh ayarlarında root erişimini açmalıyız.

NOT: Sistemlere direk olarak root erişiminin açılması çok riskli bir durum olduğundan ssh güvenlik yazımı dikkatlice okuyarak (7. maddeye dikkat) direk root erişim yapacağınız slave sunucunun ipsini master sunucuda firewall da veya tcpwrappers gibi uygulamalarda girerek sınırlandırabilirsiniz.

master sunucuda;

# vi /etc/ssh/sshd_config

aşağıdaki ifadeyi girelim;

PermitRootLogin yes

ssh servisini restart edelim;

# /etc/rc.d/sshd restart
Stopping sshd.
Starting sshd.

test edelim. sonuç olumlu ise bir sonraki aşamaya geçelim.

4- Slave sunucuda eşleştirmeyi yapacak scriptimizi yazalım.

scripte göre /var/db/pgsql/ altında bulunan ve postgresql in tüm datalarının saklandığı dizin olan data dizinini master sunucudaki postgresql in aynı dizini ile eşleştiriyoruz.

UYARI: rsync nin veritabanı eşleştirmesi yaparken pgsql dizini altında bulunan ve postgresql in çalışma pid numarasını tutan .pid uzantılı dosyasını da değiştirdiği için rsync çalıştırılmadan önce postgresql in kapatılması gerekir. rsync nin işi bittikten sonra tekrar başlatabilirsiniz. Bu işlemin veritabanına ekleme düzenleme ve silmelerin çok az olduğu sistemlerde yapılması önerilir.

# vi /home/bayram/replication.sh

#!/usr/local/bin/bash
echo Backup Started `date`
/usr/local/etc/rc.d/postgresql stop
/usr/local/bin/rsync -ave ssh --numeric-ids  root@master_sunucu.com:/var/db/pgsql/data /var/db/pgsql/.
/usr/local/etc/rc.d/postgresql start
echo Backup Completed `date`

çalıştırma hakkı verelim;

# chmod a+x /home/bayram/replication.sh

5- scriptin her saat başı çalışması için crontaba girelim

crontab -e komutu ile veya /etc/crontab dosyasına her saat başı scriptimizin çalışması için aşağıdaki ifadeyi ekleyelim;

*              */1    *       *       *       /home/bayram/replication.sh >> /var/log/sync.log 2>&1

6- işlem loglarını takip edelim

yedekleme operasyonunu takip edebilmek için log dosyası oluşturalım;

# touch /var/log/sync.log

işlem tamamdır. Artık alternatif olarak yedeklenen 2 ayrı veritabanımız var. Hem yedekleme hemde replikasyon işlemi yapmış olduk. Süpeer :)

VN:F [1.9.3_1094]
Rating: 0.0/10 (0 votes cast)
VN:F [1.9.3_1094]
Rating: 0 (from 0 votes)
  • Share/Bookmark
PDF    Makaleyi PDF formatında gönder

Etiketler: , , ,