目前的虚拟机软件,都是在一台物理机上面虚拟出几个VM来进行管理的,暂时还无法做到将物理机整合为一台超级计算机之后再在上面虚拟出VM。为了有效的管理虚拟机,就需要要对虚拟机进行漂移。
如果对虚拟机的实时性要求不高,完全可以做到先将虚拟机关闭之后,再SCP数据到指定的物理机上,重新开启虚拟机即可。对于有时间要求的,我们也可以通过控制VM,让VM先休眠,再漂移数据,然后再重启VM也行。
但是有些系统,如数据库服务器,要求系统能够做到实时漂移,该使用什么样的方案呢?VMware可以做到这一点了,从他们的技术展示会上,也没有明白具体 思路,只知道是快照+恢复。但是我们使用vmware的快照功能,也是需要几秒钟的,他说的实时是一个偷梁换柱的概念?当然了,对于这种系统,数据肯定是 存储在虚拟机之外的存储设备上的,漂移的只是内存中的数据。
如果使用虚拟机的双机热备,也是一种方法,但是需要用户在虚拟机里面安装热备软件,操作起来麻烦,如果能够在VM这个层面解决是最好的,便于管理,还减少用户烦恼。
VM实时漂移的先决条件(该资料由李战提供,非常感谢):
1.VM的磁盘要能瞬间“漂移”
2.VM的访问路径要能瞬间切换
VM漂移的基本过程:
1.新建一个同样配置的VM
2.从旧VM同步内存数据到新VM,这是一个逐步逼近的过程
3.当双方内存快接近一致时,暂停旧VM,同步最后的差异数据(很快)
4.切换虚拟磁盘,切换网络访问路径
5.继续新VM运行
这个过程快的话可以在零点几秒完成,慢的话也就1-2秒。
如果程序的socket连着,你从一台瞬间飘另外一台, 这个socket会不会断?如果漂移后的IP不变,是不会断的,只要迁移后的路由仍然可达,双方的连接状态还是持续的。但是socket属于外部连接,停机切换那会肯定要断开一下的,最多有几个包要丢失而重发,但对TCP连接来说是透明的。