VMware虚拟机备份项目小结

2019.03.07

想起了去年年底的一个功能更新(虚拟机瞬时恢复+热迁移)

    做验证的过程中发现VDDK更新了,最新的版本支持vmdk磁盘在Linux上以只读模式挂载了,安全性提高了不少。主要是因为这里还涉及到一个备份数据查看模块,想查看备份到灾备机的虚拟磁盘上的内容就不得不挂载这个磁盘文件,然后再把分区下的目录返回给用户。VDDK下的VMDK是实现这个挂载功能的,本质上是定位磁盘文件中分区的偏移,然后关联到一个闲置的loop设备,再把这个虚拟块设备挂载到某个目录下实现的。更新后的只读挂载可以保证不对备份数据进行修改。

    如果自己实现这个功能而不用VMDK的话,emmm,关键是不知道子磁盘或者说是快照磁盘的结构,那些定长分割的磁盘结构也不知道是啥样的...

--------------------------------------------------我是一条分割线-----------------------------------------------------

请容许我发发牢骚

    删掉删掉...

    删掉...

    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去写磁盘了。二是关于断电、被杀之后的续传问题,这部分做了不少的优化工作,耽误了一些时间。

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

发布了112 篇原创文章 · 获赞 103 · 访问量 11万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览