開源網絡備份軟件 bacula 的安裝、配置和運行

開源備份管理工具Bacula整體框架如下:

Bacula <wbr>的配置和使用


  • File Server 需要備份的對象, 由 file daemon 進程負責與 backup server director daemon 進程通訊
  • Storage Server 備份服務器,有 storage daemon 進程負責與 backup server director daemon 進程通訊
  • backup Server  控制file server 和 storage server 進行備份和還原,對客戶端發出的指令以及作業進行調度執行
  • Admin workstation 爲用戶提供操作和監控見面

安裝bacula

1 bacula的幾種網絡備份拓撲

前面文章介紹了bacula有5個組成部分,在實際的應用中,沒有必要將5個部分分別放在不同的服務器上,它們之間的某些部分是可以合併的,常見的bacula部署結構有如下幾種:

Director與SD以及Console在一臺機器上,而客戶端FD在另外一臺機器上,當然客戶端FD可以有一臺或者多臺上。
Director與Console在一臺機器上,SD在一臺機器上,客戶端FD在一臺或者多臺上。
Director與客戶端FD、SD以及Console端都在一臺機器上,也就是服務器自己備份自己,數據保存在本機。

2 編譯與安裝bacula

這裏對上一節的第一種bacula部署結構進行介紹。環境如表4-1所示。

表1 一個bacula部署結構的環境

主機名       IP地址         操作系統   應用角色
baculaServer 192.168.12.188 CentOS     release 5.4 Director、SD、Console
baculaClient 192.168.12.189 CentOS     release 5.4 FD

整個拓撲結構:


圖1 bacula實例的拓撲結構

在bacula服務器端安裝bacula

首先在http://www.bacula.org下載相應的源碼,這裏下載的是bacula-5.0.1.tar.gz,接着進行編譯安裝,安裝過程如下:

# tar zxvf bacula-5.0.1.tar.gz
# cd bacula-5.0.1
# ./configure --prefix=/opt/bacula --with-mysql=/opt/mysql
# make
# make install

bacula需要數據庫的 支持,這裏採用Mysql數據庫,並假定Mysql已經在bacula服務器端安裝好了,且Mysql安裝路徑爲/opt/mysql(bacula在編 譯時通過“--with-mysql”選項指定了Mysql數據庫的安裝路徑)。 bacula安裝完成後,所有配置文件默認放在/opt/bacula/etc/目錄下。

在bacula客戶端安裝bacula

由於bacula客戶端只是是需要備份的客戶端,因而只需安裝相應的客戶端組件即可,過程如下:

# tar zxvf bacula-5.0.1.tar.gz
# cd bacula-5.0.1
# ./configure --prefix=/opt/bacula --enable-client-only
# make
# make install

3 初始化Mysql數據庫

在baculaServer上安裝完bacula後,還需要創建bacula對應的Mysql數據庫以及訪問數據庫的授權,好在bacula已經爲用戶準備好了這樣的腳本,接下來只要在bacula服務器端上執行如下腳本即可。

#cd /opt/bacula/etc
# ./grant_mysql_privileges
# ./create_mysql_database
Creation of bacula database succeeded.

# ./make_mysql_tables
Creation of Bacula MySQL tables succeeded.

接下來可以登錄Mysql數據庫,查看bacula的數據庫和數據表是否已經建立。在執行上面三行Mysql初始代碼時,默認由空密碼的root用戶執行,因此要請確保Mysql數據庫root密碼爲空。

配置bacula備份系統

其實就是對Director端配置文件bacula-dir.conf、SD配置文件bacula-sd.conf、客戶端FD配置文件bacula-fd.conf以及Console端配置文件bconsole.conf進行配置的過程。
根據上面的安裝部署,將Director端、SD、Console端集中在一臺服務器baculaServer(即192.168.12.188)上,而將客戶端FD部署在baculaClient(即192.168.12.189)服務器上,下面詳細講述配置過程。

1 配置bacula的Console端

Console端的配置文件是bconsole.conf,這個配置文件很簡單,配置完的文件如下:

Director {
Name = f10-64-build-dir #控制端名稱,在下面的bacula-dir.conf和bacula-sd.conf
#文件中會陸續的被引用
DIRport = 9101 #控制端服務端口
address = 192.168.12.188 #控制端服務器IP地址
Password = "ouDao0SGXx/F+Tx4YygkK4so0l/ieqGJIkQ5DMsTQh6t"
#控制端密碼文件
}

2 配置bacula的Director端

bacula-dir.conf是Director端的配置文件,也是bacula的核心配置文件,這個文件非常複雜,共分爲10個邏輯段,分別是:

  • Director,定義全局設置
  • Catalog,定義後臺數據庫
  • Jobdefs,定義默認執行任務
  • Job,自定義一個備份或者恢復任務
  • Fileset,定義備份哪些數據,不備份哪些數據
  • Schedule,定義備份時間策略
  • Pool,定義供Job使用的池屬性
  • Client,定義要備份的主機地址
  • Storage,定義數據的存儲方式
  • Messages,定義發送日誌報告和記錄日誌的位置

代碼清單1是一個已經配置好的文件,其中,“#”號後面的內容爲註釋。

代碼清單1 已經設置好的Director端的配置文件

Director { #定義bacula的全局配置
Name = f10-64-build-dir
DIRport = 9101 #定義Director的監聽端口
QueryFile = "/opt/bacula/etc/query.sql"
WorkingDirectory = "/opt/bacula/var/bacula/working"
PidDirectory = "/var/run"
Maximum Concurrent Jobs = 1 #定義一次能處理的最大併發數

#驗證密碼,這個密碼必須與bconsole.conf文件中對應的Director邏輯段密碼相同
Password = "ouDao0SGXx/F+Tx4YygkK4so0l/ieqGJIkQ5DMsTQh6t"

#定義日誌輸出方式,“Daemon”在下面的Messages邏輯段中進行了定義
Messages = Daemon
}

Job { #自定義一個備份任務
Name = "Client1" #備份任務名稱
Client = dbfd #指定要備份的客戶端主機,“dbfd”在後面Client邏輯段中進行定義
Level = Incremental #定義備份的級別,Incremental爲增量備份。Level的取值#可爲Full(完全備份)、Incremental(增量備份)和Differential(差異備份),如果第一#次沒做完全備份,則先進行完全備份後再執行Incremental
Type = Backup #定義Job的類型,“backup”爲備份任務,可選的類型還有restore和verify等
FileSet = dbfs #指定要備份的客戶端數據,“dbfs”在後面FileSet邏輯段中進行定義
Schedule = dbscd #指定這個備份任務的執行時間策略,“dbscd”在後面的Schedule邏輯段中進行了定義
Storage = dbsd #指定備份數據的存儲路徑與介質,“dbsd” 在後面的Storage邏輯段中進行定義
Messages = Standard
Pool = dbpool #指定備份使用的pool屬性,“dbpool”在後面的Pool邏輯段中進行定義。
Write Bootstrap = "/opt/bacula/var/bacula/working/Client2.bsr" #指定備份的引導信息路徑
}

Job { #定義一個名爲Client的差異備份的任務
Name = "Client"
Type = Backup
FileSet = dbfs
Schedule = dbscd
Storage = dbsd
Messages = Standard
Pool = dbpool
Client = dbfd
Level = Differential #指定備份級別爲差異備份
Write Bootstrap = "/opt/bacula/var/bacula/working/Client1.bsr"
}

Job { #定義一個名爲BackupCatalog的完全備份任務
Name = "BackupCatalog"
Type = Backup
Level = Full #指定備份級別爲完全備份
Client = dbfd
FileSet="dbfs"
Schedule = "dbscd"
Pool = dbpool
Storage = dbsd
Messages = Standard
RunBeforeJob = "/opt/bacula/etc/make_catalog_backup bacula bacula"
RunAfterJob = "/opt/bacula/etc/delete_catalog_backup"
Write Bootstrap = "/opt/var/bacula/working/BackupCatalog.bsr"
}

Job { #定義一個還原任務
Name = "RestoreFiles"
Type = Restore #定義Job的類型爲“Restore ”,即恢復數據
Client=dbfd
FileSet=dbfs
Storage = dbsd
Pool = dbpool
Messages = Standard
Where = /tmp/bacula-restores #指定默認恢復數據到這個路徑
}

FileSet { #定義一個名爲dbfs的備份資源,也就是指定需要備份哪些數據,需要排除哪些數據等,可以指定多個FileSet
Name = dbfs
Include {
Options {
signature = MD5; Compression=GZIP; } #表示使用MD5簽名並壓縮
File = /cws3 #指定客戶端FD需要備份的文件目錄
}

Exclude { #通過Exclude排除不需要備份的文件或者目錄,可根據具體情況修改
File = /opt/bacula/var/bacula/working
File = /tmp
File = /proc
File = /tmp
File = /.journal
File = /.fsck
}
}

Schedule { #定義一個名爲dbscd的備份任務調度策略
Name = dbscd
Run = Full 1st sun at 23:05 #第一週的週日晚23:05分進行完全備份
Run = Differential 2nd-5th sun at 23:05 #第2~5周的週日晚23:05進行差異備份
Run = Incremental mon-sat at 23:05 #所有周一至週六晚23:05分進行增量備份
}

FileSet {
Name = "Catalog"
Include {
Options {
signature = MD5
}
File = /opt/bacula/var/bacula/working/bacula.sql
}
}

Client { #Client用來定義備份哪個客戶端FD的數據
Name = dbfd #Clinet的名稱,可以在前面的Job中調用
Address = 192.168.12.189 #要備份的客戶端FD主機的IP地址
FDPort = 9102 #與客戶端FD通信的端口
Catalog = MyCatalog #使用哪個數據庫存儲信息,“MyCatalog”在後面的MyCatalog邏輯段中進行定義
Password = "ouDao0SGXx/F+Tx4YygkK4so0l/ieqGJIkQ5DMsTQh6t" #Director端與客戶端FD的驗證密碼,這個值必須與客戶端FD配置文件bacula-fd.conf中密碼相同
File Retention = 30 days #指定保存在數據庫中的記錄多久循環一次,這裏是30天,隻影響數據庫中的記錄不影響備份的文件
Job Retention = 6 months #指定Job的保持週期,應該大於File Retention指定的值
AutoPrune = yes #當達到指定的保持週期時,是否自動刪除數據庫中的記錄,yes表示自動清除過期的Job
}

Client {
Name = dbfd1
Address = 192.168.12.188
FDPort = 9102
Catalog = MyCatalog
Password = "Wr8lj3q51PgZ21U2FSaTXICYhLmQkT1XhHbm8a6/j8Bz"
File Retention = 30 days
Job Retention = 6 months
AutoPrune = yes
}

Storage { # Storage用來定義將客戶端的數據備份到哪個存儲設備上
Name = dbsd
Address = 192.168.12.188 #指定存儲端SD的IP地址
SDPort = 9103 #指定存儲端SD通信的端口
Password = "ouDao0SGXx/F+Tx4YygkK4so0l/ieqGJIkQ5DMsTQh6t" #Director端與存儲端SD的驗證密碼,這個值必須與存儲端SD配置文件bacula-sd.conf中Director邏輯段密碼相同
Device = dbdev #指定數據備份的存儲介質,必須與存儲端(這裏是192.168.12.188)的bacula-sd.conf配置文件中的“Device” 邏輯段的“Name”項名稱相同
Media Type = File #指定存儲介質的類別,必須與存儲端SD(這裏是192.168.12.188)的bacula-sd.conf配置文件中的“Device” 邏輯段的“Media Type”項名稱相同
}

Catalog { # Catalog邏輯段用來定義關於日誌和數據庫設定
Name = MyCatalog
dbname = "bacula"; dbuser = "bacula"; dbpassword = "" #指定庫名、用戶名和密碼
}

Messages { # Messages邏輯段用來設定Director端如何保存日誌,以及日誌的保存格式,可以將日誌信息發送到管理員郵箱,前提是必須開啓sendmail服務
Name = Standard
mailcommand = "/usr/sbin/bsmtp -h localhost -f \"\(Bacula\) \<%r\>\" -s \"Bacula: %t %e of %c %l\" %r"
operatorcommand = "/usr/sbin/bsmtp -h localhost -f \"\(Bacula\) \<%r\>\" -s \"Bacula: Intervention needed for %j\" %r"
mail = [email protected] = all, !skipped
operator = [email protected] = mount
console = all, !skipped, !saved
append = "/opt/bacula/log/bacula.log" = all, !skipped #定義bacula的運行日誌
append ="/opt/bacula/log/bacula.err.log" = error,warning, fatal #定義bacula的錯誤日誌
catalog = all
}

Messages { #定義了一個名爲Daemon的Messages邏輯段,“Daemon”已經在前面進行了引用
Name = Daemon
mailcommand = "/usr/sbin/bsmtp -h localhost -f \"\(Bacula\) \<%r\>\" -s \"Bacula daemon message\" %r"
mail = [email protected] = all, !skipped
console = all, !skipped, !saved
append = "/opt/bacula/log/bacula_demo.log" = all, !skipped
}

Pool { #定義供Job任務使用的池屬性信息,例如,設定備份文件過期時間、是否覆蓋過期的備份數據、是否自動清除過期備份等
Name = dbpool
Pool Type = Backup
Recycle = yes #重複使用
AutoPrune = yes #表示自動清除過期備份文件
Volume Retention = 7 days #指定備份文件保留的時間
Label Format ="db-${Year}-${Month:p/2/0/r}-${Day:p/2/0/r}-id${JobId}" #設定備份文件的命名格式,這個設定格式會產生的命名文件爲:db-2010-04-18-id139
Maximum Volumes = 7 #設置最多保存多少個備份文件
Recycle Current Volume = yes #表示可以使用最近過期的備份文件來存儲新備份
Maximum Volume Jobs = 1 #表示每次執行備份任務創建一個備份文件
}

Console { #限定Console利用tray-monitor獲得Director的狀態信息
Name = f10-64-build-mon
Password = "RSQy3sRjak3ktZ8Hr07gc728VkZHBr0QCjOC5x3pXEap"
CommandACL = status, .status
}

3 配置bacula的SD

SD可以是一臺單獨的服務器,也可以和Director在一臺機器上,本例就將SD和Director端放在一起進行配置,SD的配置文件是bacula-sd.conf,代碼清單2是一個已經配置好的bacula-sd.conf文件。

代碼清單2 配置好的bacula-sd.conf文件

Storage { #定義存儲,本例中是f10-64-build-sd
Name = f10-64-build-sd #定義存儲名稱
SDPort = 9103 #監聽端口
WorkingDirectory = "/opt/bacula/var/bacula/working"
Pid Directory = "/var/run"
Maximum Concurrent Jobs = 20
}

Director { #定義一個控制StorageDaemon的Director
Name = f10-64-build-dir #這裏的“Name”值必須和Director端配置文件bacula-dir.conf中Director邏輯段名稱相同
Password = "ouDao0SGXx/F+Tx4YygkK4so0l/ieqGJIkQ5DMsTQh6t" #這裏的“Password”值必須和Director端配置文件bacula-dir.conf中Storage邏輯段密碼相同
}

Director { #定義一個監控端的Director
Name = f10-64-build-mon #這裏的“Name”值必須和Director端配置文件bacula-dir.conf中Console邏輯段名稱相同
Password = "RSQy3sRjak3ktZ8Hr07gc728VkZHBr0QCjOC5x3pXEap" #這裏的“Password”值必須和Director端配置文件bacula-dir.conf中Console邏輯段密碼相同
Monitor = yes
}

Device { #定義Device
Name = dbdev #定義Device的名稱,這個名稱在Director端配置文件bacula-dir.conf中的Storage邏輯段Device項中被引用
Media Type = File #指定存儲介質的類型,File表示使用文件系統存儲
Archive Device = /webdata #Archive Device用來指定備份存儲的介質,可以是cd、dvd、tap等,這裏是將備份的文件保存的/webdata目錄下
LabelMedia = yes; #通過Label命令來建立卷文件
Random Access = yes; #設置是否採用隨機訪問存儲介質,這裏選擇yes
AutomaticMount = yes; #表示當存儲設備打開時,是否自動使用它,這選擇yes
RemovableMedia = no; #是否支持可移動的設備,如tap或cd,這裏選擇no
AlwaysOpen = no; #是否確保tap設備總是可用,這裏沒有使用tap設備,因此設置爲no
}

Messages { #爲存儲端SD定義一個日誌或消息處理機制
Name = Standard
director = f10-64-build-dir = all
}

4 配置bacula的FD端

客戶端FD運行在一臺獨立的服務器上,在本例中是baculaclient主機(即192.168.12.189),它的配置文件是bacula-fd.conf,配置好的文件如下:

Director { #定義一個允許連接FD的控制端
Name = f10-64-build-dir #這裏的“Name”值必須和Director端配置文件bacula-dir.conf中Director邏輯段名稱相同
Password = "ouDao0SGXx/F+Tx4YygkK4so0l/ieqGJIkQ5DMsTQh6t" #這裏的“Password”值必須和Director端配置文件bacula-dir.conf中Client邏輯段密碼相同
}

Director { #定義一個允許連接FD的監控端
Name = f10-64-build-mon
Password = "RSQy3sRjak3ktZ8Hr07gc728VkZHBr0QCjOC5x3pXEap"
Monitor = yes
}

FileDaemon { #定義一個FD端
Name = localhost.localdomain-fd
FDport = 9102 #監控端口
WorkingDirectory = /opt/bacula/var/bacula/working
Pid Directory = /var/run
Maximum Concurrent Jobs = 20 #定義一次能處理的併發作業數
}

Messages { #定義一個用於FD端的Messages
Name = Standard
director = localhost.localdomain-dir = all, !skipped, !restored
}

啓動bacula的Director daemon與Storage daemon

完成上面的配置後,就可以啓動或關閉bacula了。在baculaserver上啓動或關閉控制端的所有服務,有如下兩種方式。

第一種方式如下:

[root@baculaserver etc]# /opt/bacula/sbin/bacula
{start|stop|restart|status}

也可以通過分別管理bacula各個配置端的方式,依次啓動或者關閉每個服務:

[root@baculaserver etc]# /opt/bacula/etc/bacula-ctl-dir {start|stop|restart|status}
[root@baculaserver etc]# /opt/bacula/etc/bacula-ctl-sd {start|stop|restart|status}
[root@baculaserver etc]# /opt/bacula/etc/bacula-ctl-fd {start|stop|restart|status}

由於將客戶端FD配置到了另一個主機baculaclient上,因此無需在baculaserver上啓動File daemon服務。啓動bacula的所有服務後,通過netstat命令,觀察啓動端口情況:

[root@localhost etc]# netstat -antl |grep 91
tcp 0 0 0.0.0.0:9101 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:9102 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:9103 0.0.0.0:* LISTEN

其中,9101代表Director daemon;9102代表File daemon;9103代表Storage daemon。注意在啓動bacula的所有服務前,必須啓動MySQL數據庫,如果MySQL數據庫沒有啓動,連接bacula的控制端時會報錯:

[root@baculaserver opt]# /opt/bacula/sbin/bconsole
Connecting to Director 192.168.12.188:9101
19-04月 09:45 bconsole JobId 0: Fatal error: bsock.c:135 Unable to connect to Director daemon on 192.168.12.188:9101. ERR=拒絕連接

此時,執行netstat命令可以發現,9101端口根本沒有啓動。

在客戶端FD啓動File daemon

最後 ,在客戶端FD(即baculaclient)上啓動File daemon服務,操作如下:

[root@baculaclient etc]# /opt/bacula/sbin/bacula start
Starting the Bacula File daemon

管理客戶端FD的服務,也可以通過以下方式完成:

[root@baculaclient etc]# /opt/bacula/sbin/bacula {start|stop|restart|status}
[root@ baculaclient etc]# /opt/bacula/etc/bacula-ctl-fd {start|stop|restart|status}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章