Chinaunix首页 | 论坛 | 博客
  • 博客访问: 5376067
  • 博文数量: 1144
  • 博客积分: 11974
  • 博客等级: 上将
  • 技术积分: 12312
  • 用 户 组: 普通用户
  • 注册时间: 2005-04-13 20:06
文章存档

2017年(2)

2016年(14)

2015年(10)

2014年(28)

2013年(23)

2012年(29)

2011年(53)

2010年(86)

2009年(83)

2008年(43)

2007年(153)

2006年(575)

2005年(45)

分类: LINUX

2007-09-11 18:20:48

手頭有三台機器,為了安全,就打算做一個網絡備份,讓這三台機器互相備份一些重要
文檔。上網逛了一會,發現bacula(http://www.bacula.org/)挺符合自己的要求。


bacula採用模塊化設計,採用c/s構架,理論上可以把任意n台主機的資料備份到任意n台中,而你不需要在每台機器上都寫一個配置文件控制他們運作,所有主要的工作都在一台director上控制。登陸上director你就可以知道什麼備份正在運行,什麼備份成功了,什麼備份失敗了,所有的log也會集中到你指定的地方,讓管理工作更簡單一點。恢復的時候也很簡單,簡單運行幾個命令你就可以把指定的備份恢復。支持完全備份,差異備份,增量備份;支持把備份寫到硬盤文件中,也支持寫到磁帶中。支持平台相當多,設置包括win平台(備份win,還不支持備份到win)。當然也有一些缺點,比如對並發備份支持未經徹底測試,作者宣稱最好不要嘗試,除非你自己經過測試。

1,前期準備
bacula有三個模塊組成。一個是Director,用於指揮整個系統運行,job schedule,通知另外兩個模塊工作。一個是Storage Daemon,它是存儲端,負責把網絡中傳來的數據備份到本機,恢復的時候負責把數據傳出去。最後一個是File Daemon,備份時把文件傳出,恢復時接受數據並恢復。其實上面的三個模塊並不能讓bacula運行,另外一個模塊是數據庫模塊。這個模塊可以通過SQLite(編譯進bacula),也可以使用MySql和PostgreSql,作者推薦的是mysql。還需要一些第三方庫才能編譯:GZIP和Readline。文檔中沒有說明,但其實還需要另外一個軟件才能保證正常運行:ntp。因為差異備份和增量備份都依賴於文件修改時間來決定是否備份。單機備份問題不大,網絡備份就需要考慮各個主機的時間差異了。所以我推薦所有主機每天運行兩次ntpdate來調準時間。如果你在sjtu網絡裡面,可以使用dns.sjtu.edu.cn來調校時間。
如果你使用的是磁帶機備份,還需要檢查一下你的磁帶機是否被支持。而且最好去閱讀
文檔中的Understanding Pools, Volumes and Labels一節。否則配置的時候你會搞得暈乎乎的。

2,編譯
編譯過程很簡單,文檔也很詳細,就不具體介紹了。注意一點是被備份機器上可以使用--enable-client-only編譯。

3,數據庫建立
下面說說mysql的建立過程。首先在代碼根目錄中
cd src/cats/
./grant_mysql_privileges
./create_mysql_database
./make_mysql_tables
如果mysql不是在本機上,可以增加-h參數指定。默認採用空密碼的root用戶,可以用-p 參數使其採用密碼驗證。如果要採用其它用戶就只能修改腳本了,很簡單的。
默認建立的bacula用戶,而且是空密碼。推薦還是修改密碼。
bacula可以使用任意多的數據庫,也就是說你可以使用兩個數據庫,然後再讓這兩個數
據庫互相備份。

4,運行File Daemon(fd)
配置前先說明一點需要注意的,配置中指定主機地址時,最好使用ip,我配置時使用主機
名貌似不可以。。。而且要是對外的ip,用127.0.0.1不行fd運行在被備份主機上。配置相當簡單,指定哪個Director可以運行調度它,密碼是什麼,fd的名字,工作目錄,log往哪裡發就可以了。修改修改標配就可以了。

5,運行Storage Daemon(sd)
sd運行在接受備份的機器上。配置也相當簡單,只是比fd多出了一個device用於指定使用什麼硬件備份數據。可以把多個數據備份到一個device,如果是磁帶機備份bacula在恢復的時候會告訴你要使用哪個磁帶。因為我使用的是文件備份的模式,所以就給每個備份配置一個device,把不同的備份放到不同目錄去,下面是一個簡單文件備份device配置
Device {
Name = dbdev
Media Type = File #這個隨便寫,但是在配置Director中的Storage時,必須寫一
樣的
Archive Device = /var/bak/db #備份到哪個目錄,必須存在
LabelMedia = yes; # 自動label
Random Access = Yes;
AutomaticMount = yes; # when device opened, read it
RemovableMedia = no;
AlwaysOpen = no;
}

6,運行Director(dir)
這個配置最麻煩,因為所有配置都集中到這裡,包括備份工作調度,數據庫配置,fd和sd協作配置都在這裡。
Director項目的配置不說了,很簡單
Client項目告訴dir去哪裡找被備份機器
Client {
Name = dbfd #必須跟fd配置的名字相同
Address = 202.120.x.x
FDPort = 9102
Catalog = 225catalog #使用哪個數據庫存儲信息
Password = "6662f353d83dc85013690aefc00f" # 與fd配置相同即可
AutoPrune = yes # 自動清除過期的Jobs/Files
}
Storage項目告訴dir去哪裡找接受備份的機器
Storage {
Name = dbsd #與sd配置相同
Address = 202.120.x.x
SDPort = 9103
Password = "6662f353d83dc85013690aefc00f"
Device = dbdev #必須在sd中存在
Media Type = File #必須與sd中相應device相同
}
Schedule項目告訴dir何時調度備份,比較獨立,可以在不同的job中重用
Schedule {
Name = dbscd
Run = Level=Full mon at 7:00 #在週一7點作一次全備份
Run = Level=Full fri at 7:00 #在週五7點作一次全備份
Run = Level=Differential sat at 7:00 #在週六7點作一次差異備份
Run = Level=Differential sun at 7:00 #在週日7點作一次差異備份
Run = Level=Differential tue-thu at 7:00 #在週二到週四7點作差異備份
}
當然可以schedule還可以配置很多東西,比如增量備份以及更靈活的時間調度。可以參考文檔。

FileSet項目告訴dir應該備份什麼文件,不應該備份什麼文件
FileSet {
Name = dbfs
Include = compression=GZIP { #備份運行fd機器上的/var/db目錄,用gzip
壓縮,
/var/db/
}
Exclude = { #不包括所有的.log文件
*.log
}
}
FileSet也可以靈活配置,甚至可以在job運行時才指定備份文件

Catalog告訴dir去哪裡找數據庫
Catalog {
Name = dbcatalog
dbname = bacula
user = bacula
password = xxxxxxxxx
DB Address = 202.120.x.x #不要用localhost
DB Port = 3306
}

Pool告訴dir使用哪個Pool備份數據,這個概念比較搞,到配置job的時候會清晰一點。
Pool{
Name = dbpool
Pool Type = Backup
Maximum Volume Jobs = 1 #每次備份使用一個文件
Recycle = yes #重複使用
AutoPrune = yes #自動清除
Volume Retention = 15 days #備份保留時間
Maximum Volumes = 30 #最多保存多少個文件
Recycle Current Volume = yes #使用最近過期的文件存儲新備份
#文件如何命名,下面的格式會產生如下的命名形式db-2004-03-19-id20
Label Format =
"db-${Year}-${Month:p/2/0/r}-${Day:p/2/0/r}-id${JobId}"
}
Message項目告訴dir如何保存log,以及保存格式
Messages {
Name = Standard
# mailcommand = "/usr/local/bacula/bin/smtp -h 202.120.x.x -f \"\(Bacula\)
%r\
" -s \"Bacula: %t %e of %c %l\" %r"
# operatorcommand = "/usr/local/bacula/bin/smtp -h 202.120.x.x -f
\"\(Bacula\)
%r\" -s \"Bacula: Intervention needed for %j\" %r"
# mail = root@202.120.x.x = all, !skipped
# operator = root@202.120.x.x = mount
# console = all, !skipped, !saved
#
# WARNING! the following will create a file that you must cycle from
# time to time as it will grow indefinitely. However, it will
# also keep all your messages if they scroll off the console.
#
append = "/var/log/bacula.log" = all, !skipped
append ="/var/log/bacula.err.log" = error, warning, fatal
}
我保留了兩份log,一份包括所有信息,一份只包括錯誤信息可以看到,bacula支持把log發到郵箱中~~被我註釋掉了。

Job是上面所有配置的一個組合,給用戶最大的靈活性配置
Job {
Name = dbjob
Type = Backup #還有restore之類的類型,也有一些其它選項,可以實現一些很有意思的功能
Level = Full #默認備份程度,schedule中的配置會覆蓋這裡的選擇
Client = dbfd
FileSet = dbfs
Messages = Standard
Pool = dbpool
Storage = dbsd
Schedule = dbscd #如果沒有指定schedule,默認不運行,可以通過console
調度
}
還有一個counter的配置。。不配置他也能運行,不說了

7,console運行
console是你動態管理bacula的窗口,配置很簡單。運行console可以實現很多很有價值的管理活動。具體可以參考文檔說明。

8,讓整個系統運行。
沒什麼好說的,只要配置正確,就沒有什麼挫折。不能正常運行就去看看log,bacula的log非常詳細。

9,性能和穩定性。
性能不錯,瓶頸明顯在帶寬,cpu佔用不高(不使用gizp)。穩定性尚不清楚,據作者說非常好。穩定運行一年半載不成問題。

10,有趣的工作。
用bacula你可以實現一個額外的功能,類似tripwire文件系統檢查機制。具體看文檔。

我說了很多具體看文檔~~~~bacula的文檔確實很不錯,很翔實,如果你需要借重他來備份,多看看不會錯。

11,the end
##############################################################################
Bacula 一個提供備份 Solution 的 Open Source Project
http://www.bacula.org/

裡面主要分成五個部份:
- Director 負責 Backup/Restore/Verify 和 Archive 這幾個動作,它是 Daemon.
- Console 用來跟 Director 溝通的 Interface
- Files Client Program,也是一個 Daemon, 負責提供檔案屬性跟 Director所需的資料.
- Storage 負責讀/寫你的 Tape 或其他媒體.
- Catalog 維護索引或 Volume Database.





主要設定都在 bacula-dir.conf 裡面
可以定義 Storage, Schedule, Job….等等資訊.
bacula-sd.conf 主要定義 Storage, Device 相關資訊.此處需要跟 bacula-dir.conf 中的 Storage 相配合.

bacula-dir.conf
FileSet{} 定義需要備份的目錄或檔案.
Storage{}表示要放Archive 的地方.
Schedule{} 定義執行的排程.
Job{} 則定義工作,裡面則會用到前面所提到的 FileSet, Storage, Schedule 等設定.也可以在執行的前後先執行 Script或程式(RunAfterJob, RunBeforeJob).
還可以設定 Job, Volume …等的保留時間( Retention ).
另外也支援自動換片的 Device, 只要在 Device {} 裡面指定 Change Command = /sbin/xxxx
換片的指令即可.
阅读(3116) | 评论(0) | 转发(0) |
0

上一篇:dcc-stats-collect

下一篇:bash 顏色選擇

给主人留下些什么吧!~~