本身興趣使然設計並開發了一款web管理方式的遠程數據增量備份/恢復軟件

       最近與幾個朋友聊天談到linux系統中的備份與恢復的事情,你們以爲現有的linux平臺上不多有比較方便易用的增量備份軟件,固然這類軟件已經不少了,不少人用tar、dump、rsync等命令也能夠備份,但它們不是沒法實現增量算法,就是技術性太強參數難以掌握,商業上的軟件又太貴,安裝和操做都較複雜,某些開源軟件功能雖然強大易用性很差,操做體驗不適合國內的用戶,我以前在chinaunix論壇上發表過一篇關於bacula備份軟件的文章(原文地址是 http://bbs.chinaunix.net/thread-2002076-1-1.html ),也研究過Amanda,BackupPC等等,都不理想,界面不友好,咱們的設計目標就是「簡單方便」,「注重操做體驗」,"基於web操做",憑藉興趣和愛好,本身設計並開發了這款web管理方式的遠程數據增量備份/恢復管理軟件,我我的是很是看好html5的將來發展的,web界面也使用了一些html5的元素,介紹一下這款軟件,歡迎你們拍磚,更歡迎提出友好的建議,你們但願具有的功能也能夠提給我。html

特色,安裝部署上的不少細節工做全由程序解決,不讓用戶作多餘的手工配置:前端

  •     客戶端(Agent),腳本自動安裝不須要作任何配置。惟一一個前提是優先安裝xinetd的rpm包,由於端口是由xinetd來管理,Agent包在登陸後的「系統設置」頁面中下載;若xinetd未安裝請先使用  yum install xinetd 安裝。須要備份數據的服務器都安裝這個Agent包。備份過程將由服務器端採用「拉」的方式,把agent端的數據集中備份到服務器端;恢復時服務器端採用「推」的方式,把數據推回到agent端。不管「拉」仍是「推」都有認證過程,都是增量方式。
  •     服務器端自動化的安裝腳本使整個安裝過程不須要任何手動配置,安裝使用linux自帶的Apache而且必要的配置自動完成,須要打開mysql數據庫服務,該作的安裝腳本都考慮到了(除非你使用自定義路徑的Apache或其餘的web server)。安裝成功後訪問http://x.x.x.x/login.html打開web管理界面(輸入login.html是爲了不與服務器上已經有的index.html頁面衝突),默認登陸用戶 admin,默認口令zebraadmin;
  •     兼容IE8以上(IE9好像有些格式上的錯位),兼容Firefox,Chrome,Safari,Opera瀏覽器;
  •     支持的OS:CentOS六、RedHat六、RedHat五、AIX,perl5.10(包含)以上版本;

1)登陸界面html5

2)登陸以後的主要界面,在這裏用戶能夠經過建立任務的形式來建立備份任務,軟件採用server與client的角色,在這個server界面中用戶能夠統一管理網絡中不一樣的有備份需求的客戶端,一旦建立成功,server就與client完成了一些必要的網絡鏈接配置,之後只要保證網絡是聯通的,就能夠隨時進行數據的遠程備份與恢復,局域網或互聯網都可以,server角色能夠鏈接後端大容量存儲,將傳輸的數據保存到存儲設備之上,固然普通硬盤也能夠。備份的起始時間,備份類型,備份結果;恢復的起始時間,恢復類型,恢復結果均可以一目瞭然。支持手動備份與定時備份,兩種備份狀態也能夠記錄下來。mysql

3)建立任務的界面,採用JQuery實現,備份口令與恢復口令能夠不一樣,方便未來備份與恢復人員角色能夠不一樣。linux

4)下面是任務建立中的定時標籤頁面,支持動態添加或刪除定時信息,很是靈活。web

5)任務建立中的郵件報告標籤頁面,在這裏我作了一個相似foxmail的郵件客戶端,用戶配置了smtp,郵件賬戶和口令,並打開郵件通知的開關以後就能夠對每次備份或恢復的狀況發送免費的郵件報告了,由於考慮到數據量大的時候備份狀況沒法實時瞭解,因此設計郵件報告的機制很是靈活,報告中的信息也是很是準確的,能夠了解系統的不少狀況。算法

6)在建立任務時,若是網絡問題或客戶端存在防火牆,那麼任務的建立將會失敗,原理是,遠程備份任務的建立實質是爲備份任務與遠程Agent端完成一些必要的數據傳輸、受權等操做。沒有這些前期的交互配置是沒法去對遠程主機進行備份操做的(沒有權限),好在我已經設計好這些配置徹底自動化,不須要用戶去作,客戶端只要安裝了便可,不用作任何的配置(固然,iptables若是開了是要配置一下的,要容許tcp/ip協議5610端口)。sql

7)手動備份界面,這裏我設計了兩種備份模式,一個是後臺模式:數據量超過1G時建議使用這種模式,任務將在後臺自動運行,這種模式能夠與郵件報告配合的很好,沒必要讓用戶等待備份結束,後臺執行完後自動給用戶發送報告。前臺模式:適合數據量少的時候,備份執行完成後將當即在web窗口中顯示整個備份過程的詳細信息與結果。chrome

8)瀏覽日誌界面,在這裏可以查到全部的日誌記錄,供管理員參考,點擊「清空日誌」將會清空全部歷史日誌,並記錄「清空日誌」操做的時間。日誌顯示的順序是最新的記錄優先在最上面。數據庫

瀏覽日誌界面.png

9)登陸首頁面在ipad平板電腦上的顯示效果,由於採用的html5+JQuery代碼,因此對主流瀏覽器firefox,chrome,opera,safari的支持很是好,基本上都不會有操做上的問題。IE瀏覽器訪問會出現錯位狀況。

10)登陸後的頁面在ipad平板電腦上的顯示效果,支持ipad操做。

11)登陸首頁面在iphone4s手機上顯示的效果

12)登陸後的頁面在iphone4s手機上顯示的效果

Changlog

----- 2012-5-27 修改Zebra_MirrorBackup_ServerV1.1版本 -----

Changlog

1)增長了建立備份時對備份和恢復最大傳輸速率的限制功能,此功能能夠有效的限制傳輸速度的最大速率,適用於用戶的服務器在工做時間內的備份操做或者恢復操做的場景,此功能能夠有效的避免對網絡帶寬的佔用,避免與用戶正常網絡訪問資源的爭搶。

輸入數字0或者不設置均表示無最大傳輸速度限制。

此功能能夠在建立備份任務時設置,也能夠在任務建立完成後修改。

2)修正了V1.0版本中刪除任務時僅從數據庫中刪除任務而沒有將任務工做目錄刪除的問題。

3)改進了日誌查看的順序,將最新的操做日誌顯示到頁面的最上面,方便用戶查看。

4)增長了斷點續傳的功能,本功能場景描述:當在傳輸過程當中由於網絡問題或其餘緣由致使傳輸中斷,此時某個文件傳輸了一部分,當問題解決以後再次從新傳輸,那個上次傳了一部分的文件不會再從新開始傳輸而是會接着上一次傳輸中斷的地方繼續傳,直到完成所有傳輸。這個功能能夠有效的節約備份或恢復的傳輸時間,節約網絡資源的佔用,通過屢次測試效果很理想,因此添加到V1.1版本中。傳輸了一部分的文件將會保存到server端的叫Zebra_Partial的臨時目錄中,例如:/storage1/……/Zebra_Partial,當所有傳輸完成後這個目錄將會消失,若是存在則意味着您有未傳輸完的文件。

----- 2012-8-15 開發Zebra_MirrorBackup_ServerV1.1版本 -----

Changlog

1) 修改了登陸後,右上角沒法正常顯示登陸用戶信息的問題,即修改了老是顯示「用戶名: #username#」的問題。

2) 備份的Web程序增長了對mod_perl模塊的支持,並在安裝過程當中自動判斷操做系統中是否已經安裝了該模塊,若是檢測Apache沒有安裝該模塊,安裝程序會自動經過yum方式來安裝mod_perl軟件包及其依賴軟件包,自動完成Apache支持mod_perl的配置並自動重啓Apache Server進程。

----- 2013-02-20 開發Zebra_MirrorBackup_ServerV1.2版本 -----

Changlog

1)  修改了「執行方式」中手動執行/定時執行內容在翻頁後不顯示的問題;

2)  增長了一個比較重要的功能「恢復Agent配置」的功能,這個功能能夠恢復被從新安裝的Agent端的配置。這是用戶提出的一個比較現實的需求,當Agent端因某種緣由被從新安裝之後,沒法使用Server端將數據恢復回去,由於Agent端與Server端相應的配置不統一,認證丟失,相關的傳輸沒法進行。作爲一個備份/恢復軟件,必然要解決這種問題,V1.2版本知足了這個需求,只要Server端是正常的,就可以恢復任意Agent端的配置文件及備份的數據,而是是一鍵恢復簡單快速。

3)  修改了軟件中的一些冗餘代碼,修改了建立任務時的後臺腳本,建立速度加快一些。

----- 2013-05-22 開發Zebra_MirrorBackup_ServerV1.3版本 -----

Changlog

1)更新了對mysql5.6.x版本的支持,主要解決了【Field 'ssl_cipher' doesn't have a default value】這個錯誤問題。

2)增長了「在線幫助」的頁面,點擊連接後彈出新的標籤頁。

----- 2013-06-06 開發Zebra_MirrorBackup_ServerV2.0版本 -----

Changlog

備份的改進:

1)改進了備份後在頁面上的顯示,第一次將進行一次完整的全備份,界面上的備份狀態也將顯示「完整」二字。這不只是頁面上的變化,後臺備份執行時的參數也分紅了2個,程序會自動判斷是不是第一次備份而後自動選擇;以下圖:


2)增長「重複數據刪除技術」,每次新備份都將與最近的前一次備份作比較,未變化的文件直接作硬鏈接,變化的數據纔會傳輸,備份效率大大提升,磁盤空間佔用減小。這種技術能夠實現每次備份都是一份完整的全數據且在空間佔用上不會額外增長,對完整的恢復任意一天的數據提供了方便;


3)藉助新增的「重複數據刪除技術」軟件提供了多份備份副本,使恢復時也能夠恢復到任意一天備份過的數據;

   目前副本默認保存3份,按天劃分,即天天一個副本,同一天內屢次執行備份都將視爲一個備份副本,會在一個副本內作增量更新,未來容許在必定範圍內用戶自定義保存副本的個數(會在圖形界面上增長接口);

4)增長對舊數據刪除的技術,若保存3份,即3天的數據,那麼會自動刪除前3天的舊數據,舉例,保存 1,2,3,三天的數據,在第四天備份之後將刪除第一天的數據;在刪除舊數據時,提供判斷此備份是不是當前惟一的一個備份,避免在用戶忘記備份後,機械的刪除了惟一備份的狀況;

恢復的改進:

1)恢復時增長對是否曾經作過備份作檢測,若還未作過備份,給出提醒讓用戶先執行一次備份(之前會直接報「找不到恢復數據」的錯誤);
2)恢復時增長對恢復數據的有效性作檢測,若備份過但數據丟失了,也將給出提醒;

----- 2013-09-03 修改Zebra_MirrorBackup_ServerV2.1版本 -----

Changlog

1)在建立備份的時候,提供了2種方案選擇,「多副本重複數據刪除」 和 「鏡像備份(適用於雙機無存儲)」。

  • 「多副本重複數據刪除」:選擇這種方案,將保留多個完整的備份副本,備份的數據會新舊自動更替。(默認保留3份,天天一份,自動刪除前2天的舊數據,刪除舊數據以前會判斷這份舊數據是不是目前惟一的舊備份,避免在沒有連續備份的狀況機械的刪除舊數據。)完整副本採用重複數據刪除技術,相同無變化的文件在磁盤上只佔用一份的空間。
  • 「鏡像備份(適用於雙機無存儲)」:選擇這種方案,主要是針對雙機熱備解決方案中無共享存儲的環境下,備份後的數據始終保留一份,不會常常變化,這樣能夠始終保證與源數據鏡像一致(包括屬主、權限、大小、時間戳、uid等),方便使用在雙機無存儲解決方案的場景。

 

2)修改了安裝腳本,在安裝某些依賴軟件的時候判斷是否已經安裝避免重複安裝。

 

----- 2014-05-21 修改Zebra_BackupRecover_ServerV2.1版本 -----

Changlog

1)修改了包名爲 Zebra_BackupRecover_ServerV2.1

2)修改了backup_multi_template模版:

在沒有連續備份狀況下,刪除3天之前的代碼就不會生效,此時,咱們會找出備份目錄下的全部舊數據,把$last_backup以前的舊備份目錄都找出來。目前的操做只是找出來並記錄到了del_old.log日誌中,能夠增長刪除的動做,刪除last_backup.txt記錄的舊備份以前的因此備份。

1)修改了agent包中的services註冊名稱,對應性更好,修改成

# add services for Zebra_BackupRecover_Agent

backup_agent   5610/tcp                        # incremental backup agent

backup_agent   5610/udp                        # incremental backup agent

----- 2015-08-05 修改Zebra_BackupRecover_ServerV2.2版本 -----

ChangLog

1)修改了report_email_template.pl文件

my $password = '';

這裏把「」改爲了‘’,解決了當用戶在web前端設置密碼時若是密碼中含有特殊字符,例如@這種時,report_email.pl程序在執行時將會報錯,致使沒法正常執行,改成單引號就沒問題了。

my $ip = "";

這裏去掉了原來的$ip變量值(原來是my $ip = `ifconfig |grep addr:|awk -F : '{printf \$2}'|awk '{print \$1}'`;)由於原來的ip變量獲取本地ip地址,發送的報告內容應該顯示agent端的ip地址纔對,顯示本地ip地址是錯誤的,由於report_email.pl腳本在server端執行,顯示server端本地的ip會使用戶不知道該報告到底備份的是哪一個agent的報告。

 

****** 常見FAQ問題 ******

(一)正常登陸後,找不到「建立備份」按鈕,如何解決?

正常登陸後,導航欄顯示正常,只是找不到「建立備份」按鈕,這種現象出現的緣由主要與系統中的mysql軟件相關。

緣由之一:系統環境變量沒法正確找到mysql命令所在的位置。系統中的mysql不是採用rpm包方式安裝的,採用tar源碼包或其餘方法安裝(例如手動copy),這種方式很容易致使系統環境變量沒法正確找到mysql命令所在的位置。
解決方法:手動將tar源碼包安裝後的命令路徑寫進/etc/ld.so.conf文件中。或者在/usr/bin下建立一個軟連接就能夠了。

緣由之二:mysql的默認root用戶的口令是空的,Zebra備份軟件在安裝時會默認使用root用戶的空口令來鏈接mysql,用來方便的建立數據庫和數據表,若這裏預先設置了root用戶的口令,安裝程序就沒法建立數據庫和數據表了。
解決辦法:建議用戶先置root口令爲空(指mysql中的root用戶口令不是Linux系統的root用戶),待安裝完成後在設置一個複雜的口令。

緣由之三:系統中缺乏Perl的DBD::mysql模塊。Zebra備份軟件是由Perl程序開發完成的,鏈接mysql數據庫時採用的就是 DBD::mysql模塊,通常來講Linux系統能夠自帶這個模塊,但因爲管理員在安裝Linux操做系統時沒有選擇安裝這個模塊,致使Zebra備份 軟件沒法正常操做mysql數據庫。
解決辦法:這裏給出一個完整的安裝mysql+DBI+DBD模塊的方法(rpm包)
    rpm -i mysql mysql-devel mysql-server
    rpm -i perl-DBI
    rpm -i DBD-MySQL
    rpm -i zlib-devel
注意:系統中的mysql安裝必須安裝mysql、mysql-devel、mysql-server三個軟件包,這樣才能保證正常安裝DBI和DBD

(二)安裝過程當中提示相似下面的mysql.sock有關的錯誤,如何處理?

錯誤提示以下:

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)

解決辦法:安裝過程當中若出現這兩條錯誤信息,說明您的系統中已經安裝了mysql服務,可是mysql服務器的默認啓動參數作了修改,mysql.sock文件位置作了改變。在這種狀況下,如何能正常使用Zebra backup備份軟件呢,是否要從新安裝一個mysql服務器?仍是要修改mysql服務器的參數?答案是都沒必要,您的系統環境咱們不作任何改變,只要您簡單的執行下面的語句,就全搞定了。

找到您系統中當前工做的mysql.sock文件位置,而後作一個符號連接

# ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock

一切OK了,卸載後再次安裝就能夠了。

(三)安裝過程當中出現「ERROR 1364 (HY000) at line 6: Field 'ssl_cipher' doesn't have a default value」錯誤,如何解決?

分析問題:CentOS 6.3系統中自帶的Mysql 5.1.61版本不存在這種問題,而從官網下載的mysql 5.6.10版本在使用insert into user命令建立用戶時,會出現這類的錯誤,緣由是新版的mysql強制要求用戶在使用insert命令插入user表來建立用戶時,必須強制要求給出「ssl_cipher」,「x509_issuer」,「x509_subject」這三個字段一個默認值。

解決辦法:使用下面的語句從新建立mcadmin用戶,給出那三個字段一個空的默認值。

insert into user (user,host,password,ssl_cipher,x509_issuer,x509_subject) values ('mcadmin','localhost',password('YourPassword'),'','','');

這個問題我已經在新安裝包裏更新了,不須要手動修改。

(四)若點擊「備份」之後提示下面的錯誤,緣由是什麼?

rsync: mkdir "/storage1/1/192.168.123.75/opt" failed: No such file or directory (2)

分析問題:說明rsync在建立鏡像目錄結構的時候,缺乏權限。

解決辦法:檢查/storage1目錄的屬主是不是apache:apache,如果軟連接,那麼真實的storage1目錄屬主必須也是apache:apache才行。

(五)如何恢復數據?

假設A機上有數據/home/shen目錄,該目錄已經成功備份到B機上保存。

恢復時必須保證A機上的/home/shen目錄是存在的,備份軟件纔可以正確的將備份的數據恢復回去。若/home/shen目錄不存在請隨便建立一個,恢復回去後的屬主和權限將自動更新爲您原來的樣子。

(六)安裝後登陸界面顯示正常,輸入用戶名(admin)和默認口令(zebraadmin)後,沒法正常訪問登陸後的頁面,如何處理?

分析過程:手動執行main程序,看看有什麼輸出

cd /var/www/cgi-bin/backup
  ./main
Can't locate CGI.pm in @INC (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at -e line 35.
BEGIN failed--compilation aborted at -e line 35.

若輸出如上面所示,表示Linux系統未安裝perl的CGI模塊。

解決辦法:可使用 yum install perl-CGI 來安裝解決。

相關文章
相關標籤/搜索