Home > FreeBSD | Gezegen | Linux | Linux-Komutlar > 6 Adımda Veritabanı Dosyalarını rsync İle Eşleştirme

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

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.13_1145]
Rating: 0.0/10 (0 votes cast)
VN:F [1.9.13_1145]
Rating: 0 (from 0 votes)
Share

Related posts:

  1. 7 adımda visudo ile sistem kullanıcılarına özel haklar tanıma
  2. PostgreSQL 8.4, Microsoft SQL Server 2008 ve MySQL 5.1 Veritabanı Programlarının Karşılaştırması
  3. 3 Adımda FreeBSD Başlangıç Açılışında Script Çalıştırma
  4. Veritabanı Test Unsurları
PDF Printer    Send article as PDF   

, , ,

Comments:5

Bir Cevap Yazın
  1. Devrim GündüzNo Gravatar
    09/10/24

    Ne yazık ki rsync ile postgresql “replikasyonu” yapılamaz — ya da yedeği alınamaz. rsync veritabanının dışında bir süreç olduğu için RI bir süre sonra kaybolur ve bozuk bir veritabanınız olur sadece. Bunun olma olasılığı %100 gibi birşey.

    rsync’in düzgün çalışması için PostgreSQL’in kapatılması gerekli — ki bu mantıklı değil. Sizin yerinizde olsam crondaki girdiyi hemen silerdim.

    Bu arada: Ayrıca root ile ssh’a gerek yok ki. postgres kullanıcıları kendi aralarında konuşsunlar, yeter.

    VA:F [1.9.13_1145]
    Rating: 0.0/5 (0 votes cast)
    VA:F [1.9.13_1145]
    Rating: 0 (from 0 votes)
  2. Tuyan OzipekNo Gravatar
    09/10/24

    Evet, Eger rsync yaptigin sirada tum data diske yazilmissa bir ihtimal calisir.Yoksa, master ve “slave” tabir ettigin veritabanlarinin birbirinin ayni olma ihtimali dusuk. Offline backup ise, o durumda calismasi olasi, ama onun icin de once veritabanini orijinal(master) ve slave uzerinde durdurman gerekir. Slave de bu durumda herhangi bir degisiklik, master ile senkronizasyonunu bozacagindan, slave i de sadece read-only mode da kullanman lazim. Yuk altindaki sql serverda deneme bile.

    VA:F [1.9.13_1145]
    Rating: 0.0/5 (0 votes cast)
    VA:F [1.9.13_1145]
    Rating: 0 (from 0 votes)
  3. adminNo Gravatar
    09/10/25

    uyarınız için teşekkür ederim. yazdığım makalede aslında bu uygulamanın veritabanı yazma işlemlerinin aşırı yoğunlukta olduğu sistemler için uygun olmayacağını belirtmem gerekirdi ki belirteceğim. ikinci olarak slave diye bahsettiğim veritabanı yapılan uygulamada read only veritabanı olarak kulllanılmaktadır. yani slave üzerine insert, delete veya update işlemleri yapılsa bile eşleştirme sonucunda master ile birebir aynı veritabanına sahip olacaktır.

    VN:F [1.9.13_1145]
    Rating: 0.0/5 (0 votes cast)
    VN:F [1.9.13_1145]
    Rating: 0 (from 0 votes)
  4. adminNo Gravatar
    09/10/25

    uyarınız için teşekkür ederim Devrim bey,

    hatırlarsanız bu uygulamanın olabilirliğini daha önce size sormuştum ve problemli olacağı cevabını vermiştiniz. Aslında bu makaleyi yazmaktaki amacım rsync programının kullanımının nasıl olduğunu anlatmaktı ve bunu da yaptığım bir uygulama üzerinden anlatayım dedim. Makalede bahsettiğim uygulamayı production ortamında yaklaşık 20 gün boyunca çalıştırdım ve bir problemle karşılaşmadım bunu da belirteyim. rsync çalışırken postgresql in restart edilmesi işlemini uygulamada yapmama rağmen buraya eklemedim. Çünkü yine bahsettiğim gibi asıl amacım rsync ye vurgulama yapmaktı. ama haklısınız bir uygulama dökümante edilecekse hatasız olmaldır.

    ssh ile bağlantı yapılmasının sebebi güvenli data aktarımının sağlanmak istenmesidir. postgres kullanıcısı olarak ssh tan data aktarımı yapabilmek için sanırım yine izinlerle oynamak gerekir. o yüzden direk root olarak yazdım.

    VN:F [1.9.13_1145]
    Rating: 0.0/5 (0 votes cast)
    VN:F [1.9.13_1145]
    Rating: 0 (from 0 votes)
  5. adminNo Gravatar
    09/10/25

    yapılan bilgilendirmeler sonucu hazırlanan makaleye 2 adet uyarı eklenmiştir.
    ilgilenen arkadaşlara teşekkür ederim.

    VN:F [1.9.13_1145]
    Rating: 0.0/5 (0 votes cast)
    VN:F [1.9.13_1145]
    Rating: 0 (from 0 votes)

Bir Cevap Yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

*

Şu HTML etiketlerini ve özelliklerini kullanabilirsiniz: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Trackbacks:0

Listed below are links to weblogs that reference
6 Adımda Veritabanı Dosyalarını rsync İle Eşleştirme from Outlier
TOP