Pazartesi, Aralık 12, 2011

Bacula yedekleme sunucusu kurulumu

Bacula yedekleme yazılımını bir süredir araştırıyorum. Aslında son derece güzel, kullanışlı ve bir o kadar da yetenekli bir yazılım. Open Source olması da cabası. :) Tek sorun ben fazla Türkçe kaynak bulamadım. Bu sebeple tarihe not olsun diye bu dökümanı yazıyorum :)
Kendi denemelerimde disk üzerine, iSCSI üzerinden NAS'a ve LTO-2 kartuşa backup almayı başardım. Zaten disk üzerine backup almak en kolayıyken, NAS ve LTO kartuşta dikkat edilmesi gereken 1-2 nokta var. Onları da sonraki dökümanlarda (umarım) yazacağım.
Bacula Nedir?
Önce Bacula nedir ile başlayalım. Bacula network tabanlı, açık kaynaklı yedekleme yazılımıdır. (http://www.bacula.org) Çok geniş bir yelpazede farklı ortamlara yedek alabilir ve yedekten geri dönüş işlemi gerçekleştirilebilir. Kolay bir yönetim arayüzü olduğu gibi konsol üzerinden de komutlar aracılığı ile backup/restore prosedürü, aktif işler vs. yönetilebilir.
Bacula Nasıl Çalışır?
Network tabanlı olması sebebiyle sunucu/istemci mimarisi üzerine kurulmuştur. Bacula sunucusu yedek alma prosedürünü ve yedek alınan ortamı yönetir. Bacula Server, üzerindeki veya başka bir sunucudaki veritabanı üzerine backup kayıtlarını katalog olarak kaydeder. Bu sayede de dosya/gün/saat bazında geri dönüşü kolaylaştırır. Veritabanı olarak MySQL, PostgreSQL veya SQLLite kullanılabilir. Sunucu tarafında Linux, FreeBSD, Solaris ve Open Solaris kullanılabilir. (Windows sunucu çalışması devam ediyormuş)
İstemci kısmında sadece backup'ın aktarılacağı sunucuyla bağlantıyı sağlamak için küçük bir uygulama çalıştırılır. İstemci yazılımı daha geniş bir desteğe sahip. Linux'tan, Windows'a, Mac'a kadar hemen hemen tüm işletim sistemlerinin yedeğini bacula sayesinde alınabilir. Sunucu ve istemci tarafına uyumlu işletim sistemleri için daha ayrıntılı listeyi bu linkte inceleyebilirsiniz: http://www.bacula.org/en/dev-manual/main/main/Supported_Operating_Systems.html
Bacula'yı Anlayalım
Bacula için çalışan temel 3 servis vardır. Bunlar;
Bacula Director Deamon (bacula-dir): Bacula sunucu üzerinde çalışan, yedekleme yapısını, zamanlamasını, nereye yedek alınacağı, hangi istemcilerden yedek alınacağı, istemcilerin kimlik denetlemeleri gibi aslında tüm backup sürecini yöneten servistir. 9101 portundan çalışır.
Bacula Storage Deamon (bacula-sd): Bacula'nın yedeklerin alınacağı ortamını düzenleyen servisidir. Bu servis sayesinde directory ile storage farklı sunuculardan hizmet verebilir. 9102 portunu kullanır.
Bacula File Deamon (bacula-fd): İstemci tarafında çalışan servisidir. Director, istemciye (linux, windows, mac veya diğerleri) bu servis ile ulaşır. 9103 portunu kullanır. (Olası firewall v.s. ayarlarında düzenlenmelidir.)
Ayrıca 2 tane kavramdan bahsetmek gerek;
Bacula Catalog (Database): Yedekleme işleminin kayıt altına alındığı veritabanıdır. Katalogta, kayıt alınan dosyalar, dosyaların yetkileri vs. bilgileri, volume'lerin (doğru sözcüğü bulamadım malesef) kullanım oranları, çalışan işlemler gibi tüm bilgiler kaydedilir.
Bacula Console: Bacula Director ile bağlantıyı sağlayan uygulamadır. Konsol tabanlı veya QT tabanlı grafik arayüzü veya web tabanlı arayüzü vardır.
Aşağıdaki şema bu kavramları daha ayrıntılı anlamak için son derece güzel;
 

 

Bacula Kuralım
Ben Bacula kurulumun Centos 5.7 üzerine yaptım. Bu sebeple de rpm source derleme yöntemi daha kolay geldi. Sonrasında source üzerinden yaptığım rpm'leri kolayca kurarak sistemi hazır hale getirdim. Aslında depolarda da bulunabiliyor ancak nedense ben depodan kurduğumda çalışmadı. Çok da araştıramadım itiraf ediyorum. :)
Elimizde standart kurulumuş bir CentOS 5.x olduğunu düşünüyorum. İlk olarak ihtiyacımız olacak bazı paketleri ekleyelim;
yum install autoconf automake e2fsprogs-devel gcc-c++ glibc-devel glibc-headers kernel-devel krb5-devel libacl-devel libgomp libstdc++-devel libtermcap-devel libxml2-devel lsscsi m4 make mt-st mysql mysql-devel mysql-server ncurses ncurses-devel openssl-devel perl-DBI php php-gettext php-pear qt4 qt4-devel redhat-rpm-config rpm-build rpm-devel rpm-libs screen zlib-devel
bu paketler kurulduktan sonra epel reposunu ekliyoruz;
rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-4.noarch.rpm
* burada güncel ve uygun paketi ilgili linki düzenleyerek yazın. Örneğin 64 bit içn i386 yerine x86_64 gibi.
Ve kalan diğer paketleri kuruyoruz;
yum install qwt qwt-devel wxGTK
Sıra geldi rpm'leri hazırlamaya. Bunun için önce klasörümüzü hazırlayalım; (Bu işlemleri root değilken de yapabiliriz)
cp -r /usr/src/redhat ~/rpm_build
Şimdi bacula'nın src.rpm dosyalarının güncel halini indirelim; (Ben şu adresten 5.0.3 versiyonu indirdim: http://sourceforge.net/projects/bacula/files/rpms/5.0.3/)
şimdilik ihtiyacımız olan dosyalar; bacula-bat-5.0.3-2.src.rpm, bacula-mtx-5.0.3-1.src.rpm, bacula-docs-5.0.3-1.src.rpm, bacula-5.0.3-1.src.rpm.
Gelelim indirdiğimiz source rpm paketlerinden derlenmiş rpm paketleri yapmaya.
rpmbuild --rebuild --define "build_centos5 1" --define "build_mysql 1" --define "build_bat 1" --define "build_wxconsole 1" bacula-5.0.3-1.src.rpm
rpmbuild --rebuild --define "build_centos5 1" --define "build_mysql 1" --define "build_bat 1" --define "build_wxconsole 1"bacula-bat-5.0.3-2.src.rpm
rpmbuild --rebuild --define "build_centos5 1" --define "build_mysql 1" --define "build_bat 1" --define "build_wxconsole 1" bacula-mtx-5.0.3-1.src.rpm
rpmbuild --rebuild --define "build_centos5 1" --define "build_mysql 1" --define "build_bat 1" --define "build_wxconsole 1" bacula-docs-5.0.3-1.src.rpm
Ve paketlerimiz hazır. Gelelim kurmaya. Bunu root olarak yapıyoruz. Önce rpm_build/RPMS/ (veya i386) klasörüne gidiyoruz. Hazırladığımız paketler burada. Kuruluma başlayalım;
rpm -Uvh bacula-libs-5.0.3-1.rpm rpm -Uvh bacula-mysql-5.0.3-1.rpm rpm -Uvh bacula-bat-5.0.3-1.rpm
Geldik libbac-5.X.Y.so dosyasına yetki vermeye.
chown bacula:bacula /usr/libXX/libbac-5.0.1.so
* Burada 64 bit için /usr/lib64 klasörü, 32 bit için /usr/lib klasörü kullanılıyor.
Mysql Ayarları
Kurulum tamamlandı. Artık son aşama veritabanı ayarlarını yapmak. Ben mysql kullandığım için mysql ayarlarını veriyorum.
Önce mysql üzerinde bacula kullanıcısının şifresini belirleyelim;
#mysql -u root -p
mysql> set password for 'bacula'@'localhost' = password ('BaculaŞifresi');
msqyl> quit
Yetkilerin verilmesi, database'in oluşturulması, tabloların oluşturulması için zaten script hazır. Önce /usr/lib/bacula klasörüne gidip bu scriptleri sırasıyla çalıştırmak yeterli;
cd /usr/lib/bacula/
./grant_mysql_privileges
./create_mysql_database
./make_mysql_tables
Şimdi database'imizi bacula'ya tanıtalım. /etc/bacula/bacula-dir dosyasında aşağıdaki satırı düzenliyoruz;
Catalog {
Name = MyCatalog
# dbdriver = "dbi:mysql"; dbaddress = 127.0.0.1; dbport =
dbname = "bacula"; dbuser = "bacula"; dbpassword = "BaculaŞifresi"
}
Artık servisleri çalıştırma zamanı;
service bacula-sd start
service bacula-dir start
service bacula-fd start
Bacula çalıştı. Şimdi daha da önemli olan ayarlara geldi sıra. O da 2. belgede olacak.
*** Ben bacula-dir servisini çalıştırırken bazı hatalar aldım. Sonrasında araştırmalarım sonucu (nedense) /etc/bacula/bacula-dir dosyasındaki I (Büyük I) harfleri ile problemi olduğunu gördüm. Örneğin DIRPort yazan satırları DirPort olarak değiştirdiğimde problemim çözüldü.
Kaynaklar;