VMware虚拟机备份项目小结

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Hilavergil/article/details/82346229

请容许我发发牢骚

    想先BB两句,不知道为嘛读这个研,不到一年的时间修够了所有的学分,接下来的一年都要给老板打工。研究方向?项目组所做的产品就是研究方向。论文指导?不存在的,快一年了没看过几篇。其实说白了就是用三年的时间换一纸文凭。

    BB也木有用,不如早点写完论文明年出去实习,真羡慕身边几个大佬师兄。

回来啦切入正题

    这个虚拟机备份项目是从五月份底开始的,针对的是VMware的vSphere平台。前期的功能验证主要集中在三个部分:备份、恢复和数据查看,也是对实验室现有灾备平台功能的扩展与补充。编码主要集中在六月份,七月份开始进行联调测试,七月底打包部署1.0版本。时间还是比较紧凑的,尤其是方向转换到一个全新的领域,一切从零开始(之前的备份模块都是针对实体机的,比如文件备份、OS备份、CDP还有HA等)。好在写后台的另一个同事在一六年做过部分调研和验证,帮了我很多啊。

    参与项目的一共四个人,写前端的是张大腿同学,因为项目开始的时候,公司的前端都跳槽了,研二的师姐也出去实习了。。。由于要兼容之前的备份模块,前端也沿用了以前的ext框架,这个框架有点古老了,不过大腿就是大腿,从上手到写完可能就用了俩星期左右。即便页面不是很多,这个效率也很高了,而且中间我们还经历了期末考试。另外一个是公司的老员工啦,整个项目的负责人,负责详细设计和总体进度把握。剩下俩就是我和另外一个写后台的同事了。

    先说说对项目的感受

    功能验证阶段大概持续了10天左右,没有实现的设想被暂时搁置,这个阶段虽然不长,但是很重要,基本上直接决定了项目的走向和接下来的详细设计部分。

    详细设计这部分是亮哥一个人负责的,但是对vCenter+ESXi体系结构最熟悉的是和我一起写后台的同事TW,这个阶段没有他参与进来我觉得是一个失误,也导致了后来编码过程当中,文档在不断地修改且改动幅度有些大,几个功能模块被重新定义、重新编码。

    接下来的编码,感觉还好,没有特别坑的地方,最多是有些小坑会耽误一些时间。最难受的是很少有人做虚拟机备份这个方向的产品,中文能参考的东西都集中在几个大佬的博客上,来回地翻VMware的文档已经是常态了。有一个网站https://communities.vmware.com,关于VMware开发的问题基本都会集中在这里。嗯还有,如果增加一个表或者视图能够大幅减少代码量的话,就加一个吧,对代码维护也是有些好处的。

    我主要是写PHP和C这两部分。

    PHP分两大块,一是前端的接口,二是备份Controller和备份代理的接口。PHP这部分比较繁琐的地方是维护备份链的树形结构,其余的没啥了,但是PHP我是真不熟悉,这是我第二次写PHP代码,上次还是大四写毕设。

    C这部分也是两大块,一是挂载VMware的虚拟磁盘,二是读写虚拟磁盘以实现数据备份和数据恢复。VMware是提供了接口的,VMDK挂载虚拟磁盘,VDDK连接并读写虚拟磁盘。这里遇到一个问题,就是在Linux上挂载虚拟磁盘似乎只能用读写的方式去挂载,这种方式又会修改虚拟磁盘文件,导致与原备份数据的MD5值不符。后来为了性能和效率,就忽略了恢复前备份数据的MD5值的计算和比较。但是虚拟磁盘文件在灾备机上挂载之后,确确实实是被修改过的。这是个很大的问题了,假如灾备机上的备份虚拟磁盘在挂载之后被其他程序修改,这直接会导致备份数据失效。你可能会有疑问,为什么在备份的时候要把整个磁盘备份下来呢?直接备份有效数据不好吗?Emmmmmm,是因为要实现瞬时恢复的功能,直接用NFS挂载恢复的。所以这里有一个矛盾了,要实现数据查看的功能就必然要在灾备机挂载虚拟磁盘,而Linux下挂载虚拟磁盘又必然会导致磁盘文件被修改,进而可能使得备份数据失效。挂载之前先copy一份的代价太大了,目前还不知有什么更好的方案。如果能以只读的方式挂载就好了。

    从整个项目进度来看,推迟了两个星期。大概是因为两点吧,一是完备点的恢复,原计划使用HTTP上传文件实现,但是这里出bug了,很奇怪。功能测试的时候好得不得了,整合到代码里就崩了。尝试了好多天也没好,最后用了VDDK去写磁盘了。二是关于断电、被杀之后的续传问题,这部分做了不少的优化工作,耽误了一些时间。

    先写这么多吧,也没啥可总结的了,其实大部分观点都是从一个码农的视角切入的,期待将来身份会有些转变吧。

猜你喜欢

转载自blog.csdn.net/Hilavergil/article/details/82346229