企業級系統備份 BackupPC的配置與使用手冊
這份指南將會協助你運用 CentOS testing 軟件庫內的 RPM 來設置 BackupPC。它不會詳細地解釋 BackupPC 所支持的一切設置。它亦會假設你會設置 BackupPC 通過 rsync 來進行備份。BackupPC 可支持 archive、tar、smb 及 rsyncd 的備份,但這份指南只會專注采用 rsync 的 Linux 主機。BackupPC 擁有論充足的文檔關于設置方面的選項,這些指引亦收藏在它的網頁界面中。另外,BackupPC 應該駐于一臺專用的服務器上,因為 Apache 必須以系統上 BackupPC 用戶的身份來執行,而這樣會影響網頁服務器的正常運作。
系統:CentOS 5.x
參考文件
[ http://backuppc.sourceforge.net/ ]
設置軟件庫
首先要做的事情就是將 CentOS testing 軟件庫連同 yum-priorities 插件一并安裝。
# cd /etc/yum.repos.d # wget http://dev.centos.org/centos/5/CentOS-Testing.repo # yum install yum-priorities
請依從 wiki 內有關設置 [http://wiki.centos.org/zh/PackageManagement/Yum/Priorities?highlight=(yum)|(priorities)|yum-priorities] 的指引。如果你安裝了 RPMFroge 的軟件庫,你必須確定所有 CentOS Base 項目的優先次序是 1,RPMForge 項目的優先次序是 2,而 CentOS testing 軟件庫的優先次序是 3。如果你并未安裝 RPMForge 軟件庫,所有 Perl 組件將會下載自 testing 軟件庫,否則,它們將會來自 RPMForge。要設置 RPM 軟件庫,請依從 wiki 內有關 [軟件庫]的指引。
安裝 BackupPC
接下來,請安裝 BackupPC 的 RPM、Apache、及 mod_perl。Perl 所依賴的一切將會自動被收集起來。
# yum --enablerepo=c5-testing install backuppc httpd mod_perl
設置 Apache
如上述所提及,假若要一切正常地與 CGI 及 mod_perl 運作,Apache 的執行身份必須是安裝 RPM 時在系統上所創建的 BackupPC 用戶。請你現在就把合適的值設于 httpd.conf 內。
# vim /etc/httpd/conf/httpd.conf ## 更改 User apache 為 User backuppc User backuppc Servername backuppc.domain.com:80
存儲并離開文件,然后更改被創建于 conf.d 目錄下的 backuppc.conf 文件。
# vim /etc/httpd/conf.d/backuppc.conf ## 將 Allow from 127.0.0.1 改為 all Allow from all
存儲并離開這個文件,然后創建你將會用來訪問網頁界面的用戶及密碼。
# htpasswd -c /var/lib/backuppc/passwd/htpasswd your_user New password: your_password Re-type new password: your_password Adding password for user your_user
最后,引導 Apache 并設置它于開機時引導。然后瀏覽你的機器并確定 Apache 可以派出測試頁面。
# service httpd start # chkconfig httpd on
請瀏覽 http://你的服務器 并確定 Apache 能正常運作。
BackupPC 服務器設置
初次設置時,你必須在命令行上編輯數個參數,額外的你可以通過命令行或網頁界面來完成。請打開 BackupPC 的主要配置文件,然后設置下列參數。TopDir 這個路徑就是放置實際備份的地地。它的缺省值是 /var/lib/backuppc。我利用一個加密的分區來作備份,因此我的路徑是 /srv/backuppc。請按你的需要修改它。
# vim /etc/BackupPC/config.pl ## BackupPC 缺省的傳輸方法。 $Conf{XferMethod} = 'rsync'; ## 備份數據存放位置的路徑。 $Conf{TopDir} = '/var/lib/backuppc'; ## init.d 內用來引導服務器的路徑。 $Conf{ServerInitdPath} = '/etc/init.d/backuppc'; $Conf{ServerInitdStartCmd} = '$sshPath -q -x -l root $serverHost$serverInitdPath start'; ## 你以 htpasswd 創建獲授權的用戶。 $Conf{CgiAdminUsers} = 'your_user';
設置 BackupPC Sudo
backuppc 這位用戶須要擁有 sudo 權限來執行 gtar 及 tar 的指令。否則,BackupPC 便不能正確地運作。Sudo 應該已被安裝在你的系統上,因此你可以通過 visudo 這個指令來作出所需的修改。
# visudo ## 注釋掉 Defaults requiretty ## 加入以下兩行。 Defaults !lecture backuppc ALL=NOPASSWD:/bin/gtar,/bin/tar
存儲并離開這個文件,然后重新引導 Apache,引導 BackupPC 并設置它在開機時引導。
# service httpd restart # service backuppc start # chkconfig backuppc on
請打開你的瀏覽器并進到位于 http://你的服務器/backuppc 的 BackupPC 網頁界面。你須要以先前創建的用戶及密碼來登錄,然后你便會看見一版關于 BackupPC 服務器一般信息的頁面。要不然,請重復你的步驟并確定 Apache 及 BackupPC 的設置皆正確。
BackupPC SSH 金鑰
由于我們會專注以 rsync 進行備份,你也許會想為 backuppc 進程創建無須密碼的金鑰,讓它能遠程連接到需要備份的主機上。請以 root 的身份在 /var/lib/backuppc 內置立隱藏的 SSH 目錄,繼而修改權限。
# cd /var/lib/backuppc # mkdir .ssh # chown backuppc.backuppc .ssh # chmod 700 .ssh
接著,請改為 backuppc 這個用戶。你須要指定一個指令殼,因為 backuppc 這位用戶缺省是沒有指令殼的。然后請利用 ssh-keygen 創建沒有密碼的 SSH 金鑰。
# su -s /bin/bash backuppc bash-3.2$ ssh-keygen -t dsa Generating public/private dsa key pair. Enter file in which to save the key (/var/lib/backuppc/.ssh/id_dsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /var/lib/backuppc/.ssh/id_dsa. Your public key has been saved in /var/lib/backuppc/.ssh/id_dsa.pub. The key fingerprint is: xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx backuppc@host.domain.name
#p#
復制服務器金鑰到客戶端
你必須將你服務器上創建的金鑰復制到每一臺要被備份的客戶端里。就此,請繼續上一步,在服務器上以 backuppc 這個用戶的身份執行 ssh-copy-id 這個指令。
bash-3.2$ ssh-copy-id -i .ssh/id_dsa.pub root@host_to_backup
它應該會將金鑰復制到主機里,并通過 SSH 把你登錄該臺機器。
設置客戶端
BackupPC 的基礎
在你開始使用網頁界面前,讓我們為應用于各主機的設置及選項提供一些基本的解釋。我所閱讀的其它指南在這方面都令我不知所措。你剛才所編輯的主要配置文件,位于 /etc/BackupPC/config.pl,藏有 BackupPC 的所有缺省值。這個配置文件可以在命令行上編輯,也可以通過為每個選項提供文檔的圖像界面來修改。你登錄網面界面時,在左邊可看見 Edit Config 這個頁簽。當你點擊它時,你其實在編輯 /etc/BackupPC/config.pl 這個文件。直至你閱讀文檔為止,請不要改動任何缺省的選項,否則你可能很快便會發現一個失效的備份系統。
雖然主要配置文件提供所有缺省值,你亦可以為個別主機更改這些設置。當你在網頁界面上加入一臺主機后,你為該主機所加入的任何設置值將會取代缺省值。這樣做亦會創建一個獨立的文件,/etc/BackupPC/pc/主機名稱.pl。這個文件藏有所有曾經被修改,或與 /etc/BackupPC/config.pl 內有差別的設置值。譬如說,這些文件的內容會是你為某主機設置在備份時要包括或排除的目錄。
除非你將會在所有主機上備份相同的目錄,否則你在創建了一臺主機后便應利用此功能來設置目錄。這一步可以通過 Xfer 頁簽上的 RsyncShareName 來完成。緊隨這個設置之下是 BackupFilesExclude 選項,讓你將 /var/cache 等目錄排除于備份之外。
在 BakcupSettings 這個主頁簽里,你會找到 DumpPreUserCmd。它容許你指定任何腳本在在進行目錄的 rsync 前被執行。舉個例說,假如你需要令數據庫轉儲然后再備份,你可以在這個腳本里指定。SourceForge 上已然備有 AutoMySQLBackup,所以它在下一部份會有所描述。
DumPostUserCmd 容許你在備份后執行一個指令,而 DumpPreShareCmd 及 DumpPostShareCmd 容許你在分享一個備份之前及之后執行腳本。注:很多人似乎被這些設置里的參數所混淆。你不能將這些字段視作命令行或指令殼。指令殼語法在這里不會生效,因此你如果需要執行多個指令或腳本,請將它們放進客戶端的一個腳本里,讓它們一個接一個地被執行。
最后,你可以在 Schedule 這個頁簽設置如何進行完整及漸進式的備份。你可以在 Edit Config 將它設置為缺省級別,又或者為個別主機進行設置。缺省值是保留一套完整備份及六套漸進式的備份。這樣你便會擁有一個星期的備份。FullPeriod 的值是 6.97,意思即是每 7 日便進行一次完整備份。IncrPeriod 的值是 0.97,意思即是每日都進行漸進式備份。IncrKeepCnt 的值是 6,也就是說 6 日漸進式備份后,就有一日是完整備份。你也可設置 BlackoutPeriods,即是你不想進行備份的日子。這里的每個設置在文檔內都有所解釋,因此這詳閱。
在網頁界面加入客戶端
接下來,請通過網頁界面加進客戶端及它的一切設置。請點擊 Edit Hosts 頁簽,繼而按 Add 按鈕。填入你想備份的主機名稱,然后在 User 部份之下,以 backuppc 作為用戶。這必須是 backuppc,因為備份是已這位用戶來引導的。其它設置都不行。完成后,請按頂部的 save 按鈕。當你點擊位于左面的 Host Summary 連結時,你應該能看見你的新主機。要開始改動主機的設置,請點擊機名,然后一個新的本地將會在頂部打開。請點擊在主機名稱之下、最左上方的 Edit Config。
由此點起,你所做的一切修改將會取代缺省的設置值,并會被存儲到 /etc/BackupPC/pc/主機名稱.pl 這個文件內。請點擊 Xfer 這個按鈕,然后開始在 RsyncShareName 下加入目錄。在它以下的 Include/Exclude 本地內,你可以將任何要排除的東西加進 BackupFilesExclude。完成后,請確定會已點擊在最頂部的 save。加入一臺主機大致上便是這樣。如果你選擇一臺主機,你可以手動式地開始及終止備份來檢查操作是否正常。
根據缺省值,BackupPC 會日以繼夜地、每小時醒來檢查是否有主機被排序作備份。要更改這個特性,請進到 Server configuration 頁簽下的 EditConfig 部份。請更改 WakeupScahedule 來迎合你的需要。
將數據庫備份
要在所備份的主機內包含數據庫的轉儲,你有兩個選擇。第一,你可以寫一個在主機進行備份前執行的腳本。第二,你可以利用 SourceForge 上的 AutoMySQLBackup 腳本計劃來轉儲你的 MySQL 數據庫。通過在腳本上作出簡單的修改,你可以輕易地令它支持 PostgreSQL 數據庫。開始時,請從 [http://sourceforge.net/projects/automysqlbackup|SourceForge] 下載腳本。請將這個腳本復制到要備份的主機,將它于在 /usr/local/bin 等位置。我一般會將該腳本換名來反映它所轉儲的主機名稱。
這一步并非必須,它只是較有邏輯而己。然而,你必須確定這個腳本是可執行的。
# scp automysqlbackup.sh.2.5 host_name:/usr/local/bin # ssh host_name # mv automysqlbackup.sh.2.5 mysql_hostname_dump # chmod +x mysql_hostname_dump
這個腳本內已包含所有選項的詳盡注釋。請你務必從頭閱讀一次,好讓你知道它在做什么。AutoMySQLBackup 連接到并轉儲所有你指定的數據庫到 /backups、發電郵給你(若設置了的話)、并且采用循環的方式來確定你擁有一組數據庫轉儲。
請確定你已填入 USERNAME、PASSWORD、及 DBNAMES。如果你想設置電郵,請遵照腳本內的方法來進行設置。設置的過程非常簡單,因此當你把選項修改好,請在要被備份的主機上手動式執行腳本一次。
這樣你可以檢查 /backups 這個目錄有否被創建,與及轉儲有否發生。
# cd /usr/local/bin # ./mysql_hostname_dump
……大量輸出……或錯誤……請據此作出修正。
# cd /backups # ll
你應該會看見一個分開每日、每周、及每月的目錄結構,而每個數據庫的名稱又會以獨立目錄的型式出現在它們之內。你可以遍歷這些目錄來找出對應你的數據庫的 .sql.gz 文件。
為 BackupPC 主機加入 DumpPreUserCmd
既然轉儲用的腳本已經實際地在主機上設置好,我們便可以在 BackupPC 的網頁界面設置 DumpPreUserCmd 要通過 SSH 連接到被備份的主機并執行 AutoMySQLBackup。請在網頁界面選擇一臺主機,然后選擇位于左上方的 EditConfig 頁簽。選擇 BackupSettings 頁簽并進到 User Commands 以下部份。第一行便是 DumpPreUserCmd。
請在這部份加入下面數行。
$sshPath -q -x -l root $host /usr/local/bin/mysql_hostname_dump
選擇頂部的 save,然后進到主機的 Xfer 頁簽。請確定你在 RsyncShareName 內加入 /backups 這個目錄,否則你的轉儲永遠不會從主機復制出來。這應便完成了,現在你的主機的 MySQL 數據庫將會在 BackupPC 對目錄進行 rsync 前被轉儲。如上述所說,你可以簡易地編輯 AutoMySQLBackup 并改為一個 AutoPostgreSQLBackup 腳本。你只須將所有 MySQL 的語法改為 PostgreSQL 的指令及選項。
BackupPC 的其它功能
之前已經提及,BackupPC 亦可以將 SMB 的共享資源備份、利用 tar 來進行備份、及將備份保存在其它媒體上。
BackupPC 的相關文檔對每個功能都有所解釋。
$Conf{XferMethod} = 'rsync';
The valid values are:
- 'smb': 通過 smbclient 及 SMB 通訊協議進行備份及撤消。
WinXX 的最簡單選擇。
- 'rsync': 通過 rsync(通過 rsh 或 ssh)進行備份及撤消。
linux/unix 的最佳選擇。亦是 WinXX 的好選擇。
- 'rsyncd': 通過客戶端上的 rsync 守護程序進行備份及撤消。
執行著 rsyncd 的 linux/unix 客戶端的最佳選擇。亦是 WinXX
的好選擇。
- 'tar': 通過 tar 或在 ssh、rsh 或 nfs 里執行的 tar 進行備份及撤消。
linux/unix 的一個好選擇。
- 'archive': 主機是臺特殊的存檔主機。備份不會進行。存檔主機是用來將其它
主機的備份保存到磁帶、CDR 或 DVD 等永久性媒體里。
【編輯推薦】