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端一致 }
控制端配置文件共有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
Client端:
[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