2009年2月14日 星期六

使用bacula備份


底下文章來源自
http://linux.chinaunix.net/docs/2006-08-03/2382.shtml

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

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

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

2009年2月1日 星期日

波斯丰采

這次春節在老婆民雄的娘家不到100公尺處發現了一處開滿各色不同品種的波斯菊花園,雖然有好幾片的花株都已枯萎,但仍不失其生命的丰采。
















Nikon FA / Tokina AT-X Macro 90mm f2.5 / REALA 100