BACULA安裝
Bacula是一款開源的跨平台網絡備份工具,提供基于企業級的CS的備份解決方案。可以對資料進行備份、恢複、以及完整性校驗。
功能特點
支援完全備份,增量備份,差異備份。
支援多種恢複方式
支援多種檔案系統下的備份恢複(ext3、ext2、reiserfs、xfs、jfs、smbfs、iso9660、ntfs等)
支援各種備份媒體
支援多種作業系統
強大的内部功能
組成部分
一個完整的bacula備份系統,由下面5個部分組成
Director Daemon:負責監聽所有的備份、恢複、驗證、存檔事務,以及定制備份和恢複檔案計劃等,并将整個系統運作狀況記錄在一個資料庫檔案中。其配置檔案為bacula-dir.conf。
Storage Daemon(SD):主要負責将資料備份到存儲媒體上,而在資料恢複時,負責将資料從存儲媒體中傳送出去。其配置檔案為bacula-sd.conf。
File Daemon(FD):安裝在需要備份資料的機器上的守護程序,在備份資料時,它負責把檔案傳出,在恢複資料時負責接收資料并執行恢複操作。配置檔案為bacula-fd.conf。
Console:管理控制台。可以通過這個控制台連接配接到Director Daemon進行管理備份與恢複操作。
Monitor:程序監控端。
工作流程
1、通過console連接配接到Director端,備份恢複操作開始。
2、Director端從自己的資料庫中調出記錄資訊,對存儲端SD與用戶端FD的任務進行協調。
3、用戶端FD負責驗證Director的操作許可,如果驗證通過,則允許連接配接到存儲端SD
4、用戶端FD根據Director發出的請求去連接配接SD,将FD端的資料備份到存SD指定的存儲媒體上,或者将SD端存儲媒體中的資料傳回到用戶端FD指定的位置上,完成備份恢複過程。
以上是bacula簡介均屬百度百科摘抄。
拓撲流程圖:
其實bacula這5個核心元件不必分别裝在不同的機器上,筆者這兒就直接使用2台雲主機模拟服務流程:
1.京東雲主機:server [ console director mysql monitor SD ]
2.阿裡雲主機:client [ FD ]
[root@JD ~]# uname -r
3.10.0-514.el7.x86_64
需要安裝資料庫
yum install mariadb* -y
在Client和Server端下載下傳解壓預編譯包
[root@JD src]# pwd
/usr/local/src
[root@JD src]# tar -zvxf bacula-5.2.13.tar.gz
[root@JD src]# cd bacula-5.2.13
Client主機上:
[root@Aliyun bacula-5.2.13]# ./configure --prefix=/usr/local/bacula --enable-client-only
[root@Aliyun bacula-5.2.13]# make
[root@Aliyun bacula-5.2.13]# make install
[root@Aliyun bacula-5.2.13]# cd /usr/local/bacula/etc/
[root@Aliyun etc]# egrep -v '^#|^$' bacula-fd.conf
Director {##定義連接配接用戶端FD的控制端
Name = JD-dir
Password = "dc5XEaySjV90PBfM0wCChirlEYkH4feUXjesKNHxdU2X"
##名字和密碼是用來驗證Server控制端的連接配接操作是否合法,需要與Server端的bacula-dir.conf中的Director一緻.
}
Director {##定義允許連接配接用戶端FD的監控段
Name = JD-mon
Password = "JMRJc5OtI7eqz+Fh3mbe6yQJig6R6wwTftuWX7+bXUAx"
##一樣是驗證,這是驗證server端監控本地程序是否合法
Monitor = yes##開啟監控
}
FileDaemon { ##定義用戶端的FD
Name = xad-fd
FDport = 9102 #預設監聽端口
WorkingDirectory = /usr/local/bacula/opt/bacula/working
Pid Directory = /var/run
Maximum Concurrent Jobs = 20##一次能處理的并發作業數
}
Messages {
Name = Standard
director = xad-dir = all, !skipped, !restored
}
Server主機上:
[root@JD bacula-5.2.13]# ./configure --prefix=/usr/local/bacula --with-mysql #需開啟資料庫
[root@JD bacula-5.2.13]# make
[root@JD bacula-5.2.13]# make install
設定資料庫和建立庫和表
[root@JD bacula-5.2.13]# cd /usr/local/bacula/etc/
執行以下三個檔案,預設以資料庫root使用者且密碼為空進行,倘若root有密碼,則同時修改這三個檔案中連接配接資料庫的代碼段:
......
if mysql -D ${db_name} $* -u root -p00000000 -f <<END-OF-DATA
#添加紅色部分,-p後為root密碼
......
[root@JD etc]# ./grant_mysql_privileges ##開啟遠端連接配接
[root@JD etc]#./create_mysql_database ##建立資料庫
[root@JD etc]#./make_mysql_tables ##建立資料表
進入mysql并檢視是否有相關的資料資訊
MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| bacula |
| mysql |
| performance_schema |
| test |
| xad |
+--------------------+
6 rows in set (0.00 sec)
Console端配置
[root@JD etc]# egrep -v '^#|^$' bconsole.conf##編輯console端配置檔案
Director {
Name = JD-dir##Director端名稱
DIRport = 9101##console預設端口
address = Dir-IP##Director端位址
Password = "dc5XEaySjV90PBfM0wCChirlEYkH4feUXjesKNHxdU2X"
##與Director端驗證是的密碼,需與Director端一緻
}
Director端配置
控制端配置檔案共有10個邏輯段:
Director{...} 定義全局設定
Jobdefs{...} 定義預設執行任務
Job{...} 自定義一個備份或者恢複任務
Client{...} 定義要備份的主機位址
Fileset{...} 定義備份哪些資料,不備份哪些資料
Schedule{...} 定義備份時間政策
Storage{...} 定義資料的存儲方式
Pool{...} 定義供Job使用的池屬性
Catalog{...} 定義背景資料庫
Messages{...} 定義發送日志報告和記錄日志的位置
[root@JD etc]# egrep -v '^#|^$' bacula-dir.conf
Director { #定義全局配置
Name = JD-dir
DIRport = 9101 # 預設端口
QueryFile = "/usr/local/bacula/etc/query.sql"
WorkingDirectory = "/usr/local/bacula/opt/bacula/working"
PidDirectory = "/var/run"
Maximum Concurrent Jobs = 1##一次能處理的最大并發數
Password = "dc5XEaySjV90PBfM0wCChirlEYkH4feUXjesKNHxdU2X"
# 與Console驗證的驗證 password需一緻
Messages = Daemon##發送消息通知方式
}
JobDefs {##定義預設執行任務
Name = "DefaultJob"
Type = Backup##任務類型預設為備份,可選restore和verify
Level = Incremental
##備份類型:Full(完全備份)、Incremental(增量備份)和Differential(差異備份)
##如果第一次沒做完全備份,則先進行完全備份後再執行Incremental
Client = xad-fd##與用戶端主機FD配置檔案中一緻
FileSet = "Full Set"##指定需要備份的資料政策,下文定義
Schedule = "WeeklyCycle"##指定這個備份任務的執行時間政策,下文定義
Storage = File###指定備份資料的存儲路徑與媒體,下文定義
Messages = Standard
Pool = File##指定備份使用的pool屬性,下文定義
Priority = 10
Write Bootstrap = "/usr/local/bacula/opt/bacula/working/%c.bsr" #指定備份的引導資訊
}
Job {
Name = "BackupClient1"
JobDefs = "DefaultJob"
}
Job {
Name = "BackupCatalog"
JobDefs = "DefaultJob"
Level = Full
FileSet="Catalog"
Schedule = "WeeklyCycleAfterBackup"
# This creates an ASCII copy of the catalog
# Arguments to make_catalog_backup.pl are:
# make_catalog_backup.pl <catalog-name>
RunBeforeJob = "/usr/local/bacula/etc/make_catalog_backup.pl MyCatalog"
# This deletes the copy of the catalog
RunAfterJob = "/usr/local/bacula/etc/delete_catalog_backup"
Write Bootstrap = "/usr/local/bacula/opt/bacula/working/%n.bsr"
Priority = 11 # run after main backup
}
Job {##定義還原任務
Name = "RestoreFiles"
Type = Restore
Client=xad-fd
FileSet="Full Set"
Storage = File
Pool = Default
Messages = Standard
Where = /tmp/bacula-restores
}
FileSet {##定義需要的備份資料
Name = "Full Set"
Include {
Options {
signature = MD5
}
File = /usr/local/src##需要備份的資料的路徑
}
Exclude {
File = /usr/local/bacula/opt/bacula/working
File = /tmp
File = /proc
File = /tmp
File = /.journal
File = /.fsck
}
}
Schedule {##定義時間政策
Name = "WeeklyCycle"
Run = Full 1st sun at 23:05
Run = Differential 2nd-5th sun at 23:05
Run = Incremental mon-sat at 23:05
}
Schedule {
Name = "WeeklyCycleAfterBackup"
Run = Full sun-sat at 23:10
}
FileSet {
Name = "Catalog"
Include {
Options {
signature = MD5
}
File = "/usr/local/bacula/opt/bacula/working/bacula.sql"
}
}
Client {##定義用戶端
Name = xad-fd
Address = IP-Client##用戶端位址
FDPort = 9102##用戶端端口
Catalog = MyCatalog##資料庫存儲資訊方式
Password = "dc5XEaySjV90PBfM0wCChirlEYkH4feUXjesKNHxdU2X" ##與用戶端一緻
File Retention = 30 days # 資料循環時間,非備份檔案存儲時間
Job Retention = 6 months # 定義任務保持周期
AutoPrune = yes # 任務超過保持周期是否自動删除
}
Storage {##定義儲存設備
Name = File
Address = IP-SD # 儲存設備服務SD的位址
SDPort = 9103 # 儲存設備通信端口
Password = "dc5XEaySjV90PBfM0wCChirlEYkH4feUXjesKNHxdU2X" ##需與SD端配置一緻
Device = FileStorage # 定義存儲媒體類型,需與SD端配置一緻
Media Type = File # 媒體類别,需與SD端配置一緻
}
Catalog {##定義日志和資料設定
Name = MyCatalog
dbname = "bacula"; dbuser = "root"; dbpassword = "00000000"##庫名和密碼
}
Messages {##儲存日志的格式和通知形式(郵件)
Name = Standard
mailcommand = "/usr/local/bacula/sbin/bsmtp -h localhost -f \"\(Bacula\) \<%r\>\" -s \"Bacula: %t %e of %c %l\" %r"
operatorcommand = "/usr/local/bacula/sbin/bsmtp -h localhost -f \"\(Bacula\) \<%r\>\" -s \"Bacula: Intervention needed for %j\" %r"
mail = root@localhost = all, !skipped
operator = root@localhost = mount
console = all, !skipped, !saved
append = "/usr/local/bacula/opt/bacula/log/bacula.log" = all, !skipped ##bacual運作日志
catalog = all
}
Messages {
Name = Daemon
mailcommand = "/usr/local/bacula/sbin/bsmtp -h localhost -f \"\(Bacula\) \<%r\>\" -s \"Bacula daemon message\" %r"
mail = root@localhost = all, !skipped
console = all, !skipped, !saved
append = "/usr/local/bacula/opt/bacula/log/bacula.log" = all, !skipped
}
Pool {
Name = Default##定義池屬性
Pool Type = Backup
Recycle = yes #重複使用
AutoPrune = yes #自動清除過期備份檔案
Volume Retention = 365 days # 備份檔案保留時間
}
Pool {
Name = File
Pool Type = Backup
Recycle = yes
AutoPrune = yes
Volume Retention = 365 days
Maximum Volume Bytes = 50G # 最大備份檔案的大小限制
Maximum Volumes = 100 # 備份檔案個數最大限制
}
Pool {
Name = Scratch
Pool Type = Backup
}
Console {##定義console
Name = JD-mon
Password = "JMRJc5OtI7eqz+Fh3mbe6yQJig6R6wwTftuWX7+bXUAx" ##需與console一緻
CommandACL = status, .status
}
SD配置檔案
[root@JD etc]# egrep -v '^#|^$' bacula-sd.conf
Storage { # 定義存儲
Name = JD-sd
SDPort = 9103
WorkingDirectory = "/usr/local/bacula/opt/bacula/working"
Pid Directory = "/var/run"
Maximum Concurrent Jobs = 20
}
Director {##控制端資訊
Name = JD-dir
Password = "dc5XEaySjV90PBfM0wCChirlEYkH4feUXjesKNHxdU2X"
}
Director {##監控端monitor資訊
Name = JD-mon
Password = "JMRJc5OtI7eqz+Fh3mbe6yQJig6R6wwTftuWX7+bXUAx"
Monitor = yes
}
Device {##定義裝置媒體
Name = FileStorage
Media Type = File
Archive Device = /tmp##存儲位置
LabelMedia = yes; # 通過label指令建立卷檔案
Random Access = Yes;#随機通路
AutomaticMount = yes; #自動挂載使用
RemovableMedia = no;#支援可移動裝置
AlwaysOpen = no;
}
Messages {
Name = Standard
director = JD-dir = all
}
啟動方式
Server端:
[root@JD etc]#/usr/local/bacula/etc/bacula-ctl-dir start
[root@JD etc]#/usr/local/bacula/etc/bacula-ctl-sd start
[root@JD ~]# netstat -tunlp | grep 910
tcp 0 0 0.0.0.0:9101 0.0.0.0:* LISTEN 26967/bacula-dir
tcp 0 0 0.0.0.0:9103 0.0.0.0:* LISTEN 27002/bacula-sd
[root@Aliyun etc]# /usr/local/bacula/etc/bacula-ctl-fd start
[root@Aliyun ~]# netstat -tunlp | grep 910
tcp 0 0 0.0.0.0:9102 0.0.0.0:* LISTEN 22685/bacula-fd