2009年1月10日 星期六

使用bacula實現Linux的遠端備份和還原

使用bacula實現Linux的遠端備份和還原

原始資料來源:http://arhat.blog.51cto.com/101503/123006
為了查詢方便,特將其收集於此:底下為原來內容。
Bacula, 被譽為開源軟體中最好的備份還原軟體,它提供了企業級的客戶機/伺服器的備份解決方案,能夠通過網路來管理檔的備份,恢復和核實工作。Bacula,既 有windows版本的,也有Linux,Unix的。但目前有關於其使用的文章是在太少,而且介紹的很不詳細,今天,我就來和大家一起探討一下。(最新 版本2.4.3主頁 http://www.bacula.org
一,bacula的模型


為了部署bacula,應該瞭解它的主要組件。
控制器是協調備份,恢復和校驗操作的守護進程。使用者可以通過控制台向控制守護進程提交任務。控制台不一定非要和控制守護進程在同一台機器上,可以分離。
存儲守護進程是用來寫入備份資料或者讀取備份資料的。它必須安裝在提供存儲的機器上。也就是安裝了磁帶機或者要將備份存放的伺服器上。它和控制守護進程可以分離,不一定要安裝在一起。
檔守護進程安裝在每台需要備份資料的系統上。比如,你想備份網路中的某台檔案伺服器上的資料,那麼,你就應該將檔守護進程安裝在此台伺服器上。
編目是一個資料庫,它保存所有備份的每個檔和卷的資訊。所以,它需要資料庫軟體的支援,現在bacula支援mysql,postgresql和sqlite。
二,設置
試驗環境如下:有兩台linux主機,
一台主機名稱為RHEL5(以下簡稱server),ip為192.168.0.5,系統為RHEL 5.1,角色為備份伺服器兼存儲伺服器(另掛一塊磁片到/tmp/test/下作為存儲)
另一台主機名稱為client。Ip是192.168.0.6,系統是RHEL5.1,角色為需要備份的主機(這裡我們以/boot為要備份還原的目錄)
準備工作:在server上安裝mysql和gcc環境(bacula編譯需要gcc),並啟動mysql
在client上只需安裝gcc環境
配置伺服器server:
1, 解壓編譯安裝bacula:
然後是make和make install
預設情況,bacula安裝在/etc/bacula/目錄下
2,創建mysql腳本
Bacula已經為我們建好了腳本,直接運行就OK,一共3個。如果不運行,後面9101埠是起不來的。
3,修改配置
作為存儲伺服器兼控制台,現在需要依次對bacula-dir.Conf(管全域) bacula.sd.conf(管存儲)和bconsole.conf(管控制台)設定檔進行修改。
bacula-dir.conf是最複雜的一個檔,它一共有10個邏輯段:
director(定義全域),
catalog(定義日誌),
jobdefs(定義備份的預設值),
job(定義特定操作),
fileset(定義備份哪些區域不備份哪些區域),
schedule(定義備份時間),
pool(定義備份介質),
client(定義要備份的主機),
storage(定義如何存儲)
messages(定義如何處理消息)
因為此檔比較複雜,所以我把我配置好的檔直接貼出來,一些特別重要的地方咱們拿出來討論
Director { # 全域的一些配置
Name = RHEL5-dir
DIRport = 9101
QueryFile = "/etc/bacula/query.sql"
WorkingDirectory = "/var/bacula/working"
PidDirectory = "/var/run"
Maximum Concurrent Jobs = 1 # 定義一次能處理的併發作業數
Password = "RTQVFEti4EAPrGLJV+xn+/7ScFU0D+iDs5OWCvy354uI" # 這個地方必須與控制台所在主機上的bconsole.conf一致,這裡是本機
Messages = Daemon
}
JobDefs {
Name = "DefaultJob"
Type = Backup
Level = Incremental
Client = RHEL5-fd # 如果本機也需備份就在後面去定義RHEL5-fd為本機
FileSet = "Full Set"
Schedule = "WeeklyCycle"
Storage = File
Messages = Standard
Pool = Default
Priority = 10
}
Job { # 定義一個任務
Name = "Client" # 任務的名稱 後面咱們可以在bacula的控制台中看到
Client = Client # 引用後面定義的用戶端“Client”,表示此任務對名字叫client主機進行操作
JobDefs = "DefaultJob"
Write Bootstrap = "/var/bacula/working/Client1.bsr" #定義備份的引導資訊放在什麼地方
Level = Full #定義備份類型為完全
FileSet = "Full Set" #備份的範圍根據後面定義的名叫“Full Set”的操作
Schedule = "WeeklyCycleAfterBackup" #備份計畫任務按"WeeklyCycleAfterBackup" 定義的執行
}
Job {
Name = "BackupCatalog"
JobDefs = "DefaultJob"
Level = Full
FileSet="Catalog"
Schedule = "WeeklyCycleAfterBackup"
RunBeforeJob = "/etc/bacula/make_catalog_backup bacula bacula"
RunAfterJob = "/etc/bacula/delete_catalog_backup"
Write Bootstrap = "/var/bacula/working/BackupCatalog.bsr"
Priority = 11 # run after main backup
}
Job {
Name = "RestoreFiles"
Type = Restore
Client=RHEL5-fd #這裡就是指的RHEL5這台主機自己
FileSet="Full Set"
Storage = File
Pool = Default
Messages = Standard
Where = /bacula-restores
}
FileSet {
Name = "Full Set"
Include {
Options {
signature = MD5
}
File = /boot # 備份的範圍,這裡我根據需要只備份了/boot分區,如果要備份其他可加入相應路徑
}
Exclude { # 排除的,不備份的內容
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 = /var/bacula/working/bacula.sql
}
}
Client {
Name = RHEL5-fd
Address = 192.168.0.5 # 指定了RHEL5這台主機的位址,如果有DNS可以寫FQDN
FDPort = 9102
Catalog = MyCatalog
Password = "f/4eSVt8B+tvY8fsWerClwGwWxnMRIgung8h+zWb4tRv" # 要和RHEL5上bacula-fd.conf的一致
File Retention = 30 days # 30 days
Job Retention = 6 months # six months
AutoPrune = yes # Prune expired Jobs/Files
}
Client {
Name = Client # 前面引用過的client就是在這定義的
Address = 192.168.0.6 # 告訴伺服器client在什麼地方
FDPort = 9102
Catalog = MyCatalog
Password = "f/4eSVt8B+tvY8fsWerClwGwWxnMRIgung8h+zWb4tRv2" # 要和client上bacula-fd.conf的一致
File Retention = 30 days # 30 days
Job Retention = 6 months # six months
AutoPrune = yes # Prune expired Jobs/Files
}
Storage { #定義存儲伺服器
Name = File
Address = 192.168.0.5 # 告訴伺服器資料存儲在哪台機器上。這裡是主機自己。
SDPort = 9103
Password = "oTJC6wYD/kTLcptwdReP/Gl7xxqngURQdZZfQINCeMzd" # 要和本機bacula-sd.conf上一致
Device = FileStorage
Media Type = File # 定義以檔方式存儲
}
Catalog { # 關於日誌和資料庫的定義
Name = MyCatalog
dbname = "bacula"; dbuser = "bacula"; dbpassword = ""
}
Messages {
Name = Standard
mailcommand = "/sbin/bsmtp -h localhost -f \"\(Bacula\) \<%r\>\" -s \"Bacula: %t %e of %c %l\" %r"
operatorcommand = "/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 = "/var/bacula/working/log" = all, !skipped
}
Messages {
Name = Daemon
mailcommand = "/sbin/bsmtp -h localhost -f \"\(Bacula\) \<%r\>\" -s \"Bacula daemon message\" %r"
mail = root@localhost = all, !skipped
console = all, !skipped, !saved
append = "/var/bacula/working/log" = all, !skipped
}
Pool {
Name = Default
Pool Type = Backup
Recycle = yes # Bacula can automatically recycle Volumes
AutoPrune = yes # Prune expired volumes
Volume Retention = 365 days # one year
}
Pool {
Name = Scratch
Pool Type = Backup
}
Console {
Name = RHEL5-mon
Password = "YZDfclvKrfWVkmGdGtWygMOR8ZOX7XK7MYvaFd1dIraN"
CommandACL = status, .status
}
第二個檔bacula-sd.conf
Storage { # 定義存儲。本例中是自己RHEL5
Name = RHEL5-sd
SDPort = 9103 # 存儲埠
WorkingDirectory = "/var/bacula/working"
Pid Directory = "/var/run"
Maximum Concurrent Jobs = 20
}
Director {
Name = RHEL5-dir
Password = "oTJC6wYD/kTLcptwdReP/Gl7xxqngURQdZZfQINCeMzd" # 與bacula-dir.conf中對應的Storage項一致
}
Director {
Name = RHEL5-mon
Password = "xyqzFcPkpqwmQm7BD5OhegyynhOhFHcNZWoIfMZN2bY5"
Monitor = yes
}
Device {
Name = FileStorage
Media Type = File
Archive Device = /tmp/test # 定義備份到什麼地方
LabelMedia = yes; # lets Bacula label unlabeled media
Random Access = Yes;
AutomaticMount = yes; # 如果設備可用,則讀取
RemovableMedia = no;
AlwaysOpen = no;
}
Messages {
Name = Standard
director = RHEL5-dir = all
}
最後一個檔bconsole.conf
Director {
Name = RHEL5-dir
DIRport = 9101
address = 192.168.0.5 # 伺服器位置
Password = "RTQVFEti4EAPrGLJV+xn+/7ScFU0D+iDs5OWCvy354uI" # 與bacula-dir.conf中director中一致
}
現在啟動進程
終於配置完畢,但還有關鍵的一步,添加存儲介質
黃色的是要輸入的部分。現在就已經進入到控制台了。
配置客戶機(需要備份的client):
1, 編譯安裝bacula
然後make和make install
預設安裝在/etc/bacula/目錄下
1, 改設定檔 bacula-fd.conf
Director {
Name = RHEL5-dir # 與伺服器上的bacula-dir.conf中一致
Password = "f/4eSVt8B+tvY8fsWerClwGwWxnMRIgung8h+zWb4tRv2" # 與伺服器上的bacula-dir.conf中一致
}
Director {
Name = RHEL5-mon # 與伺服器上的bacula-dir.conf中一致
Password = "yqzFcPkpqwmQm7BD5OhegyynhOhFHcNZWoIfMZN2bY5" # 與伺服器上的bacula-dir.conf中一致
Monitor = yes
}
FileDaemon {
Name = Client # 指自己
FDport = 9102 # 監聽埠r
WorkingDirectory = /var/bacula/working
Pid Directory = /var/run
Maximum Concurrent Jobs = 20
}
Messages {
Name = Standard
director = Client-dir = all, !skipped, !restored
}
客戶端相對配置較簡單。改這一個檔就行了。
然後啟動進程
三,驗證
經過了艱苦的工作,現在到了享受結果的時候了(呵呵,這個東東我已經弄了3天了,痛苦呀)
咱們現在先備份client下的/boot目錄吧
在server上
接著
可以通過status查看狀態
呵呵,看見OK了嗎,備份成功了喲
接下來咱們來做還原,首先咱們把client上的/boot中的檔刪除掉
現在回到server上來還原(還是在控制台)
顯示如下提示
接著標記要還原內容,並且執行
這個地方注意一下,如果要還原到client原位置則按以下步驟
現在再回到client下看看
哈哈,看見了吧,剛才刪掉的檔現在全部回來了
四,最後
因為手頭上沒有現成的資料,加上本人英語水準有限,有不足的地方還請大家諒解。

沒有留言: