Bacula Director, Storage ve File Daemon Kurulumu
Bacula’yı ilk defa kuranların çoğu, servis mimarisini kavramakta zorlanır. “Neden bu kadar çok bileşen var?” sorusu sıkça duyulur. Aslında bu modüler yapı, Bacula’yı kurumsal ortamlarda bu kadar güçlü kılan şeydir. Bu yazıda Bacula’nın iki kritik bileşeni olan Storage Daemon ve File Daemon‘ı sıfırdan kuracağız, yapılandıracağız ve gerçek dünya senaryolarıyla test edeceğiz.
Bacula Mimarisi Hakkında Kısa Bir Hatırlatma
Bacula üç ana bileşenden oluşur. Bunları ayrı servisler olarak düşünmek işleri kolaylaştırır.
- Bacula Director: Tüm yedekleme işlemlerini yöneten beyin. Hangi makinenin ne zaman yedekleneceğine bu servis karar verir.
- Storage Daemon (SD): Yedek verilerinin fiziksel olarak yazıldığı ve okunduğu servis. Disk, bant sürücüsü veya sanal teyp kütüphanesiyle konuşur.
- File Daemon (FD): Yedeklenecek istemci makinelerde çalışan ajan. Verileri Director’ın talimatıyla Storage Daemon’a gönderir.
Tipik bir üretim ortamında Director ayrı bir sunucuda, Storage Daemon depolama sunucusunda, File Daemon ise her yedeklenecek istemcide çalışır. Ama küçük ortamlar için hepsini tek sunucuya da kurabilirsiniz.
Ortam Hazırlığı ve Ön Gereksinimler
Bu rehberde şu senaryoyu kullanacağız:
- director.example.com (192.168.1.10): Bacula Director kurulu, bu yazıda SD ve FD da buraya kurulacak
- client01.example.com (192.168.1.20): Yedeklenecek Linux istemcisi, sadece FD kurulacak
- İşletim Sistemi: Ubuntu 22.04 LTS (CentOS/RHEL için paket adları farklıdır, onlara da değineceğiz)
Kuruluma başlamadan önce sunucuların birbirleriyle hostname üzerinden iletişim kurabildiğinden emin olun.
# /etc/hosts dosyasına ekle (DNS yoksa)
echo "192.168.1.10 director.example.com" >> /etc/hosts
echo "192.168.1.20 client01.example.com" >> /etc/hosts
# Bağlantıyı test et
ping -c 3 director.example.com
ping -c 3 client01.example.com
Sistemleri güncelleyin ve gerekli paketleri yükleyin:
# Ubuntu/Debian için
apt update && apt upgrade -y
apt install -y bacula-director bacula-sd bacula-fd bacula-console bacula-common
# CentOS/RHEL için
yum install -y bacula-director bacula-storage bacula-client bacula-console
Paket kurulumu tamamlandıktan sonra servis durumlarını kontrol edin:
systemctl status bacula-director
systemctl status bacula-sd
systemctl status bacula-fd
Muhtemelen hepsi “failed” ya da “inactive” durumunda görünecektir. Bu normal, henüz yapılandırmadık.
Storage Daemon Yapılandırması
Storage Daemon’ın ana yapılandırma dosyası Ubuntu’da /etc/bacula/bacula-sd.conf yolundadır. Bu dosyayı açıp inceleyin.
Storage Daemon Temel Parametreleri
Yapılandırmayı sıfırdan oluşturalım. Önce mevcut dosyayı yedekleyin:
cp /etc/bacula/bacula-sd.conf /etc/bacula/bacula-sd.conf.bak
Şimdi /etc/bacula/bacula-sd.conf dosyasını şu şekilde düzenleyin:
Storage {
Name = storage-daemon
SDPort = 9103
WorkingDirectory = "/var/lib/bacula"
Pid Directory = "/run/bacula"
Plugin Directory = "/usr/lib/bacula"
Maximum Concurrent Jobs = 20
SDAddress = 192.168.1.10
}
Director {
Name = bacula-dir
Password = "guclu-bir-sifre-buraya-gelecek"
}
Autochanger {
Name = FileStorage
Device = FileChgr1
Changer Command = ""
Changer Device = /dev/null
}
Device {
Name = FileChgr1
Media Type = File
Archive Device = /backup/bacula
LabelMedia = yes
Random Access = Yes
AutomaticMount = yes
RemovableMedia = no
AlwaysOpen = no
Maximum Concurrent Jobs = 5
}
Messages {
Name = Standard
Director = bacula-dir = all
}
Yedek dizinini oluşturun ve izinleri ayarlayın:
mkdir -p /backup/bacula
chown -R bacula:bacula /backup/bacula
chmod 750 /backup/bacula
# Disk alanını kontrol et
df -h /backup
Storage Daemon İçin Şifre Belirleme
Bacula’da bileşenler birbirleriyle şifreli bağlantı kurar. Bu şifreleri rastgele üretmek iyi bir pratiktir:
# Güçlü rastgele şifre üret
openssl rand -base64 33
# Çıktı örneği: xK9mP2qRsT8vWnYzA1bCdEfGhIjKlMnO
# Bu şifreyi not edin, Director yapılandırmasında da kullanacaksınız
Şimdi Storage Daemon’ı başlatın ve test edin:
systemctl enable bacula-sd
systemctl start bacula-sd
systemctl status bacula-sd
# Port dinlenip dinlenmediğini kontrol et
ss -tlnp | grep 9103
Herhangi bir hata alırsanız logları inceleyin:
tail -f /var/log/bacula/bacula-sd.log
# veya
journalctl -u bacula-sd -f
Storage Daemon’a Birden Fazla Depolama Alanı Eklemek
Gerçek ortamlarda genellikle birden fazla yedek dizini veya depolama birimi kullanırsınız. Örneğin günlük yedekler için hızlı SSD, uzun dönem arşiv için yavaş ama büyük HDD dizisi:
Device {
Name = FastStorage
Media Type = File1
Archive Device = /mnt/ssd/bacula
LabelMedia = yes
Random Access = Yes
AutomaticMount = yes
RemovableMedia = no
AlwaysOpen = no
Maximum Concurrent Jobs = 10
Minimum Block Size = 65536
Maximum Block Size = 262144
}
Device {
Name = ArchiveStorage
Media Type = File2
Archive Device = /mnt/hdd/bacula-archive
LabelMedia = yes
Random Access = Yes
AutomaticMount = yes
RemovableMedia = no
AlwaysOpen = no
Maximum Concurrent Jobs = 2
}
Bu yapılandırma, Director tarafında farklı Pool’lara farklı depolama alanı atamanızı sağlar.
File Daemon Yapılandırması
File Daemon, yedeklenecek her makinede çalışması gereken hafif bir ajandır. Çok az kaynak tüketir ama doğru yapılandırılması kritiktir.
Director Sunucusunda FD Yapılandırması
Director sunucusunda (192.168.1.10) aynı zamanda kendi kendini de yedeklemek isteyebilirsiniz. /etc/bacula/bacula-fd.conf dosyasını düzenleyin:
FileDaemon {
Name = director-fd
FDport = 9102
WorkingDirectory = /var/lib/bacula
Pid Directory = /run/bacula
Plugin Directory = /usr/lib/bacula
Maximum Concurrent Jobs = 20
FDAddress = 192.168.1.10
}
Director {
Name = bacula-dir
Password = "fd-icin-ayri-bir-sifre"
}
Messages {
Name = Standard
Director = bacula-dir = all
}
İstemci Sunucusunda FD Kurulumu
client01.example.com (192.168.1.20) üzerinde sadece File Daemon kurulacak:
# Ubuntu/Debian istemcide
apt update
apt install -y bacula-fd
# CentOS/RHEL istemcide
yum install -y bacula-client
İstemcideki /etc/bacula/bacula-fd.conf dosyasını düzenleyin:
FileDaemon {
Name = client01-fd
FDport = 9102
WorkingDirectory = /var/lib/bacula
Pid Directory = /run/bacula
Plugin Directory = /usr/lib/bacula
Maximum Concurrent Jobs = 10
FDAddress = 192.168.1.20
}
Director {
Name = bacula-dir
Password = "client01-icin-guclu-sifre-buraya"
}
Messages {
Name = Standard
Director = bacula-dir = all
}
İstemcide servisi başlatın:
systemctl enable bacula-fd
systemctl start bacula-fd
systemctl status bacula-fd
# Port kontrolü
ss -tlnp | grep 9102
Güvenlik Duvarı Yapılandırması
Bacula bileşenleri arasındaki iletişim için firewall kuralları ekleyin:
# Director sunucusunda (UFW ile)
ufw allow 9101/tcp comment "Bacula Director"
ufw allow 9102/tcp comment "Bacula File Daemon"
ufw allow 9103/tcp comment "Bacula Storage Daemon"
# veya iptables ile
iptables -A INPUT -p tcp --dport 9101 -j ACCEPT
iptables -A INPUT -p tcp --dport 9102 -j ACCEPT
iptables -A INPUT -p tcp --dport 9103 -j ACCEPT
# CentOS/RHEL firewalld ile
firewall-cmd --permanent --add-port=9101/tcp
firewall-cmd --permanent --add-port=9102/tcp
firewall-cmd --permanent --add-port=9103/tcp
firewall-cmd --reload
İstemci sunucusunda sadece FD portu gereklidir:
# İstemcide (UFW)
ufw allow from 192.168.1.10 to any port 9102 proto tcp
Director Yapılandırmasına SD ve FD Eklenmesi
Storage Daemon ve File Daemon kurulumları tamamlandıktan sonra, Director’a bu bileşenleri tanıtmamız gerekiyor. /etc/bacula/bacula-dir.conf dosyasını düzenleyin.
Director’ın ana yapılandırmasına Storage tanımı ekleyin:
Storage {
Name = File1
Address = 192.168.1.10
SDPort = 9103
Password = "guclu-bir-sifre-buraya-gelecek"
Device = FileChgr1
Media Type = File
Maximum Concurrent Jobs = 10
}
Client {
Name = director-fd
Address = 192.168.1.10
FDPort = 9102
Catalog = MyCatalog
Password = "fd-icin-ayri-bir-sifre"
File Retention = 60 days
Job Retention = 6 months
AutoPrune = yes
}
Client {
Name = client01-fd
Address = 192.168.1.20
FDPort = 9102
Catalog = MyCatalog
Password = "client01-icin-guclu-sifre-buraya"
File Retention = 30 days
Job Retention = 3 months
AutoPrune = yes
}
Şifrelerin birbiriyle eşleştiğinden emin olun. Director’daki Client bloğundaki şifre, istemcideki bacula-fd.conf dosyasındaki Director bloğundaki şifreyle aynı olmalıdır. Aynı şekilde Storage bloğundaki şifre, bacula-sd.conf dosyasındaki Director bloğundaki şifreyle eşleşmelidir. Bu kafa karıştırıcı görünebilir ama bir tablo yerine şöyle özetleyeyim:
- Director -> Client bağlantısı: Director’daki
Clientbloğu şifresi = FD’dekiDirectorbloğu şifresi - Director -> Storage bağlantısı: Director’daki
Storagebloğu şifresi = SD’dekiDirectorbloğu şifresi
Yapılandırma Doğrulama
Tüm yapılandırmalar tamamlandıktan sonra syntax hatalarını kontrol edin:
# Director yapılandırmasını test et
bacula-dir -t -c /etc/bacula/bacula-dir.conf
# Storage Daemon yapılandırmasını test et
bacula-sd -t -c /etc/bacula/bacula-sd.conf
# File Daemon yapılandırmasını test et
bacula-fd -t -c /etc/bacula/bacula-fd.conf
Hata yoksa servisleri sırayla yeniden başlatın:
systemctl restart bacula-sd
systemctl restart bacula-fd
systemctl restart bacula-director
# Tüm servislerin durumunu kontrol et
systemctl status bacula-sd bacula-fd bacula-director
bconsole ile Bağlantı Testi
Bacula Console (bconsole) ile Director’a bağlanıp SD ve FD bağlantılarını test edin:
bconsole
# bconsole isteminde
*status storage=File1
*status client=director-fd
*status client=client01-fd
status client=client01-fd komutunun çıktısında Daemon started ve istemci bilgilerini görüyorsanız bağlantı başarılıdır.
Bağlantı hatası alırsanız şunları kontrol edin:
# İstemciye erişim var mı?
telnet 192.168.1.20 9102
# Storage Daemon'a erişim var mı?
telnet 192.168.1.10 9103
# Log dosyalarına bak
tail -100 /var/log/bacula/bacula.log | grep -i error
Gerçek Dünya Senaryosu: Haftalık Full, Günlük Incremental Yedekleme
Şimdi pratik bir senaryo kuralım. Bir e-ticaret şirketinin web sunucusunu yedekliyorsunuz:
- Pazar geceleri full yedek
- Pazartesi-Cumartesi günlük incremental yedek
- Yedekler 30 gün saklanacak
bacula-dir.conf dosyasına şu Job ve Schedule tanımları eklenir:
Schedule {
Name = "WeeklyFull"
Run = Full sun at 23:00
Run = Incremental mon-sat at 02:00
}
FileSet {
Name = "WebServerFiles"
Include {
Options {
signature = MD5
compression = GZIP
}
File = /var/www/html
File = /etc/nginx
File = /etc/ssl
}
Exclude {
File = /var/www/html/cache
File = /tmp
}
}
Job {
Name = "BackupClient01"
Type = Backup
Level = Incremental
Client = client01-fd
FileSet = "WebServerFiles"
Schedule = "WeeklyFull"
Storage = File1
Messages = Standard
Pool = DefaultPool
Priority = 10
Write Bootstrap = "/var/lib/bacula/client01.bsr"
}
Pool {
Name = DefaultPool
Pool Type = Backup
Recycle = yes
AutoPrune = yes
Volume Retention = 30 days
Maximum Volume Bytes = 50G
Maximum Volumes = 100
Label Format = "Vol-"
}
Bu yapılandırmayla Bacula, Pazar akşamı tam yedek alacak, diğer günler sadece değişen dosyaları yedekleyecek. 30 günden eski volumeler otomatik olarak geri dönüştürülecek.
Yaygın Sorunlar ve Çözümleri
Kurulum sürecinde karşılaşacağınız en sık problemlere bakalım:
Şifre uyumsuzluğu: En sık karşılaşılan sorundur. Logda Authorization key rejected hatası görürsünüz. Tüm şifreleri tekrar kontrol edin.
Permission denied on /backup/bacula: Storage Daemon bacula kullanıcısı olarak çalışır. Dizin izinlerini kontrol edin:
ls -la /backup/
chown -R bacula:bacula /backup/bacula
chmod 750 /backup/bacula
# SELinux varsa (CentOS/RHEL)
chcon -R -t bacula_store_t /backup/bacula
Volume label hatası: Yeni volume’lar için önce label atanması gerekir:
bconsole
*label storage=File1 volume=Vol-0001 pool=DefaultPool
FD istemciye ulaşılamıyor: Istemci tarafında DNS çözümlemesi veya firewall engeliyor olabilir. IP adresi ile test edin:
# Director sunucusundan
nc -zv 192.168.1.20 9102
Performans Optimizasyonu
Büyük veri yedeklerinde Storage Daemon performansı kritik önem taşır:
Device {
Name = FastStorage
Media Type = File1
Archive Device = /backup/bacula
LabelMedia = yes
Random Access = Yes
AutomaticMount = yes
RemovableMedia = no
AlwaysOpen = no
Maximum Concurrent Jobs = 5
# Buffer ayarları
Minimum Block Size = 65536
Maximum Block Size = 1048576
# Spool ayarları performansı artırır
Spool Directory = /tmp/bacula-spool
Maximum Spool Size = 20gb
}
Director tarafında da paralel işleri sınırlamak önemlidir. Çok fazla paralel iş ağı ve diski yorar. Ortamınıza göre Maximum Concurrent Jobs değerini ayarlayın.
Sonuç
Bu yazıda Bacula’nın Storage Daemon ve File Daemon bileşenlerini kurdum, yapılandırdım ve test ettik. Dikkat edilmesi gereken kritik noktaları özetleyeyim:
- Şifrelerin karşılıklı eşleşmesi şart, en küçük yazım hatası bağlantıyı keser
- Dizin izinleri bacula kullanıcısı için doğru ayarlanmalı
- Firewall kuralları her bileşen için ayrı düşünülmeli
- Yapılandırma değişikliklerinden sonra her zaman
-tile syntax testi yapın - bconsole’u öğrenin, sorun gidermede hayat kurtarır
Bir sonraki adım olarak Bacula Web arayüzü olan Baculum‘u kurmayı veya veritabanı katalogu için PostgreSQL kullanmayı inceleyebilirsiniz. Kurumsal ortamlarda MySQL/MariaDB yerine PostgreSQL genellikle daha iyi performans verir.
Herhangi bir adımda takılırsanız /var/log/bacula/bacula.log dosyası genellikle sorunun tam olarak nerede olduğunu söyler. Bacula logları oldukça ayrıntılı ve anlaşılırdır, okumaktan çekinmeyin.
