標籤:
安裝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、ConsolebaculaClient 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_databaseCreation of bacula database succeeded.# ./make_mysql_tablesCreation 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-dirDIRport = 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(差異備份),如果第一#次沒做完全備份,則先進行完全備份後再執行Incrementaltype = Backup #定義Job的類型,“backup”為備份任務,可選的類型還有restore和verify等FileSet = dbfs #指定要備份的用戶端資料,“dbfs”在後面FileSet邏輯段中進行定義Schedule = dbscd #指定這個備份任務的執行時間策略,“dbscd”在後面的Schedule邏輯段中進行了定義Storage = dbsd #指定備份資料的儲存路徑與介質,“dbsd” 在後面的Storage邏輯段中進行定義Messages = StandardPool = dbpool #指定備份使用的pool屬性,“dbpool”在後面的Pool邏輯段中進行定義。write Bootstrap = "/opt/bacula/var/bacula/working/Client2.bsr" #指定備份的引導資訊路徑}Job { #定義一個名為Client的差異備份的任務Name = "Client"Type = BackupFileSet = dbfsSchedule = dbscdStorage = dbsdMessages = StandardPool = dbpoolClient = dbfdLevel = Differential #指定備份層級為差異備份Write Bootstrap = "/opt/bacula/var/bacula/working/Client1.bsr"}Job { #定義一個名為BackupCatalog的完全備份任務Name = "BackupCatalog"Type = BackupLevel = Full #指定備份層級為完全備份Client = dbfdFileSet="dbfs"Schedule = "dbscd"Pool = dbpoolStorage = dbsdMessages = StandardRunBeforeJob = "/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=dbfdFileSet=dbfsStorage = dbsdPool = dbpoolMessages = StandardWhere = /tmp/bacula-restores #指定預設恢複資料到這個路徑}FileSet { #定義一個名為dbfs的備份資源,也就是指定需要備份哪些資料,需要排除哪些資料等,可以指定多個FileSetName = dbfsInclude {Options {signature = MD5; Compression=gzip; } #表示使用MD5簽名並壓縮file = /cws3 #指定用戶端FD需要備份的檔案目錄}Exclude { #通過Exclude排除不需要備份的檔案或者目錄,可根據具體情況修改File = /opt/bacula/var/bacula/workingFile = /tmpFile = /procFile = /tmpFile = /.journalFile = /.fsck}}Schedule { #定義一個名為dbscd的備份任務調度策略Name = dbscdRun = 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 = dbfd1Address = 192.168.12.188FDPort = 9102Catalog = MyCatalogPassword = "Wr8lj3q51PgZ21U2FSaTXICYhLmQkT1XhHbm8a6/j8Bz"File Retention = 30 daysJob Retention = 6 monthsAutoPrune = yes}Storage { # Storage用來定義將用戶端的資料備份到哪個存放裝置上Name = dbsdAddress = 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 = MyCatalogdbname = "bacula"; dbuser = "bacula"; dbpassword = "" #指定庫名、使用者名稱和密碼}Messages { # Messages邏輯段用來設定Director端如何儲存日誌,以及日誌的儲存格式,可以將日誌資訊發送到管理員郵箱,前提是必須開啟sendmail服務Name = Standardmailcommand = "/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, !skippedoperator = [email protected] = mountconsole = all, !skipped, !savedappend = "/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 = Daemonmailcommand = "/usr/sbin/bsmtp -h localhost -f \"\(Bacula\) \<%r\>\" -s \"Bacula daemon message\" %r"mail = [email protected] = all, !skippedconsole = all, !skipped, !savedappend = "/opt/bacula/log/bacula_demo.log" = all, !skipped}Pool { #定義供Job任務使用的池屬性資訊,例如,設定備份檔案到期時間、是否覆蓋到期的備份資料、是否自動清除到期備份等Name = dbpoolPool Type = BackupRecycle = 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-id139Maximum Volumes = 7 #設定最多儲存多少個備份檔案Recycle Current Volume = yes #表示可以使用最近到期的備份檔案來儲存新備份Maximum Volume Jobs = 1 #表示每次執行備份任務建立一個備份檔案}Console { #限定Console利用tray-monitor獲得Director的狀態資訊Name = f10-64-build-monPassword = "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-sdName = f10-64-build-sd #定義儲存名稱SDPort = 9103 #監聽連接埠WorkingDirectory = "/opt/bacula/var/bacula/working"Pid Directory = "/var/run"Maximum Concurrent Jobs = 20}Director { #定義一個控制StorageDaemon的DirectorName = f10-64-build-dir #這裡的“Name”值必須和Director端設定檔bacula-dir.conf中Director邏輯段名稱相同Password = "ouDao0SGXx/F+Tx4YygkK4so0l/ieqGJIkQ5DMsTQh6t" #這裡的“Password”值必須和Director端設定檔bacula-dir.conf中Storage邏輯段密碼相同}Director { #定義一個監控端的DirectorName = f10-64-build-mon #這裡的“Name”值必須和Director端設定檔bacula-dir.conf中Console邏輯段名稱相同Password = "RSQy3sRjak3ktZ8Hr07gc728VkZHBr0QCjOC5x3pXEap" #這裡的“Password”值必須和Director端設定檔bacula-dir.conf中Console邏輯段密碼相同Monitor = yes}Device { #定義DeviceName = 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; #設定是否採用隨機訪問儲存介質,這裡選擇yesAutomaticMount = yes; #表示當存放裝置開啟時,是否自動使用它,這選擇yesRemovableMedia = no; #是否支援可移動的裝置,如tap或cd,這裡選擇noAlwaysOpen = no; #是否確保tap裝置總是可用,這裡沒有使用tap裝置,因此設定為no}Messages { #為儲存端SD定義一個日誌或訊息處理機制Name = Standarddirector = 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-monPassword = "RSQy3sRjak3ktZ8Hr07gc728VkZHBr0QCjOC5x3pXEap"Monitor = yes}FileDaemon { #定義一個FD端Name = localhost.localdomain-fdFDport = 9102 #監控連接埠WorkingDirectory = /opt/bacula/var/bacula/workingPid Directory = /var/runMaximum Concurrent Jobs = 20 #定義一次能處理的並發作業數}Messages { #定義一個用於FD端的MessagesName = Standarddirector = localhost.localdomain-dir = all, !skipped, !restored}啟動bacula的Director daemon與Storage daemon
完成上面的配置後,就可以啟動或關閉bacula了。在baculaserver上啟動或關閉控制端的所有服務,有如下兩種方式。
第一種方式如下:
[[email protected] etc]# /opt/bacula/sbin/bacula{start|stop|restart|status}
也可以通過分別管理bacula各個配置端的方式,依次啟動或者關閉每個服務:
[[email protected] etc]# /opt/bacula/etc/bacula-ctl-dir {start|stop|restart|status}[[email protected] etc]# /opt/bacula/etc/bacula-ctl-sd {start|stop|restart|status}[[email protected] etc]# /opt/bacula/etc/bacula-ctl-fd {start|stop|restart|status}
由於將用戶端FD配置到了另一個主機baculaclient上,因此無需在baculaserver上啟動File daemon服務。啟動bacula的所有服務後,通過netstat命令,觀察啟動連接埠情況:
[[email protected] etc]# netstat -antl |grep 91tcp 0 0 0.0.0.0:9101 0.0.0.0:* LISTENtcp 0 0 0.0.0.0:9102 0.0.0.0:* LISTENtcp 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的控制端時會報錯:
[[email protected] opt]# /opt/bacula/sbin/bconsoleConnecting to Director 192.168.12.188:910119-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服務,操作如下:
[[email protected] etc]# /opt/bacula/sbin/bacula startStarting the Bacula File daemon
管理用戶端FD的服務,也可以通過以下方式完成:
[[email protected] etc]# /opt/bacula/sbin/bacula {start|stop|restart|status}[[email protected] baculaclient etc]# /opt/bacula/etc/bacula-ctl-fd {start|stop|restart|status}
開源網路備份軟體 bacula 的安裝、配置和運行