最近与几个朋友聊天谈到linux系统中的备份与恢复的事情,大家觉得现有的linux平台上很少有比较方便易用的增量备份软件,当然这类软件已经很多了,很多人用tar、dump、rsync等命令也可以备份,但它们不是无法实现增量算法,就是技术性太强参数难以掌握,商业上的软件又太贵,安装和操作都较复杂,某些开源软件功能虽然强大易用性不好,操作体验不适合国内的用户,我之前在chinaunix论坛上发表过一篇关于bacula备份软件的文章(原文地址是 http://bbs.chinaunix.net/thread-2002076-1-1.html ),也研究过Amanda,BackupPC等等,都不理想,界面不友好,我们的设计目标就是“简单方便”,“注重操作体验”,"基于web操作",凭借兴趣和爱好,自己设计并开发了这款web管理方式的远程数据增量备份/恢复管理软件,我个人是非常看好html5的未来发展的,web界面也使用了一些html5的元素,介绍一下这款软件,欢迎大家拍砖,更欢迎提出友好的建议,大家希望具备的功能也可以提给我。
特点,安装部署上的很多细节工作全由程序解决,不让用户做多余的手工配置:
- 客户端(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:CentOS6、RedHat6、RedHat5、AIX,perl5.10(包含)以上版本;
1)登录界面
2)登录之后的主要界面,在这里用户可以通过创建任务的形式来创建备份任务,软件采用server与client的角色,在这个server界面中用户可以统一管理网络中不同的有备份需求的客户端,一旦创建成功,server就与client完成了一些必要的网络连接配置,以后只要保证网络是联通的,就可以随时进行数据的远程备份与恢复,局域网或互联网均可以,server角色可以连接后端大容量存储,将传输的数据保存到存储设备之上,当然普通硬盘也可以。备份的起始时间,备份类型,备份结果;恢复的起始时间,恢复类型,恢复结果都可以一目了然。支持手动备份与定时备份,两种备份状态也可以记录下来。
3)创建任务的界面,采用JQuery实现,备份口令与恢复口令可以不同,方便将来备份与恢复人员角色可以不同。
4)下面是任务创建中的定时标签页面,支持动态添加或删除定时信息,非常灵活。
5)任务创建中的邮件报告标签页面,在这里我做了一个类似foxmail的邮件客户端,用户配置了smtp,邮件帐户和口令,并打开邮件通知的开关之后就可以对每次备份或恢复的情况发送免费的邮件报告了,因为考虑到数据量大的时候备份情况无法实时了解,所以设计邮件报告的机制非常灵活,报告中的信息也是非常准确的,可以了解系统的很多情况。
6)在创建任务时,如果网络问题或客户端存在防火墙,那么任务的创建将会失败,原理是,远程备份任务的创建实质是为备份任务与远程Agent端完成一些必要的数据传输、授权等操作。没有这些前期的交互配置是无法去对远程主机进行备份操作的(没有权限),好在我已经设计好这些配置完全自动化,不需要用户去做,客户端只要安装了即可,不用做任何的配置(当然,iptables如果开了是要配置一下的,要允许tcp/ip协议5610端口)。
7)手动备份界面,这里我设计了两种备份模式,一个是后台模式:数据量超过1G时建议使用这种模式,任务将在后台自动运行,这种模式可以与邮件报告配合的很好,不必让用户等待备份结束,后台执行完后自动给用户发送报告。前台模式:适合数据量少的时候,备份执行完成后将立即在web窗口中显示整个备份过程的详细信息与结果。
8)浏览日志界面,在这里能够查到所有的日志记录,供管理员参考,点击“清空日志”将会清空所有历史日志,并记录“清空日志”操作的时间。日志显示的顺序是最新的记录优先在最上面。
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 来安装解决。
来源:oschina
链接:https://my.oschina.net/u/86462/blog/33206