引言:在信息化推進的過程中,各種業務系統和應用遍地開花,產生大量業務的數據。與此同時,虛擬化技術的應用推廣,把各個業務系統的應用和數據分離到獨立的服務器上,以方便管理升級維護,充分利用硬件資源。這必然導致網絡中心的數據備份工作增加許多。那么,要如何應對越來越多的數據備份工作呢?本文將就這一問題深入探討一番。
在信息系統安全等級保護工作中,圍繞計算機系統所采取的許多安全保護措施,都是為了保證系統數據在應用、存儲、傳輸和處理等過程中的安全性,以實現數據的機密性、完整性、可控性和不可否認性,同時可以進行數據備份和恢復。本文主要關注其中的數據備份工作。
數據安全威脅主要來自以下幾種形式:
1.數據存儲設備故障。這是最普通的情況,隨著數據存儲設備性能的提高與改進,這種故障會進一步減少。
2.數據存儲介質毀壞。這里包括機械性毀損和電磁性毀損,包括人為因素造成的損壞、意外事件造成的損壞和介質壽命因素造成的損壞等。通過使用冗余設備,這種故障能得到有效抑制。3.各種天災造成的損壞。包括地震、海嘯和山崩等地質災害,以及風災、水災、雪災、火災、低溫和高溫等災害造成的數據系統損壞。
4.衍生災害。天災人禍都可能引發衍生性災害,可能造成電力系統,天、地通信系統等損壞,進而導致數據系統損壞。
5.人為無意因素造成對數據誤操作引發的數據損失,甚至是數據災難。
6.人為有意因素造成的數據損壞。例如黑客、病毒和惡意程序攻擊等有意因素,都會對數據造成破壞。
為此,為了保障數據安全,我們必須根據數據的重要性和本單位的實際情況,采取相應的數據備份策略和備份技術來保障數據的安全可用。
差異備份策略在避免了完全備份和增量備份兩種策略缺陷的同時,又具有它們的所有優點。
數據備份技術主要有雙機熱備、數據冷備份、數據異地備份等。
我們單位目前主要采取的數據備份策略是異地磁盤每周全份、每天增備,而數據備份方式主要有:
1.采購有授權備份節點數限制的備份軟件對重要的幾臺服務器數據進行備份。
2.通過創建快照或者克隆對虛擬機進行備份。
3.通過FTP方式進行網絡備份。
4.通過移動硬盤的方式進行離線備份。
現有的手工備份工作繁瑣,查漏麻煩,購買商業軟件的授權節點數又面臨資金問題。隨著需要備份的數據越來越多,是繼續購買授權節點數還是繼續手工備份呢?
我們在此過程中,一直在考慮其他性價比高的解決方案。比如,是否可以通過開源軟件進行備份,并把它集成進我們最近構建的開源網絡運維統一平臺,實現與其他網絡管理工作在同一個平臺管理,避免在多個平臺進行管理或是手工操作而導致的管理不便。
Rsync是類UNIX系統下的數據鏡像備份工具——Remote sync(遠程同步)。它是一個遠程數據同步工具,可通過LAN 或互聯網快速同步多臺主機間的文件。
Rsync本來是用以取代 rcp的一個工具,它當前由 rsync.samba.org 維護。Rsync 使用所謂的”Rsync演算法”來使本地和遠程兩個主機之間的文件達到同步,這個算法只傳送兩個文件的不同部分,而不是每次都整份傳送,因此速度相當快。
(1)鏡像:可以鏡像保存整個目錄樹和文件系統,可以很容易做到保持原來文件的權限、時間、軟硬鏈接等等。
(2)快速:第一次同步時,Rsync 會復制全部內容,但在下一次只傳輸修改過的文件。
(3)省帶寬:Rsync在傳輸數據的過程中可以實行壓縮及解壓縮操作,因此可以使用更少的帶寬。
(4)安全:可以使用scp、ssh等方式來傳輸文件,當然也可以通過直接的socket連接,支持匿名傳輸,以方便進行網站鏡象。
(5)特權:安裝和執行Rsync 無需特別的權限。
Rsync之所以同步文件的速度相當快,是因為“Rsync同步算法”能在很短的時間內計算出需要備份的數據,關于Rsync的同步算法描述如下:
假定A與B是在1號和2號兩臺計算機之間同步相似的文件,其中1號對文件A擁有訪問權,2號對文件B擁有訪問權。并且假定主機1號與2號之間的網絡帶寬很小。那么Rsync算法將通過下面的五個步驟來完成:
(1) 2號將文件B分割成一組不重疊的固定大小為S字節的數據塊,最后一塊可能會比S小;
(2) 2號對每一個分割好的數據塊執行兩種校驗:一種是32位的滾動弱校驗,另一種是128位的MD4強校驗;
(3) 2號將這些校驗結果發給1號;
(4) 1號通過搜索文件A的所有大小為S的數據塊(偏移量可以任選,不一定非要是S的倍數),來尋找與文件B的某一塊有著相同的弱校驗碼和強校驗碼的數據塊。這項工作可以借助滾動校驗的特性很快完成;
(5) 1號發給2號一串指令來生成文件A在2號上的備份。這里的每一條指令要么是對文件B經擁有某一個數據塊而不需重傳的證明,要么是一個數據塊,這個數據塊肯定是沒有與文件B的任何一個數據塊匹配上的。
必須同時在備份源服務器A和備份目標服務器B上都安裝Rsync,其中服務器A上是以服務器模式運行Rsync,而服務器B上則以客戶端方式運行Rsync。這樣在服務器A上運行Rsync守護進程,在備份服務器B上定時運行客戶程序來備份源服務器A上需要備份的內容。
根據學校的數據備份的實際需求和開源工具的比較,我們選擇比較成熟的Rsync軟件,在實現數據同步的同時,把同步日志發送到以Cacti為基礎搭建的統一網管平臺的Syslog模塊里進行統一管理,并結合統一網管平臺的Threshold模塊實現異常報警,構建統一網絡數據備份系統,具體建設方案如下:在Linux下 用 Rsync+Syslog,再 用cwRsync+NTsyslog。
基本備份功能通過免費軟件Rsync實現,Linux和Windows操作系統均有相應的Rsync軟件。
(1)安裝Rsync軟件
Centos下安裝Rsync的命令為yum install rsync。
Window s下 安裝 cw Rsync則 是下載經典免費版本cwRsyncServer-v4.1.0,按默認方式安裝即可。
(2)配置服務器端
Centos下配置Rsync的命令為vim /etc/rsyncd.conf,Windows下的配置文件路徑則為“C:Program Files (x86)ICW sync.conf”。
下面以Windows下的配置文件為例,Centos下類之:
##全局參數開始##
use chroot = false #如果“use chroot”指定為true,那么Rsync在傳輸文件前,首先chroot到path參數所指定的目錄下。這樣做的原因是實現額外的安全防護,但是缺點是需要root權限,并且不能備份指向外部的符號連接所指向的目錄文件,默認情況下chroot的值為true。
strict modes = false #該選項指定是否監測密碼文件的權限,如果該選項值為true,那么密碼文件只能被rsync服務器運行身份的用戶訪問,其他任何用戶不能訪問該文件,默認值為true。
hostsallow =192.168.1.100 #指該選項指定哪些IP的客戶允許連接該模塊。客戶模式定義可以是以下形式:單個IP地址,例如:192.167.0.1;整個網段,例如 :192.168.0.0/24,也可以是192.168.0.0 /255.255.255.0。
多個IP或網段需要用空格隔開,“*”則表示所有,默認是允許所有主機連接。
hosts deny = * #指定不允許連接Rsync服務器的機器,可以使用hosts allow的定義方式來進行定義。默認是沒有hosts deny定義。
log file = rsyncd.log#指定Rsync的日志文件,而不把日志發送給syslog
#為了集中管理日志,上行需注釋掉,以便log不存在本地而是發到syslog
pid file = rsyncd.pid#指定Rsync的pid文件
port = 873 # 指定服務運行端口,默認是873
uid = 0 #不指定用戶id,不加這一行將無法使用任何賬戶
gid = 0 #不指定用戶組id
max connections = 10#指定該模塊的最大并發連接數量以保護服務器,超過限制的連接請求被告知隨后再試。默認值是0,也就是沒有限制。
##全局參數結束##
#以下為模塊參數,我們可以通過根據自己的需要,來指定多個模塊

read only = false #該選項設定是否允許客戶上載文件,如果為true那么所有的上載請求都會失敗,如果為false并且服務器目錄讀寫權限允許那么上載是允許的,默認值為true。
transfer logging = yes#使Rsync服務器使用ftp格式的文件來記錄下載和上載操作在自己單獨的日志中
lock file = rsyncd.lock #指定支持max connections參數的鎖文件
#auth users = servicescada #認證用戶名
#secrets file = rsync.password #認證用戶的用戶名和密碼存儲位置
##模塊test參數結束
定期執行功能,通過操作系統的計劃任務實現。
(1)Centos下 通 過crontab命令加入操作系統的計劃任務

此計劃任務為每天凌晨1:00以root用戶和指定的/etc/rsyncd.password文件內保存的密碼登錄192.168.1.1,把 192.168.1.1的test模塊里的文件夾同步到本地的/home/backup/192.168.1.1/目錄,同步參數為azu(其中-a, --archive歸 檔模式,表示以遞歸方式傳輸文件,并保持所有文件屬 性,等 于 -rlptgoD;-z,--compress對備份的文件在傳輸時進行壓縮處理;-u, --update僅僅進行更新,也就是跳過所有已經存在于DST,并且文件時間晚于要備份的文件,不覆蓋更新的文件)。
我們亦可以通過寫shell腳本來實現豐富功能,比如實現每7天全備、每天差備,調用系統的mailx軟件在同步異常或恢復時發送郵件通知。
(2)Windows下通過系統控制面板里的計劃任務來實現。
建立bat文件內容如下:

然后在控制面板的計劃任務里面添加相應的任務即可。Windows下亦可以通過bat腳本調用vb script來實現以上Centos里用shell來實現的豐富功能。
服務器在安裝好Rsync軟件后,可能在后續的系統更新或是安裝其他軟件時破壞了Rsync服務而導致無法同步。那么我們能不能像監控網頁、數據庫服務一樣來對此服務進行實時監控呢?
我們可以選擇Windows下的hostmonitor、whats up等服務監控軟件進行監控,而筆者此處是選擇了已經集成在網絡運維統一平臺里的Nagios模塊對此服務進行實時監控,并在服務異常時調用Threshold發送郵件報警。
我們在前面的Rsync配置文件rsync.conf中提到需要注釋log file = rsyncd.log,以便Rsync軟件把日志作為系統日志syslog處理。
在UNIX類操作系統上,syslog廣泛應用于系統日志。syslog日志消息既可以記錄在本地文件中,也可以通過網絡發送到接收syslog的服務器。接收syslog的服務器可以對多個設備的syslog消息進行統一的存儲,或者解析其中的內容做相應的處理。常見的應用場景是網絡管理工具、安全管理系統、日志審計系統。
修改備份源服務器的/etc/syslog.conf文 件,在有關配置行的操作動作部分用一個“@”字符+日志服務器IP。如*.*@192.168.1.200
在Windows操作系統下沒有自帶syslog客戶端軟件,但可以通過安裝NTSyslog軟件來實現把系統日志轉發到指定的日志服務器。
筆者的日志服務器為用Cacti搭建的網絡運維統一平臺里的服務器,通過其中的Syslog模塊來查看相應的服務器、防火墻、交換機、IPS等日志,此處特別針對Rsync的日志做了二次開發,以方便在Syslog模塊下查看。
與傳統的cp、tar備份方式相比,Rsync具有安全性高、備份迅速、支持增量備份等優點,通過Rsync可以解決對實時性要求不高的數據備份需求,例如定期的備份文件服務器數據到遠端服務器,對本地磁盤定期做數據鏡像等。
隨著應用系統規模的不斷擴大,對數據的安全性和可靠性也提出了更高的要求,Rsync在高端業務系統中也逐漸暴露出了很多不足。
首先,Rsync同步數據時,需要掃描所有文件后進行比對,進行差量傳輸。如果文件數量達到了百萬甚至千萬量級,掃描所有文件將是非常耗時的,而且正在發生變化的往往是其中很少的一部分,這是非常低效的方式。
其次,Rsync不能實時的去監測、同步數據,雖然它可以通過Linux守護進程的方式進行觸發同步,但是兩次觸發動作一定會有時間差,這樣就會導致服務端和客戶端數據可能出現不一致,而無法在應用故障時完全的恢復數據。基于以上原因,Rsync+Inotify組合出現了!
Inotify是一種強大的、細粒度的、異步的文件系統事件監控機制,Linux內核從2.6.13起,加入了Inotify支持,通過Inotify可以監控文件系統中添加、刪除,修改、移動等各種細微事件,利用這個內核接口,第三方軟件就可以監控文件系統下文件的各種變化情況,而Inotify-tools就是這樣的一個第三方軟件。
Rsync可以實現觸發式的文件同步,但是通過crontab守護進程方式進行觸發,同步數據和實際數據會有差異,而Inotify可以監控文件系統的各種變化,當文件有任何變動時,就觸發Rsync同步,這樣剛好解決了同步數據的實時性問題。
所以,如果業務系統對數據同步的實時性要求很高,要求實現正式服務器一旦出現故障,則備份服務器可以馬上上線這樣的類似容災系統的功能的話,我們可以通過先克隆虛擬機到異地,再在正式服務器上安裝Inotify(Windows下也支持管道符,可以通過Inotifywait再結合自己寫腳本來實現)。
通過采用多個免費工具的整合,實現統一網絡數據備份系統,把日志和服務監控集成進網絡運維統一平臺進行管理。下一步工作是把數據備份作業的配置和最近一次運行的狀態通過圖形化來查看管理,以提高日常工作效率。